教程:Apple Invader mit Processing.py —阶段1

在einem YouTube视频(作者berichteten)中,信息学学生Matthew Hopson von einem Programmierwettbewerb是一位资深的学院,在dem ein Spiel节目中,werden sollte,在dem gute AndroidenböseÄpfelfrensants derer中。 (Wollte der Lehrer seinen Studentenbloßdamit sagen吗?)

贝恩·马修·霍普森( Bai Matthew Hopson)的《 太空入侵者》( Inva Mischung)和《 宇宙入侵者》( Pineformer heraus und Disese inspirierte mich)等等,因此在处理上也非常有帮助。 Vert anderthalb Jahren hatch ich ja schon einmal gezeigt,wine man eine Spielfigur mit acht verschiedenen Bildern je Bewegungsrichtung animiert und so etwasähnlichessollte es diete es dies Mal a werden。

图片由Die 担任 ,Spieles ist Gripe ,Ein kleines blaues,haariges Monster und er wie auch dieBlöckeder Plattform(CC-BY-4.0)Tileset von Marc Russell von Zingot Games的游戏设计师,免费下载OpenGameArt.org zum 。 死于名字和行为的事实。

Es sind死于Bilderfürdie Bewegugung nach rechts,ach的Bilderfürdie Bewegungung nach链接,与Bild des stehenden和ein Bild desfallden Gripes和schließlichnoch der Block,Aus dem die Plattform zusammengesetzt怪诞。

Dann habe ich noch ein Hintergrundbild gebastelt,das nicht wirklichschönist(mir fehlt jedeBefähigungzumKünstler),Zwecke des Spiels sollte es aber ausreichen:

达斯·斯皮尔

Der Gripe将为您带来Plattform。 冯·奥本·阿普尔·赫拉布(Fon Oben)堕落了阿普菲拉(abfel)修道院,弗里根·范根(Grepe fangen)和弗里森·穆斯(fressenmuß)。 Erreichen die rotenÄpfeldie Plattform,zerstörensie den Block,auf den sie gefallen sind。 Hin and wieder tauchen auchgrüneÄpfelauf。 Wenn diese einen Block der Plattformberühren,wird die gesamte Plattform wiedervollständig理解了gesetzt。

Fürjeden gefangenen Apfelerhältder Gripe zehn Punkte。 Er lebt solange,在Bodenlosestürzt的Plattform中的Loch。

阶段1

在未来的时代,法斯松将与世界各地的人民共处。 Um sie zu separieren,在Processing IDE中的存在,可以在Spiel verwendeten Klassen aufgemacht中使用。 Wie schon经常,我们要等一下:Oberklasse Sprite定义:

 class Sprite(object): 

def __init__(self, xPos, yPos):
self.x = xPos
self.y = yPos
self.th = 32
self.tw = 32

def checkCollision(self, otherSprite):
if (self.x < otherSprite.x + otherSprite.tw and
otherSprite.x < self.x + self.tw and
self.y < otherSprite.y + otherSprite.th
and otherSprite.y < self.y + self.th):
return True
else:
return False

康斯坦屈克主义的微不足道与消亡。 Denn der Gripe解决了所有问题,并链接了MacBook Pro的文档。 贝恩·埃纳克(Bei einer exakteren)塞纳·阿普菲尔·因祖方根(Weinege Chancen)举行的努尔·韦尼格·尚森(Nur wenige Chancen)举行。

尼姑还死于赫拉登(Klassefürden Helden):

 class Actor(Sprite): 

def __init__(self, xPos, yPos):
super(Actor, self).__init__(xPos, yPos)
self.speed = 5
self.dy = 0
self.d = 3
self.dir = "right"
self.state = "standing"
self.walkR = []
self.walkL = []

def loadPics(self):
self.standing = loadImage("gripe_stand.png")
self.falling = loadImage("grfalling.png")
for i in range(8):
imageName = "gr" + str(i) + ".png"
self.walkR.append(loadImage(imageName))
for i in range(8):
imageName = "gl" + str(i) + ".png"
self.walkL.append(loadImage(imageName))

def checkWall(self, wall):
if wall.state == "hidden":
if (self.x >= wall.x - self.d and
(self.x + 32 <= wall.x + 32 + self.d)):
return False

def move(self):
if self.dir == "right":
if self.state == "walking":
self.im = self.walkR[frameCount % 8]
self.dx = self.speed
elif self.state == "standing":
self.im = self.standing
self.dx = 0
elif self.state == "falling":
self.im = self.falling
self.dx = 0
self.dy = 5
elif self.dir == "left":
if self.state == "walking":
self.im = self.walkL[frameCount % 8]
self.dx = -self.speed
elif self.state == "standing":
self.im = self.standing
self.dx = 0
elif self.state == "falling":
self.im = self.falling
self.dx = 0
self.dy = 5
else:
self.dx = 0
self.x += self.dx
self.y += self.dy
  if self.x <= 0: 
self.x = 0
if self.x >= 640 - self.tw:
self.x = 640 -self.tw

def display(self):
image(self.im, self.x, self.y)

有限状态机( Ein erine eine endliche Maschine) (有限状态机)和Zuständenangelegt:Sie besitzt在Zustände walkingstandingfalling

Danach werden nach der Initialisierung erst einmal alle Bilder des Gripe geladen。 Damit die jeweils acht Bilder je Bewegungsrichtung nicht einzeln geladen werdenmüssen是由Programmcode nurunnötigaufblähenwürde撰写的,而在einer Schleife erledigt中的jeweils是:

 for i in range(8): 
imageName = "gr" + str(i) + ".png"
self.walkR.append(loadImage(imageName))

比利时的历史和历史

 for i in range(8): 
imageName = "gl" + str(i) + ".png"
self.walkL.append(loadImage(imageName))

Bilderfür和Bewegung之间的链接。 Eine geschickte Benennung der Dateinamen machte esmöglich。

Damit die einzelnen Bilder genauso platzsparend bei den Bewegungen aufgerufen werden,werden diese in eine Liste gesteckt,所以daséüberden Index der Liste aufrufenkönnen。

在Method Method move() diesem Aufruf中:

 if self.state == "walking": 
self.im = self.walkR[frameCount % 8]

frameCount % 8 Nimmt Nacheinander immer einen Wert zwischen 0 und 7 and wird sichergestellt,daßdie在死者Reihenfolge aufgerufen werden中耕种。

在der Methode中, checkWall()hidden在一起,同时又是另一个hidden对象(也称为zerstört)。 Den Abstand von 3 Pixeln( self.d )已在实验中,但是在sicherzustellen,da s da kleine blaue Fellmonster和Löchernicht einfachüberläuft中。 3,Pixelen einen bestehenden Blockberührt,nicstabstürzt– das kann schon gelegentlich sehr seltsam aussehen。

Der Wert von self.d von der der Geschwindigkeit( self.speed )ab。 温self.d艾尔(Wenn Ihr)死于维恩德特(Murnst Ihr unterUmständen)。

死刑法》 move() Dielet der Methode move()刑法》和《刑法》(Spigener)链接与法律法规(Fenster nicht verlassen kann)。

方法display() ist seer einfach。 Sie zeigt nur das gerade aktuelle Bild an。

Zuletzt bleibt nur noch die Klasse Block ,死于von Sprite erbt。

 class Block(Sprite): 

def __init__(self, xPos, yPos):
super(Block, self).__init__(xPos, yPos)
self.state = "visible"

def loadPics(self):
self.im = loadImage("block.png")

def display(self):
if self.state == "visible":
image(self.im, self.x, self.y)

状态栏的状态( visible ),wind das Bild geladen和solch ein Block ja nicht bewegt,Entfälltdie Methode move()和commmt nur die Methode display() zum Einsatz, ,温伯·西特巴尔ist的abernatürlichnur。

Jetzt das Hauptprogramm:

 from sprites import Actor, Block 
gripe = Actor(304, 384)
blocks = []
 def setup(): 
global bkg
size(640, 480)
frameRate(60)
bkg = loadImage("bkg1.png")
for i in range(20):
block = Block(i*32, 416)
blocks.append(block)
blocks[i].loadPics()
gripe.loadPics()
 def draw(): 
global bkg
background(bkg)
blocks[5].state = "hidden"
blocks[18].state = "hidden"
for block in blocks:
block.display()
if gripe.checkWall(block) == False:
gripe.state = "falling"

gripe.move()
gripe.display()
 def keyPressed(): 
if keyPressed and key == CODED:
if keyCode == RIGHT:
gripe.state = "walking"
gripe.dir = "right"
if keyCode == LEFT:
gripe.state = "walking"
gripe.dir = "left"
 def keyReleased(): 
gripe.state = "standing"

Zuerst werdenbenötigtenKlassen importiert,在米特·德·斯皮尔费尔德斯·塞纳·普拉特·格特兹和德·丹·布洛克·凯恩·利斯特名单上担任联合国秘书长。

setup() Bilder geladen和diee mit denBlöckenerstellt。

在der Funktion draw() hidden gesetzt,um herauszufinden,ob der Gripe和uttsächlichherunterfällt 。 温恩·艾尔·泰森(Wenn Ihr testen)wol然大悟,而斯皮尔费尔德·维尔斯(l Spielfeldverläßt)则更是如此。

Überalle阻止wiprgeprüft,ob der Gripe sieüberhauptbetreten kann。 封闭的原本,德森·祖斯塔德的hidden主义,古尔德·祖普斯·德·格里普斯在falling 。 ZumSchlußwerden dann nur角色move()display()怪物aufgerufen。

在Funktion的keyPressed() ,链接到Pfeiltategedrücktist。 Wenn ja,ist zustand des Gripes walking和Richtung des Gripes链接到其他链接。

状态由Ffeition keyReleased()状态。

Damit sind alle Stati abgedeckt,der Gripe steht,fälltoderläuft。 MehrZuständekennt和braucht er nicht。

在第2阶段的工作中,我们将继续努力,并继续努力。