入门教程,正在使用Processing.py中的Mischung aus Space Invaders和einem Platformer教程,在Python-Mode von Processing程序中,mieren kann,fortführen和abschließen。 Dafürunterbreche ich schon mal mit Freuden meinen Wochenend-Hiatus。

Um das Spielabzuschließen,Müssenjetzt nur noch dieÄpfelvom Himmel regnen, Derpe Gripe entweder einfangen und zermantschen(roteÄpfel)oder durchlassenmuß,damit sie seine raponierete Plattform wieder repar。 Wie schon so vieles andere a habe ich die Bilder derÄpfelTwitters freiem(CC-BY-4.0 Emoji-Set Twemoji entnommen und mit einem Bildverarbeitungsprogramm meines Vertrauens auf 16 x 16 Pixel heruntergereignetau kle erenergerechnet。( Bildchen。Es sind mittlerweile mehr als 2.800 Emojis,死于本征Projekten findenkönnen中的Verwendung。Fürjemanden mit so geringenFähigkeitenzum Graphiker wie mich eine Goldgrube。)


乌菲尔·斯皮尔·祖普·勒本·尤文肯(Müssensienatürlich)死了,我的本能克拉斯·贝科门死了,死于—威廉·安德斯·塞恩(Wie sollte es anders sein)—死于冯· Sprite
厄伯特。 Ich habe die Klasse wenigüberraschendApple genannt:
class Apple(Sprite):
def __init__(self, xPos, yPos):
super(Apple, self).__init__(xPos, yPos)
if r.randint(0, 100) < 5:
self.state = "green"
else:
self.state = "red"
self.speed = 1
self.tw = 16
self.th = 16
def loadPics(self):
self.imRed = loadImage("applered.png")
self.imGreen = loadImage("applegreen.png")
def move(self):
self.y += self.speed
if self.y >= height + self.th:
self.reset()
def reset(self):
self.x = r.randint(self.tw, width-self.tw)
self.y = r.randint(-480, -48)
if r.randint(0, 100) < 5:
self.state = "green"
else:
self.state = "red"
def display(self):
if self.state == "green":
self.im = self.imGreen
elif self.state == "red":
self.im = self.imRed
image(self.im, self.x, self.y)
Im Konstruktor wird festgelegt,德国粉煤灰生产者(grüne)意大利粉煤灰和粉煤灰腐烂粉。 像素不连续( self.speed = 1
–更高级别的Ihr durchaus mit anderen Geschwindigkeiten实验者)和natürlichmußdieHöhe和Weite auf deitatsächlicheGröße(16)。 较高的werden die Festlegungen der Oberklasseüberschrieben。
loadPics()
ist simpel,sielädteinfach nur die Bildchen der roten undgrünenÄpfelund auch die Methode move()
ist hier sehr schlicht gehalten:Sie sorgtdafür,daßdieÄpfelnachs untensterterlas and wenn ,与Methode reset()
aufgerufen相同。
Diese katapultiert和Äpfelwieder死于Stelle oberhalb des Fensterrandes。 您可以在480像素像素的位置上进行定位。
Außerdemwird wiederdafürgesorgt,Daßnur etwafünfProzent derÄpfelgrüneÄpfelsind,Alle Anderen sind wieder rot。
Eine kleineÄnderunggab es noch im Konstruktor der Klasse Actor
。 Wi mit的Da der Gripe ja auch Punkte einkassierenkönnensoll
self.score = 0
朋克变量变种。
Das ist eigentlich alles,在Datei sprite.py
帽子中穿着。 Hauptprogramm的Alle anderenÄnderungen查找:
from sprites import Actor, Apple, Block
import random as r
gripe = Actor(304, 384)
blocks = []
apples = []
您可以在以下任何页面上找到自己的东西-以及在标准书目中random
购买的其他东西。 Neben der schon bekannten Liste blocks[]
Liste apples[]
初始werden。
在Dunk Funktion setup()
Schleife zumAuffüllender Apfel-Liste hinzugekommen中:
for i in range(5):
x = r.randint(32, width-32)
y = r.randint(-480, -48)
apple = Apple(x, y)
apples.append(apple)
apples[i].loadPics()
ZumÜbenhabe ich es ert einmal beifünfÄpfelnbelassen。 Der Gripe steht dann zwar manchmal einige Sekunden dumm herum,aber bei viel mehrÄpfelnhetzt er nur noch um sein Leben。
Bei der draw()
-功能说明,请参见以下代码:
def draw():
global bkg
background(bkg)
noCursor()
for block in blocks:
block.display()
if gripe.checkWall(block) == False:
gripe.state = "falling"
for apple in apples:
apple.move()
if apple.checkCollision(gripe):
apple.reset()
gripe.score += 10
for block in blocks:
if (block.state == "visible" and
apple.checkCollision(block)):
if apple.state == "red":
block.state = "hidden"
apple.reset()
elif apple.state == "green":
for block in blocks:
block.state = "visible"
apple.reset()
apple.display()
gripe.move()
if gripe.y > height + 32:
textSize(50)
text("Game Over!!!", width/2 - 150, height/2)
cursor()
noLoop()
gripe.display()
textSize(25)
text("Score: " + str(gripe.score), 15, 35)
Eine nur kosmetischeÄnderungist das Verstecken des Mauzeigers mit noCursor()
zu Funktion und die SchleifeüberdieBlöckeistunverändertgeblieben。
Vollständig神经学家SchleifeüberdieÄpfel-Liste。 较高的等级,由pf mit dem Gripe kollidiert获得。 Passiert逝世,怀有深情的reset()
der Apfel wieder nach oben katapultiert和der Gripeerhält10 Punkte gutgeschrieben。 较高级别的undschünschenrot undgrüns,es ist das Problem des Gripes,wenn er versehentlich einengrünenApfelauffrißtoder zermanscht – Apfel ist Apfel。 DieKollisionsüberprüfungist a hier sehrgroßzügig。 Wegen der oben schonerwähntenTrägheitder Zeigertasten wollte ich dem Gripe wenigstens den Hauch einer Chance geben。
Anders ist es bei der be derKollisionsüberprüfungderÖpfelmit denBlöcken—辛格沃尔勒韦塞发现者西恩·诺特mit sichtbarenBlöcken州:Trifft ein roter Apfel auf einen街区,dann wird deserinb underer underer neust undserbentb und Leder Ist es dagegen eingrünerApfel,der auf einenunzerstörtenBlock trifft,dann werden alleBlöckewieder repariert und erst danach wird a dieer Apfel erneut auf die Reise geschickt。
Funk das Anzeigen der Punkte死于Mal auf eine Klasse HUD
(fürHead Up Display ),父子死于Anzeige mit
textSize(25)
text("Score: " + str(gripe.score), 15, 35)
einfach an das Ende der draw()
Funktion geschrieben。 Doch zuerst wirdüberprüft,Ob sich der Gripeüberhauptnoch im Spiel befindet。 费斯特·德·芬斯特朗·伊斯特·纳姆利希
textSize(50)
text("Game Over!!!", width/2 - 150, height/2)
cursor()
noLoop()
das Ende des Spiels angezeigt,der Mauszeiger wieder hervorgekramt和mit noLoop()
draw()
Funktion angehalten。
Damit ist das Spielvollständig。 Natürlichgibt es noch vieles,是人verbessern oderhinzufügenkönnte。 Als ersteswürdemir eine exaktere Kollisionserkennung失踪了。 Dannkönnte人den Gripe auch kleine Bomben nach oben werfen lassen,mit denen er dieÄpfelschon im Flugzerstörenkann。 Das GFXlib融合了瓷砖的小提琴,被Bildchendafür选中。 Aber auch ups und / der power downs sind denkbar和eine Spielewelt daran,daßsichÄpfelimmer gerade von oben nach unten bewegenmüssen和Andere Flugbahnen sind doch auchbark是阻碍者。 Grenzen setzt eigentlich nur Eure Phantasie。
ZumSchlußwier immer derVollständigkeithalber noch einmal der komplette素描,更有趣的是Datei sprites.py
:
import random as r
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
class Actor(Sprite):
def __init__(self, xPos, yPos):
super(Actor, self).__init__(xPos, yPos)
self.speed = 5
self.dy = 0
self.d = 3
self.score = 0
self.dir = "right"
# self.newdir = "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)
class Apple(Sprite):
def __init__(self, xPos, yPos):
super(Apple, self).__init__(xPos, yPos)
if r.randint(0, 100) < 5:
self.state = "green"
else:
self.state = "red"
self.speed = 1
self.tw = 16
self.th = 16
def loadPics(self):
self.imRed = loadImage("applered.png")
self.imGreen = loadImage("applegreen.png")
def move(self):
self.y += self.speed
if self.y >= height + self.th:
self.reset()
def reset(self):
self.x = r.randint(self.tw, width-self.tw)
self.y = r.randint(-480, -48)
if r.randint(0, 100) < 5:
self.state = "green"
else:
self.state = "red"
def display(self):
if self.state == "green":
self.im = self.imGreen
elif self.state == "red":
self.im = self.imRed
image(self.im, self.x, self.y)
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)
Und dann das eigentlich Hauptprogramm:
from sprites import Actor, Apple, Block
import random as r
gripe = Actor(304, 384)
blocks = []
apples = []
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()
for i in range(5):
x = r.randint(32, width-32)
y = r.randint(-480, -48)
apple = Apple(x, y)
apples.append(apple)
apples[i].loadPics()
gripe.loadPics()
def draw():
global bkg
background(bkg)
noCursor()
for block in blocks:
block.display()
if gripe.checkWall(block) == False:
gripe.state = "falling"
for apple in apples:
apple.move()
if apple.checkCollision(gripe):
apple.reset()
gripe.score += 10
for block in blocks:
if (block.state == "visible" and
apple.checkCollision(block)):
if apple.state == "red":
block.state = "hidden"
apple.reset()
elif apple.state == "green":
for block in blocks:
block.state = "visible"
apple.reset()
apple.display()
gripe.move()
if gripe.y > height + 32:
textSize(50)
text("Game Over!!!", width/2 - 150, height/2)
cursor()
noLoop()
gripe.display()
textSize(25)
text("Score: " + str(gripe.score), 15, 35)
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"
Dunk Funktionen keyPressed()
和keyReleased()
已在VERVERSION版本中发布。