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

Im erten Teil meiner kleinen Tutorial-Reihe,与Rogue一样的mit Dem Turtle-Modul von Python程序主编,Habe ich das Labyrinth geschaffen和Unseren Helden,den Rogue ,达林·祖姆·勒本·勒本·艾尔文克特,Den der Spieler Pann der塔斯塔图尔·杜希(Tastatur durch)死于迷宫。 我要在德国的戈尔德施泰克(Goldstücke)的迷宫与达菲尔·索尔根(Dafürsorgen)街上玩游戏,并在哥德(Goldschatz)大街上找到自己的名字。

Dafürbrauchte ich zuerst einmal ein paar Bilder derGoldstückchen,死于wieder bei der freien(CC BY 3.0)TomeTik Tiles图书馆澳大利亚人。 DerSchöpferder Bilder浸入式水槽David E. Gervais和ich habe Ihn hiermitlizenzgemäßgenannt。

达斯·拉登与比尔德登记处在奎尔码附近

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")
gold1_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/gold1.gif")
gold2_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/gold2.gif")
gold3_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/gold3.gif")
gold4_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/gold4.gif")
gold5_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/gold5.gif")
gold6_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/gold6.gif")
wn.register_shape(wall_shape)
wn.register_shape(player_shape)
wn.register_shape(gold1_shape)
wn.register_shape(gold2_shape)
wn.register_shape(gold3_shape)
wn.register_shape(gold4_shape)
wn.register_shape(gold5_shape)
wn.register_shape(gold6_shape)

曼纳·达斯·纳特里希(Ak dasnatürlich)是一位更聪明的人,他在艾纳(Ener)的《史莱夫》(Sleife)上载了《注册书》(Ale dasüberlasseich zurübungder)。

Die Oberklasse Sprite wurde mit zwei weiteren Funktionen versehen,Einmal mit der Methode collides_with collides_with()

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

电影节,《雪碧》和《雪碧·科利迪》 if distance < 5if distance == 0死于Bedingung; if distance == 0if distance == 0if distance == 0if distance == 0为零; if distance == 0if distance == 0为零; if distance < 5等于5, if distance == 0为零。费斯特光栅公司 可以从Python-Standard-Bibliothek imperertiert werden的数学程序库中获取程序:

 import math 
import random as r

不愿参加Zufallszahlen-Bibliothek或wirdspäternoch gebraucht。

Dann债死Methode destroy()

 def destroy(self): 
self.goto(5000, 5000)
self.hideturtle()

丹麦国家石油公司和德国国家石油公司以及德国国防军总司令部。

Die Klasse des Spielers ist nahezuunverändertgeblieben,er hat nur die Eigenschaft

 self.gold = 0 

zusätzlichbekommen。 Dieses leere Portemonnaie soll erwährenddes Spielesauffüllenkönnen。

Neul ist Klasse Treasure ,死于Goldobjekte erzeugen soll:

 class Treasure(Sprite): 

def __init__(self, shape, x, y, amount):
Sprite.__init__(self, shape)
self.x = x
self.y = y
self.gold = amount
self.goto(self.x, self.y)

Auserdem sind noch zwei weitere听hinzugekommen:

 treasures = [] 
treasure_shapes = [gold1_shape, gold2_shape, gold3_shape,
gold4_shape, gold5_shape, gold6_shape]

treasures在哥德堡的金币上被发现,并且在treasure_shapes形成了金币。

我的级别是永恒的,是金色的还是金色的:

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

DieBeschränkungauf ASCII-Zechen im Level-Entwurfführtebei denfrühenRogue-likes dazu,最多256个verschiedene 项目 das Spielfeldbevölkernkonnten,坚果类人einen erweiterten ASCII-Satz waren es schon deutlich。 Dennoch hatte ichfrüherbeim Level-Entwurf immers deriistgege numerische Werte bevorzugt,denn死于immerhin 1.000 verschiedene Items zu,aber es machtezugegebenermaßen在Leveldarstellungunübersichtlicher。 在Zeiten von UTF-8和Python 3 kann man gefahrlos die Glyphen-Darstellungwählen中,es stehen einem ja nun Millionen von Zeichen – bis hin zu Emojis – offfen。 (Ein Level-Entwurf,der komplett mit Emojis gezeichnet wurde,daswäredoch mal was。)

数据级别的设置-必威投注网

 elif sprite == "g": 
treasures.append(Treasure(r.choice(treasure_shapes), screen_x, screen_y,
r.randint(25, 250)))
num_treasures += 1

更高端的人, random输入。 因果关系的choice() Einmalwählemit der Funktion choice()形状列表上的金砖与randint() Andrewen weise ed jedem Goldschatz mit der Funktion randint()因果关系25和250 zu。

尖刻的尖刻的尖刻的尖刺。 Sie ist nun immerhin sogroßgeworden,das sie diesen Namen auch verdient:

 keepGoing = True 
while keepGoing:
for treasure in treasures:
if rogue.collides_with(treasure):
rogue.gold += treasure.gold
print("Goldschatz des Spielers: {} Goldstücke".format(rogue.gold))
treasure.destroy()
num_treasures -= 1
if num_treasures == 0:
print("Glückwunsch, Du hast diesen Level überlebt!")
wn.update()

Jedes Mal,Rogue einen Goldschatz einsackt和Anzahl derGoldschätzeum einen erniedrigt。 Gibt es keineGoldschätzeim Level mehr,wird der Roguefürseine Leistungbeglückwünscht。

Nun aber wieder den kompletten Quellcode zur Kontrolle和fürdiejenigen,死于dies Spiel的状态nachprogrammieren狼吞虎咽:

 import turtle as t 
import random as r
import os
import math
 wn = t.Screen() 
wn.bgcolor("black")
wn.title("In den Labyrinthen von Buchhaim – Stage 2")
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")
gold1_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/gold1.gif")
gold2_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/gold2.gif")
gold3_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/gold3.gif")
gold4_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/gold4.gif")
gold5_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/gold5.gif")
gold6_shape = os.path.join(os.getcwd(), "sources/turtle/roguelike/images/gold6.gif")
wn.register_shape(wall_shape)
wn.register_shape(player_shape)
wn.register_shape(gold1_shape)
wn.register_shape(gold2_shape)
wn.register_shape(gold3_shape)
wn.register_shape(gold4_shape)
wn.register_shape(gold5_shape)
wn.register_shape(gold6_shape)
 # Die Oberklasse Sprite, zugleich die Klasse für die Mauern des Labyrinths 
class Sprite(t.Turtle):

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

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

def destroy(self):
self.goto(5000, 5000)
self.hideturtle()
 # Der Spieler 
class Player(Sprite):

def __init__(self, shape):
Sprite.__init__(self, shape)
self.gold = 0

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)
 # Die Schätze 
class Treasure(Sprite):

def __init__(self, shape, x, y, amount):
Sprite.__init__(self, shape)
self.x = x
self.y = y
self.gold = amount
self.goto(self.x, self.y)
 # Listen der Labyrinthe, der Mauern und der Schätze 
levels = []
walls = []
treasures = []
treasure_shapes = [gold1_shape, gold2_shape, gold3_shape,
gold4_shape, gold5_shape, gold6_shape]
 level_1 = [ 
"####################",
"# @# #",
"# ####### ##### #",
"# # #g #",
"# # ##### #",
"####### # # #",
"# # ##### #",
"# ####### # #",
"# # g#",
"# #################",
"# #",
"#### ########### #",
"# g# #",
"# #g #",
"####################"
]
 levels.append(level_1) 
 # Level Setup 
def setup_maze(level):
global num_treasures
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
elif sprite == "g":
treasures.append(Treasure(r.choice(treasure_shapes), screen_x, screen_y, r.randint(25, 250)))
num_treasures += 1
 def exitGame(): 
global keepGoing
keepGoing = False
 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) 
num_treasures = 0
setup_maze(levels[0])
# print(walls)
 keepGoing = True 
while keepGoing:
for treasure in treasures:
if rogue.collides_with(treasure):
rogue.gold += treasure.gold
print("Goldschatz des Spielers: {} Goldstücke".format(rogue.gold))
treasure.destroy()
num_treasures -= 1
if num_treasures == 0:
print("Glückwunsch, Du hast diesen Level überlebt!")
wn.update()

达斯·斯皮尔(Das Spiel)就是这样,赫拉苏芬登(Herauszufinden)的儿子努尔·埃因·韦拉奇(Herauszufinden)的儿子努尔·斯皮勒(Herausforderungfürden Spieler)是特尔特·莫德(Turtle-Modul)先生,所以请大家帮忙。 ImNächstenTeil dieer kleinen Reihemöchteich den Rogue mit einer Reihe von Monstern konfrontieren,死于Ihm danngefährlichwerdenkönnen。 还在挖!