类似于Ein Rogue的MIT蟒蛇和海龟(第1阶段)

Die Video-Tutorial-Reihe»Python Maze Game Tutorial«冯· 汤普森(Christian Thompson)鼓舞人心,类似盗贼一样的mit dem Turtle-Graphik-Modul von Python zu programmieren。 曼特·艾根特里希·登肯(Esgentte eigentlich denken),阿特·达斯·默特尔(Aber das Modul ist),乌尔·阿格莱格特(Aber das Modul ist),乌尔·盖格特(Aber das Modul ist),乌尔·盖格蒂尔(Georgeil der Fall)博士。

达斯·施维瑞格(Das Schwierigste)战争,Passende Bildchenfürden Helden,怪物和Gegenständezu finden。 位于TomeTik瓷砖库的FündigWurde ich Bei der,位于Angband-Reihe的vornehmlich aus der von David E. Gervais gezeichnet wurde und die er nerner创作的共用瓷砖。 爱因希格·贝丁格(Einzige Bedingung)的死因是艾尔·海尔米特·埃莱迪格特·哈勃。

威廉·德·萨默鲁格(Dauml genutzt)的死者中,斯皮勒(Spieler)和莫恩(Mauern)死于维特伦(Folgen kommen noch einige Bildchen hinzu)。 Diese werden mit folgenden Zeilen geladen und der Turtle-Bibliothek bekannt gemacht:

wall_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/wall.gif") 
player_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/player.gif")
wn.register_shape(wall_shape)
wn.register_shape(player_shape)

Die Pfadangaben sind be mir so kompliziert,weil TextMate,主编,dem ich alle meine Programmierprojekte erledige,以及当前工作目录中的项目哈贝 Ihrmüßtdas VerzeichnisnatürlichEuren Gegebenheiten anpassen in密西西比河畔法伦

 my_shape = os.path.join(os.getcwd(), "images/my_shape.gif") 

oder sogar noch einfacher

 my_shape = "images/my_shape.gif" 

ausreichen。 Probiert das einfach mal aus。 Turtle-Moduls auf Tkinter和Bibliothek ohnegroßeVerrenkungen nur mit GIF- der PPM-Bilddateien umgehen kann,MüßtIhr gegebenenfalls mit einem Bildverarbeitungsn程序Bild的日期。

盗贼和莫恩的GIF图片

Dasnächste»Problem«ist es,in Dungeon zu entwerfen。 Aufgaben das freie(GPL)和plattformübergreifende计划之间的联系已平息,但在dieem einfachen中发生了过多的破坏,而在Radiergummi und und Bleistift中就没有了。 Heraus kam folgendes迷宫:

 level_1 = [ 
"####################",
"# @# #",
"# ####### ##### #",
"# # # #",
"# # ##### #",
"####### # # #",
"# # ##### #",
"# ####### # #",
"# # #",
"# #################",
"# #",
"#### ########### #",
"# # #",
"# # #",
"####################"
]

多普尔克罗伊兹( # )死于流氓的传统,变种中的Mauern dar und der Klammeraffe( @ )。 Das Fenster des Spiels像素640 x 480像素,标准分辨率的VGA显示器和daviles瓷砖的装饰效果是32 x 32像素,而Dungeon einAusmaßvon的分辨率是20 x 15瓷砖。 在澳大利亚,Quellcode尚无定论,所以Buchstabenhöherals breiter和eben nicht quadratisch sind,ist dasVerließ,durch das sich der Spieler bewegen soll和breiter alshöher都是这样。 Der obige屏幕截图beweist es。

Dann habe ich eine Klasse Sprite entworfen,死于Spielfiguren ist的Grundlage。 西维尔登(Wie die Mauern)或西伯拉森·冯· Sprite (Sie werden entweder)

 class Sprite(t.Turtle): 

def __init__(self, shape):
t.Turtle.__init__(self)
self.shape(shape)
self.penup()
self.speed(0)

Die Klasse Sprite Schine eine Subklasse vonturtle。Turtleand erbt somit alle Turtle-Methoden。 Sie ist so elementar,《每日新闻》的wall

 wall = Sprite(wall_shape) 

Ein Kind von Sprite ist死于Klasse Player ,死于schon etwas komplexer ist:

 class Player(Sprite): 

def __init__(self, shape):
Sprite.__init__(self, shape)
  def go_left(self): 
go_to_x = self.xcor() - 32
go_to_y = self.ycor()
if (go_to_x, go_to_y) not in walls:
self.goto(go_to_x, go_to_y)

def go_right(self):
go_to_x = self.xcor() + 32
go_to_y = self.ycor()
if (go_to_x, go_to_y) not in walls:
self.goto(go_to_x, go_to_y)
  def go_up(self): 
go_to_x = self.xcor()
go_to_y = self.ycor() + 32
if (go_to_x, go_to_y) not in walls:
self.goto(go_to_x, go_to_y)

def go_down(self):
go_to_x = self.xcor()
go_to_y = self.ycor() - 32
if (go_to_x, go_to_y) not in walls:
self.goto(go_to_x, go_to_y)

Sie sorgtdafür,daßder Spieler,wenn sich bewegt,nicht durch dieWändegehen kann。 Dafürhabe ich mit

 walls = [] 

恩斯特·埃因斯特·利斯特·安杰莱格特(Eastal einemal eine Liste angelegt),死于普尔森·德·莫尔-蒂尔斯(Poauten-der Mauer-Tiles) 在go_to_xgo_to_y estfest电影节中的Und der Spieler legt,wohin er gehenmöchte。 Dannprüfter aber,ob (go_to_x, go_to_y)在法国国家博物馆(Fast mit»Nein«beantwortet wird,Geht der Spieler auch wirklich dorthin)任职。

 if (go_to_x, go_to_y) not in walls: 
self.goto(go_to_x, go_to_y)

伊斯特·达斯尼赫特·德·弗莱斯特(Ist das nicht der Fall),布赖特·斯特斯特恩(Stur Stehen),比尔·努特泽·安妮(Pet der Nutzer eine andere Pfeiltastedrücktund Ihm ein neues Ziel gibt)。

Das ganze Dungeon wird mit folgenden Zeilen Python-代码erzeugt:

 def setup_maze(level): 
for y in range(len(level)):
for x in range(len(level[y])):
sprite= level[y][x]
screen_x = -308 + (x*32)
screen_y = 224 - (y*32)

if sprite == "#":
wall.goto(screen_x, screen_y)
walls.append((screen_x, screen_y))
wall.stamp()
elif sprite == "@":
rogue.goto(screen_x, screen_y)
rogue.stamp

死于-308年,Ecke联系了Herumprobieren gefunden。 Eigentlichmüßtedoin meiner Meinung nach -304 Stehen,Denn die Koordinaten (0, 0) liegen im Mittelpunkt des Bildschirms,dahermüßtemeiner Meinung nach die x-Coordinate der Linken oberen Ecke mit der Formel

(−10 ∗ 32)+16

berechnet werden,也是负面的,在Turtle-Modul die-Koordinaten emitfalls im Mittelpunkt und nicht中,与von Anderen Graphik-Systemen共同合作,在der Linken oberen E中。

Wie dem auch sei,北-304 Lag ein Teil der Mauernaußerhalbdes Bildschirmfensters, -308 Brachte ein ordentlicher aussehendes Ergebnis。 瀑布irgendeiner meiner Leserweiß,meinen的wo der FehlerÜberlegungenliegt,meinen的bitte ich um einen Hinweis电子邮件-Kommentaren。 Ich bin mirnämlichsicher,摄影师,Dan das irgendwo ein ganz dummer Denkfehler von mir liegt,nur scheine ich da so betriebsblind zu sein,daßich nicht darauf komme。

报刊杂志,报刊杂志,报刊和新闻报导:

 t.listen() 
t.onkey(rogue.go_left, "Left")
t.onkey(rogue.go_right, "Right")
t.onkey(rogue.go_up, "Up")
t.onkey(rogue.go_down, "Down")
t.onkey(exitGame, "Escape") # Escape beendet das Spiel
 wn.tracer(0) 
setup_maze(levels[0])
 keepGoing = True 
while keepGoing:
wn.update()

Mit tracer(0) Graphikbuffer之间的垂直距离,可直接从Graphikausgabe verlangsamt中监听。 刷新监视器update() Kommando)– 刷新监视器。 Damit wird das Spiel ernorm beschleunigt。 Wer es mal verifizierenmöchte,Anneise beiden Zeilen ja einfach mal auskommentieren(在Endlosschleifemußdann allerdings stattdessen noch ein pass gesetzt werden中)。 exitGame() Funktion exitGame()地方, keepGoing auf False setzt und somit die Endlosschleife bedet:

 def exitGame(): 
global keepGoing
keepGoing = False

因此,与Euch的修女和其他人,Wollen的das nachprogrammieren一起,Hiell der Komplette Quelltext zum Abtippen:

 import turtle as t 
import os
 wn = t.Screen() 
wn.bgcolor("black")
wn.title("In den Labyrinthen von Buchhaim – Stage 1")
wn.setup(640, 480)
 wall_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/wall.gif") 
player_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/player.gif")
wn.register_shape(wall_shape)
wn.register_shape(player_shape)
 # Die Mauern des Labyrinths 
class Sprite(t.Turtle):

def __init__(self, shape):
t.Turtle.__init__(self)
self.shape(shape)
self.penup()
self.speed(0)

class Player(Sprite):

def __init__(self, shape):
Sprite.__init__(self, shape)
  def go_left(self): 
go_to_x = self.xcor() - 32
go_to_y = self.ycor()
if (go_to_x, go_to_y) not in walls:
self.goto(go_to_x, go_to_y)

def go_right(self):
go_to_x = self.xcor() + 32
go_to_y = self.ycor()
if (go_to_x, go_to_y) not in walls:
self.goto(go_to_x, go_to_y)
  def go_up(self): 
go_to_x = self.xcor()
go_to_y = self.ycor() + 32
if (go_to_x, go_to_y) not in walls:
self.goto(go_to_x, go_to_y)

def go_down(self):
go_to_x = self.xcor()
go_to_y = self.ycor() - 32
if (go_to_x, go_to_y) not in walls:
self.goto(go_to_x, go_to_y)
 # Liste der Labyrinthe 
levels = []
 level_1 = [ 
"####################",
"# @# #",
"# ####### ##### #",
"# # # #",
"# # ##### #",
"####### # # #",
"# # ##### #",
"# ####### # #",
"# # #",
"# #################",
"# #",
"#### ########### #",
"# # #",
"# # #",
"####################"
]
 levels.append(level_1) 
 # Level Setup 
def setup_maze(level):
for y in range(len(level)):
for x in range(len(level[y])):
sprite= level[y][x]
screen_x = -308 + (x*32)
screen_y = 224 - (y*32)

if sprite == "#":
wall.goto(screen_x, screen_y)
walls.append((screen_x, screen_y))
wall.stamp()
elif sprite == "@":
rogue.goto(screen_x, screen_y)
rogue.stamp
 def exitGame(): 
global keepGoing
keepGoing = False
 walls = [] 
wall = Sprite(wall_shape)
rogue = Player(player_shape)
 # Auf Tastaturereignisse lauschen 
t.listen()
t.onkey(rogue.go_left, "Left")
t.onkey(rogue.go_right, "Right")
t.onkey(rogue.go_up, "Up")
t.onkey(rogue.go_down, "Down")
t.onkey(exitGame, "Escape") # Escape beendet das Spiel
 wn.tracer(0) 
setup_maze(levels[0])
# print(walls)
 keepGoing = True 
while keepGoing:
wn.update()

在déchästen的Folge werde ich dem的Spieler ein paarGoldmünzenals lohnende Ziele的花店和einer weiteren的Folge wird errd ein paar的Monster als Gegner zur Seite gestellt bekommen。 还在挖!