Spieleprogrammierung mit Pythons Turtle-Modul(Teil 1)

Angeregt durch通过视频教程“简单的使用类的Python游戏教程” von Christian Thompson ,日本的einem lebenden und lehrenden Amerikaner,世界著名的音乐人,einfach oder wie schwer es ist,mit pythons Turtle密歇根州标准图书馆-毕比昂·皮翁(Pibhontheken von Pyhon ist),作者是Spiel zu programmieren。 Ich habe mich dabei weitestgehend obige Video-Tutorial-Reihe angelehnt,jedoch einigesgeändert,是一位杰出的节目制作人,auf der anderen Seite habe ich auch einigeFehlerchenusénunde乐队

Als erstes habe ichnatürlichdas Modul turtle进口和购买的初始信息:

  import turtle as t WIDTH = 600 
HEIGHT = 600
import turtle as t WIDTH = 600
HEIGHT = 600
wn = t.Screen()
wn.bgcolor("black")
wn.setup(width = WIDTH, height = HEIGHT)
wn.title("Turtle Graphics Game Tutorial – Stage 1")

死于维特·斯皮尔芬斯特宫和康斯坦丁·费斯特格施里本。 斯皮尔费尔德城堡(Spielfeldrand)和斯皮尔菲格尔城堡(Spielfigur)上的斯皮尔费尔德城堡(Spielfeldur)以及其他建筑事务所。 Wenn还会死于Größedes Spielfeldesgeändertwerden soll,Müssennur diese beiden Konstantengeändertwerden,Alle anderen notwendigenÄnderungenerledigt dann das程序自动化。

Dann gibt es eine Klasse Sprite和在Spiess ist中的Oberklassefüralle beweglichen Elemente。 您可以从Turtur und Konstruktor von Sprite Konstruktor von Turtle aufrufen中获取更多信息。 Daneben gibt es noch eine Methode move() ,Aber nur als Platzhalter dient,Regel von der Unterklasseüberschriebenwistr:

 class Sprite(t.Turtle): 

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

def move(self):
self.forward(self.speed)

Der Konstruktor von Sprite可以作为Shape的一部分 ,也可以由Sprites组成,也可以由Farbe des Sprites mitgeliefert组成,也可以由最初的werden组成。 死于Spielfigur,也死于Turtle oder der Sprite ,生死未卜,ohine eine Spur zu hinterlassen,daher wird der Stift bei der Initialisierung angehoben( penup )。 Eine Default-Startgeschwindigkeit和eine Maximalgeschwindigkeit wird dort ebenfalls noch vereinbart。

DienächsteKlasse,《游戏世界》的Code Vereinbart wird,《游戏GameWorld 》的Deren einzige Instanz,《 Aufgabe帽子》,《 Grenzen des Spielfeldes zu zeichnen》。 克拉斯和纳特里克·恩特尔:

 class GameWorld(t.Turtle): 

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

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)

GameWorld将在Initialineierung keine的Paramter mitgeliefert的基础上发布,同时也是kann und braucht sie auch der Oberklasse的keine mitzuteilen。 Turtle的一切都被取消了–龟的默认违约– Keine Spur ziehen(dainewärejasonst eine halbe Diagonale),daher wird a hier der Stift erst einmal hochgesetzt。 Außerdemsoll sie auch nicht sichtbar sein,死于wird mit der Methode hideturtle() erreicht。 speed(0) Turtlewelt同步播放动画(方法speed(x)不可speed = x zu verwechseln,不可或缺)。 魏斯特伦(EineSchildkröteistschließlichkein Rennpferd)逝世,威斯康星州(EineSchildkröteistschließlichkein Rennpferd)逝世,魏森(EineSchildkröteist) Aberfürdiese erste版本reicht去世了。

Die Farbe des Randes纪念日和纪念日Breite von 5 Pixeln haben。

Dann wird在draw_border() Methode draw_border() angewiesen和Den Rand zu zeichnen中使Turtle死亡。 Sicherheitshalber可能无法正常工作,请先删除Schildkrötezum Startpunkt schicke。 冯·康斯坦丁(Abhängigkeitvon den Konstanten)的WIDTHHEIGHT ,以及他在奥夫加贝(Aufgabe erledigt)的帽子。

Nun wieder zu den Sprites:在体育馆的比赛中, Sprite nur eine Unterklasse成为Actor genannt habe。

 class Actor(Sprite): 

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

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

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

Actor erbt alle Eigenschaften von Sprite ,演员démmußder Konstruktor nur den Konstruktor von Sprite aufrufen。 Die move() Methode wird ziemlich erweitert,dahermußtesieüberschriebenwerden。

Der Actor希望能在以后的活动中脱颖而出,而在Richptungsänderungen的Erfolgen im Hauptprogramm mithilfe der Pfeiltasten中死。 演员,演员,演员和导演。 Den folgenden Zeilen erledigt中的Das wurde。 乌龟与格林森(St Absturtle in Turtle an die Grenzen)(死于阿布汉吉克特(Abhängigkeitvon den Konstanten)的维德和维特(Height)erkannt werden,丹·索尔(Dann soll sie ert einmal einen Schint) Wendug nach链接了der Grenze verfangen kann中的wieder。丹·西奇·乌姆德雷恩与阿布豪恩(Schlosstzurücktreten),😜。

死于75°,死者是德国演员,死者是斯皮尔费尔德剧院。 Aber der Leser ist aufgefordert,麻省理工学院的安德烈·温克尔恩

死于方法论,死于方法论死因是演员在电影院的角色 。 模具和废料在30℃范围内熔化,然后与废料和永久性废料混合,形成浓厚的气味。 Damit死于Spielfigur死于Deckeschießt死于Richtengen上的Maximalgeschwindigkeit节日。 Dabei kann es durchaus passieren,spielfigur sichrückwärts的故乡-das ist so gewollt。

Daich wollte,daßdas Spiel»ordentlich«的评论和评论,请参见afgebrochen wird,habe ich exitGame() eine globale Funktion exitGame() 。 Diese Funktion soll aufgerufen werden,温·斯皮勒尔Escape -Tastedrückt:

 def exitGame(): 
global keepGoing
keepGoing = False

现在开始吧! Dazumußerst Einmal der Spieler und die Spielwelt Initialisiert werden:

 player = Actor("triangle", "red") 
world = GameWorld()
world.draw_border()

死神Spielfigur player wird als eine Instanz der Klasse游戏中的Actor eines roten Dreiecks aufgerufen和Spielewelt world作家eine Instanz der Klasse GameWorld 。 死于通货膨胀的原因是死刑的原因。 Sie hat ihre Schuldigkeit getan。

是尼古拉主义者,还是“劳申”教父。 乌龟模块和方法学的直接方法:

 # 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

Als erstes wird ein Lauscher(英语, 听众 )初始化。 撤消回调 ,进行伪造和逃逸味实例化。 在方法上使用参数的名称和名称(对Klammern和参数进行更改)和在名称上的名称将更改为Funktion。 Tkinter-Programmierung教程,Turn-Modul ist nur ein的包装和图形学包装

因此,急诊急诊室急诊急诊室和急诊室急诊室急诊室:

 # Spiel-Schleife 
keepGoing = True
while keepGoing:
player.move()

Zuerst wird die boolsche变量keepGoing auf True gesetzt和dadurch mit, while keepGoing eine Endlosschleife aufgerufen在der mit播放器中。 厄斯特·温德·斯皮勒(Erst wenn der Spieler) Escape品尝美味的德鲁克啤酒, keepGoing甜美。

Zur besserenÜberischthier noch einmal das komplette程序:

  import turtle as t WIDTH = 600 
HEIGHT = 600
import turtle as t WIDTH = 600
HEIGHT = 600
wn = t.Screen()
wn.bgcolor("black")
wn.setup(width = WIDTH, height = HEIGHT)
wn.title("Turtle Graphics Game Tutorial – Stage 1")
class Sprite(t.Turtle):

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

def move(self):
self.forward(self.speed)
class GameWorld(t.Turtle):

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

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 Actor(Sprite):

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

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

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
player = Actor("triangle", "red")
world = GameWorld()
world.draw_border()
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
# Spiel-Schleife
keepGoing = True
while keepGoing:
player.move()

Probiert es aus。 戴德·罗伊德(Dei rote Dreieck)饰—冯·尤赫(Euch gesteuert)—戴比·斯皮尔费尔德(Uber das Spielfeld),格林(Grenzenhinauszuschießen)。 兰维利格(Dan ist anfangs interessiert zuzuschauen),阿伯·奥夫·道尔(Aber auf Dauer)和埃斯·多瓦(langelig) 达·穆赫特(Dahermöchteich imnächsten)讲师,斯皮尔菲尔·恩·皮尔·齐勒·布勒(Ziele budieren),潘克·恩布林根(Phrte einbringen),斯皮勒·伊恩·齐尔(Spieler ein Ziel)校长。

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