Spieleprogrammierung mit Pythons Turtle-Modul(Teil 2)

Wie im ersten Teil versprochen,möchteich nun der Turtle,dich sich bisher ja nur einsam durch das Spielfeldquälte和ein Ziel geben。 Sie sollnämlichGoldmünzeneinsammeln,死于überdas Spielfeld bewegen。 皮埃尔·德·皮尔特(Punkte)的金明泽(Goldmünze)香水。 铸铁铸造厂和铸铁铸造厂铸铁厂和铸铁厂位于斯皮尔费尔德纳赫。

Um死于Programmeereren,未收到密码警告。 发生金币爆炸的罪魁祸首和发生在索尔费尔德的斯皮尔费尔德斯峰的惨败,以及发生在克拉斯珀尔峰奖章和多普勒龙根峰上的雷恩·德·施普林德和奥斯威辛·德兰德尔的狂欢。 Die Klasse Sprites修女:

 class Sprite(t.Turtle): 

def __init__(self, tshape, tcolor):
t.Turtle.__init__(self)
self.penup()
self.speed(0)
self.shape(tshape)
self.color(tcolor)
self.speed = 1
self.max_speed = 10

def move(self):
self.forward(self.speed)
# Ränder checken und ausweichen
if self.xcor() >= WIDTH/2 - 50 or self.xcor() <= -WIDTH/2 + 50:
self.forward(-self.speed)
self.left(75)
if self.ycor() >= HEIGHT/2 - 50 or self.ycor() <= -HEIGHT/2 + 50:
self.forward(-self.speed)
self.left(75)

我的父亲50年代雪碧在RénderGelassen,在RundGoldmünzenberührten在Nämlich的儿子在Rändergar nicht和das sah beim在Ausweichen etwasunnatürlichaus。 在德国考夫(Kauf)基因组研究中,德雷亨根·米特·艾恩(Ecke leichtüberdie Begrenzung reicht)

程序设计学院

 import turtle as t 
import random as r
import math

Neben dem turtle -Modul noch zwei weitere Bibliotheken importert,在程序中的应用程序:Eine Modul random生成了Zufallszahlen和Dathe Mathematikmodul,Berechnung des Euklidischen则保留了gebraucht wird。

戈尔德明岑(Die Klassefür)和戈德明森(Dim Klassefür),德国Goal学家genannt habe,作者–冯· 雪碧 (da sie von Sprite)的属性和方法论–克莱因·杰拉滕(relin klein geraten):

 class Goal(Sprite): 

def __init__(self, tshape, tcolor):
Sprite.__init__(self, tshape, tcolor)
self.speed = 3 # Default-Vorbelegung, wird bei der Initialisierung überschrieben
self.goto(r.randint(-WIDTH/2 + 60, WIDTH/2 - 60),
r.randint(-HEIGHT/2 + 60, HEIGHT/2 - 60))
self.setheading(r.randint(0, 360))

def jump(self):
self.goto(r.randint(-WIDTH/2 + 60, WIDTH/2 - 60),
r.randint(-HEIGHT/2 + 60, HEIGHT/2 - 60))
self.setheading(r.randint(0, 360))

Der Konstruktor在德国Oberklasse大街上的所有快速通道,Default-Wert,在Zufall eine位置上的初始化和dann wird,在Aus derMünze的位置上,初学者和dann wird。 奥地利0°和360°厄米特尔特(EastzufälligeStartrichtung zwischen)。

Die einzige»eigene«Methode der Klasse 目标 ist jump() 。 追悼者名单:斯皮勒(Spieler)»丹·斯普林特(Eannesammelt)»斯皮尔勒(Wild dieMünzevom Spieler)的位置,我的工作地点是斯皮尔·泰尔(Spieel Teil)。

达菲尔(Dafich),克拉斯move() Kalasse move() Actor迈特move() moe move()迈根哈贝move() hagen move() ,我collides(self, obj)新上卫collides(self, obj) mee collides(self, obj)冲突。

 def collides(self, obj): 
a = self.xcor() - obj.xcor()
b = self.ycor() - obj.ycor()
distance = math.sqrt((a**2) + (b**2))
if distance < 20:
return True
else:
return False

在杜伯·施皮勒(Dieüberprüftder Spieler)酒中,奥伯·米特·奥涅姆·奥贝克(Ob mit ine einem Objekt)(在不倒翁的秋天,在金斯图克大街上)是kollidiert oder nicht。 Es gibt viele Methoden derKollisionsüberprüfung,或者您可以在einfachsteausgewählt参观。 Es wird mithilfe des Satzes des Pythagoras der euklidische遵守berechnet。 迪塞尔·克莱纳(Din wird Angenommen),迪斯·斯皮勒(Dann Wird),二十一岁的史蒂芬·克雷迪尔(Dann wird Angenommen)和艾伦·安德伦·法伦(Allen AnderenFällennicht)的庞克·达菲尔·埃因卡西艾伦(Punktedafüreinkassieren darf)。 达,乌恩·尼克斯·乌尔德,死海龟24×24 Pixelbeträgt,Funktioniert der Wert,der durch Experimente herausgefunden wurde,直肠

Die Punkte,Spieler eingesammelt帽子,sollennatürlichangezeigt werden。 Bezeichnet的Computerspielen gerne als Head-up-Display(abgekürztHUD)中的Solche Anzeigen werden。 因此, HeadUpDisplay genannt不能与Klasse,Anzeigen des HeadUpDisplay在一起。

 class HeadUpDisplay(t.Turtle): 

def __init__(self):
t.Turtle.__init__(self)
self.penup()
self.hideturtle()
self.speed(0)
self.color("white")
self.goto(-WIDTH/2 + 40, HEIGHT/2 - 30)
self.score = 0

def update_score(self):
self.clear()
self.write("Punkte: {}".format(self.score), False, align = "left",
font = ("Arial", 14, "normal"))

def change_score(self, points):
self.score += points
self.update_score()

Gewisser Weise dem Konstruktor der Klasse GameWorld Der Konstruktor der GameWorld 。 Aber hier ebenfalls eine Oberklasse mit zwei Unterklassen zu schreiben,hielt ichfürein wenigübertrieben。 原文:Eine Oberklasse World mit Unterklassen Border and HeadUpDisplay sind durchaus denkbar und im Sinne der reinen Lehre vielleicht sogar der bessere Programmierstil。

死海龟与野生动物和野生动物之间的联系。 评分从0开始。

可以使用update_score() ,也可以使用change_score()完成。 您可以在Punktanzeige和ersetzt画廊中找到自己的名字。 方法write(text, move, align, font)和海龟文本编写。

方法change_score()更新update_score()

Das sind在den Klassen死于Veränderungen。 初次上学的修女:

 wn = t.Screen() 
wn.bgcolor("black")
wn.setup(width = WIDTH, height = HEIGHT)
wn.title("Turtle Graphics Game Tutorial – Stage 2")
player = Actor("triangle", "red")
world = GameWorld()
hud = HeadUpDisplay()
# Die Grenzen des Spielfeldes zeichnen
world.draw_border()
# Die Zielobjekte erzeugen
goals = []
for i in range(NUMGOALS):
goals.append(Goal("circle", "gold"))
goals[i].speed = r.randint(2, 7)

Die ersten sieben Zeilen sindunverändert,在“ Zeile 8头戴式显示器欣祖”中出现。 Einner Schleife erzeugt的DünMünzenwerden。 达祖·哈贝·埃希特·埃斯特尔(英语:Liste) goals[] ()埃斯特尔·达旦(德·达拉福尔根·登·施莱夫)和古恩施特·安扎尔·德·慕尼黑(德国)和伊涅恩·祖尔·维格(德国)

Im Beispielprogramm已在Konstante NUMGOALS zu Beginn den Wert 6博物馆,Aber probiert es mal mit nur einer oder nur zweiMünzen。 Je wenigerMünzeneinzusammeln sind,desto schwieriger wird es,überhaupteine zu treffen。

程序的重播和回调 ,请在以下程序中进行操作:

 # Bildschirm-Refresh ausschalten 
wn.tracer(0)
# Spiel-Schleife
keepGoing = True
while keepGoing:
wn.update() # Den gesamten Bildschirm neuzeichnen
player.move()
hud.change_score(0)

for goal in goals:
goal.move()
if player.collides(goal):
goal.jump()
hud.change_score(10)

Um das Programm zu beschleunigen,Habe ich bevor die Schleife durchlaufen wird,mit tracer(0) das constante Neuzeichnen des Bildschirmes ausgeschaltet。 Ansonstenwürdedas Programmnämlichschon ziemlich ruckelig ablaufen。 在schleife wird mit update() gen bei jedem Schleifendurchlauf neu gezeichnet中找到。 MacBook Pro的问题,das programmläuftflüssig和ruckeltüberhauptnicht。

hud.change_score(0) HUD的初始输入,是Bildschirmrand auftauchenwürde的Einsammeln der erstenMünze的首发。

达纳赫·维德(Einner Weiteren Schleifeüberprüft),慕尼黑市立美术馆(Spieler mit einer derMünzenkollidiert)。 Wenn ja,《Münzewegspringen und der Spieler bekommt 10》的主题曲。

死刑,死刑,死刑,死刑,死刑,死刑,Quellcode:

 import turtle as t 
import random as r
import math
WIDTH = 640
HEIGHT = 480
NUMGOALS = 6
class Sprite(t.Turtle):

def __init__(self, tshape, tcolor):
t.Turtle.__init__(self)
self.penup()
self.speed(0)
self.shape(tshape)
self.color(tcolor)
self.speed = 1
self.max_speed = 10

def move(self):
self.forward(self.speed)
# Ränder checken und ausweichen
if self.xcor() >= WIDTH/2 - 50 or self.xcor() <= -WIDTH/2 + 50:
self.forward(-self.speed)
self.left(75)
if self.ycor() >= HEIGHT/2 - 50 or self.ycor() <= -HEIGHT/2 + 50:
self.forward(-self.speed)
self.left(75)

class GameWorld(t.Turtle):

def __init__(self):
t.Turtle.__init__(self)
self.penup()
self.hideturtle()
self.speed(0)
self.color("white")
self.pensize(2)

def draw_border(self):
self.penup()
self.goto(-WIDTH/2 + 40, -HEIGHT/2 + 40)
self.pendown()
self.goto(-WIDTH/2 + 40, HEIGHT/2 - 40)
self.goto(WIDTH/2 - 40, HEIGHT/2 - 40)
self.goto(WIDTH/2 - 40, -HEIGHT/2 + 40)
self.goto(-WIDTH/2 + 40, -HEIGHT/2 + 40)
class HeadUpDisplay(t.Turtle):

def __init__(self):
t.Turtle.__init__(self)
self.penup()
self.hideturtle()
self.speed(0)
self.color("white")
self.goto(-WIDTH/2 + 40, HEIGHT/2 - 30)
self.score = 0

def update_score(self):
self.clear()
self.write("Punkte: {}".format(self.score), False, align = "left",
font = ("Arial", 14, "normal"))

def change_score(self, points):
self.score += points
self.update_score()
class Actor(Sprite):

def __init__(self, tshape, tcolor):
Sprite.__init__(self, tshape, tcolor)

def turnleft(self):
self.left(30)

def turnright(self):
self.right(30)

def move_faster(self):
self.speed += 1
# Geschwindigkeitsbegrenzug
if abs(self.speed) > self.max_speed:
self.speed = self.max_speed

def move_slower(self):
# Geschwindigkeitsbegrenzung
self.speed -= 1
if abs(self.speed) > self.max_speed:
self.speed = - self.max_speed

def collides(self, obj):
a = self.xcor() - obj.xcor()
b = self.ycor() - obj.ycor()
distance = math.sqrt((a**2) + (b**2))
if distance < 20:
return True
else:
return False
class Goal(Sprite):

def __init__(self, tshape, tcolor):
Sprite.__init__(self, tshape, tcolor)
self.speed = 3 # Default-Vorbelegung, wird bei der Initialisierung überschrieben
self.goto(r.randint(-WIDTH/2 + 60, WIDTH/2 - 60),
r.randint(-HEIGHT/2 + 60, HEIGHT/2 - 60))
self.setheading(r.randint(0, 360))

def jump(self):
self.goto(r.randint(-WIDTH/2 + 60, WIDTH/2 - 60),
r.randint(-HEIGHT/2 + 60, HEIGHT/2 - 60))
self.setheading(r.randint(0, 360))

wn = t.Screen()
wn.bgcolor("black")
wn.setup(width = WIDTH, height = HEIGHT)
wn.title("Turtle Graphics Game Tutorial – Stage 2")
player = Actor("triangle", "red")
world = GameWorld()
hud = HeadUpDisplay()
# Die Grenzen des Spielfeldes zeichnen
world.draw_border()
# Die Zielobjekte erzeugen
goals = []
for i in range(NUMGOALS):
goals.append(Goal("circle", "gold"))
goals[i].speed = r.randint(2, 7)
def exitGame():
global keepGoing
keepGoing = False
# Auf Tastaturereignisse lauschen
t.listen()
t.onkey(player.turnleft, "Left")
t.onkey(player.turnright, "Right")
t.onkey(player.move_faster, "Up")
t.onkey(player.move_slower, "Down")
t.onkey(exitGame, "Escape") # Escape beendet das Spiel
# Bildschirm-Refresh ausschalten
wn.tracer(0)
# Spiel-Schleife
keepGoing = True
while keepGoing:
wn.update() # Den gesamten Bildschirm neuzeichnen
player.move()
hud.change_score(0)

for goal in goals:
goal.move()
if player.collides(goal):
goal.jump()
hud.change_score(10)

VGA×Größe640×480像素像素显示器中的Ich habe,在Numtzlichkeit der Konstanten WIDTHHEIGHT zu Zeigen上。 WeitereÄnderungenim Programme的工作人员,das Spiel lief – wie der截屏zeigt – ohne weiteres Herumfummeln im Quellcode位于DieserAuflösung。

Das Spiel ist nun fertig und spielbar。 在《永恒的回忆》中,贝特拉格·蒙克特·希斯·努尔·埃因·温格·奥夫莫岑和奥夫布森。

  • Spieleprogrammierung mit Pythons Turtle-Modul(Teil 1)
  • 使用Python的Turtle-Modul(Teil 2)的代码。
  • Spieleprogrammierung mit Pythons Turtle-Modul(Teil 3)