用python开发迷宫游戏:
import turtle as t
import randommz = t.Screen()
mz.setup(700, 700)
mz.bgcolor('black')
mz.title('Melody 迷宫')
mz.register_shape('wall.gif')#注册图片
mz.register_shape('pl.gif')
mz.register_shape('pr.gif')
mz.register_shape('gold.gif')
mz.register_shape('e.gif')
mz.tracer(0) # 不用一步一步显示画面,最后一起显示,和mz.update()配合用levels = []
level_1 = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"XXX XXXXXX XXXXXXXXXXX",
"XXXP XXXXXXX XXXXXXXXXXX",
"XXX XXXXXXX XXXXXXXXXXX",
"XXX XXXX",
"XXXXXXX XXXX XXXXX XXXX",
"XXXXXXXGXXXX XXXXXE EXX",
"XXXXXXXXXXXX XXXXX XXX",
"XXXXXXXXXXXX XXXXX XX",
"XXG XX",
"XXXX XXXXXX XXXX EXXXX",
"XXXX XXXXXX XXXXGXXXXXX",
"XXXXE XXXXXXXX",
"XXXXXXXXXXEXXXX XXXXXXXX",
"XXXXXXXXGXXXXXX XXXXXXXX",
"XXXXXXXX XXXXXX XXEXXXXX",
"XX XXXXXXXX",
"XX XXXXXXXXXXXXXXXXXXXX",
"XX XXXXX X",
"XX XXXXXXXXXXXXX XXXXX",
"XX XXXXXXXXXXX XXXXX",
"XX XXXX X",
"XXXX X",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]
level_2 = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"XXX XXXXXX XXXXXXXXXXX",
"XXX XXXXXXXP XXXXXXXXXXX",
"XXX XXXXXXX XXXXXXXXXXX",
"XXX XXXX",
"XXX XX XXXX XXXXX XXXX",
"XXX XXGXXXX XXXXXE EXX",
"XXX XXXXXXX XXXXX XXX",
"XXX XXXXXXX XXXXX XX",
"XX XX",
"XXXX XXXXXX XXXX XXXX",
"XXXX XXXXXX XXXXXGXXXXX",
"XXXXE XXX XXXX",
"XXXXXXX XEXXXX XXXXXXXX",
"XXXXXXXX XXXXXX XXXXXXX",
"XXXXXXX XXXXXX XXEXXXXX",
"XX GXXXXXX",
"XX XX XXXXXXXXXXXXXXXX",
"XX XX X X",
"XX XXXXXXXXXXXXX XXXXX",
"XX XXXXXXXXXXX XXXXX",
"XX XXXX X",
"XXXX X",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]
levels.append(level_1)
levels.append(level_2)# 创建玩家类
class Player(t.Turtle):def __init__(self):super().__init__() #继承self.ht() #隐藏笔self.shape('pr.gif') #将笔设置形状self.speed(0) #速度很快self.penup() #笔抬起来def go_right(self):go_x = () + 24go_y = ()self.shape('pr.gif')ve(go_x, go_y)def go_left(self):go_x = () - 24go_y = ()self.shape('pl.gif')ve(go_x, go_y)def go_up(self):go_x = ()go_y = () + ve(go_x, go_y)def go_down(self):go_x = ()go_y = () - ve(go_x, go_y)def move(self, go_x, go_y):if (go_x, go_y) not in (go_x, go_y)self.look_for_gold(go_x, go_y)else:print('撞墙了')def look_for_gold(self, go_x, go_y):global score # 只有全局变量才能改写for g in golds:if g.distance(player) == 0: #判断距离score += 1print(score)g.ht()ve(g) #移走,防止下次到达该位置重复加分if not golds:success()#创建金币
class Gold(t.Turtle):def __init__(self):super().__init__() #继承self.ht() #隐藏笔self.shape('gold.gif') #将笔设置形状self.speed(0) #速度很快self.penup() #笔抬起来#创建恶魔
class Enemy(t.Turtle):def __init__(self):super().__init__() #继承self.ht() #隐藏笔self.shape('e.gif') #将笔设置形状self.speed(0) #速度很快self.penup() #笔抬起来def move(self):self.turn()if self.fx == 'U':go_x = ()go_y = () + 24elif self.fx == 'D':go_x = ()go_y = () - 24elif self.fx == 'L':go_x = () - 24go_y = () elif self.fx == 'R':go_x = () + 24go_y = ()if (go_x, go_y) in (go_x, go_ve, random.randint(100,300))def turn(self): #转向#跟随功能if self.distance(player) < 72:() < ():self.fx = 'R'() >= ():self.fx = 'L'() <= ():self.fx = 'U'() > ():self.fx = 'D'else:self.fx = random.choice(['U', 'D', 'L', 'R'])# 创建画笔类
class Pen(t.Turtle):def __init__(self):super().__init__() #继承self.ht() #隐藏笔self.shape('wall.gif') #将笔设置形状self.speed(0) #速度很快self.penup() #笔抬起来(200, 200) #去某一个位置self.st() #显现笔#根据数组创建迷宫def make_maze(self):level = levels[current_level - 1] for i in range(len(level)):row = level[i]for j in range(len(row)):char = row[j]screen_x = -288 + 24 * jscreen_y = 288 - 24 * iboard.append((screen_x, screen_y))if char == 'X':(screen_x, screen_y)self.stamp() #盖章walls.append((screen_x, screen_y)) #元组elif char == 'P':(screen_x, screen_y)player.st()elif char == 'G':gold = Gold() #每一个金币都是独立的个体golds.append((screen_x, screen_y)gold.st()elif char == 'E':ene = Enemy() #每一个金币都是独立的个体enemies.append((screen_x, screen_y)ene.st()#进入下一关 start
current_level = 1def success():if current_level == len(levels):print('你已称王!太帅啦!')show_success_msg('你已称王!', '按回车键重新开始')else:print('成功过关,按回车键进入下一关')show_success_msg('成功过关', '按回车键进入下一关')success_pen = t.Turtle() #用来写成功消息的画笔
def show_success_msg(title, msg):success_pen.ht()success_pen.speed(0)success_pen.penup()(-100, -100)success_pen.fillcolor('green') #设置填充色success_pen.begin_fill() #开始填充for i in range(4):success_pen.fd(200)#笔向前走success_pen.left(90)#笔向左转90度d_fill() #结束填充(-80, 30)lor('yellow')success_pen.write(title, align='left', font=('Arial', 14, 'bold'))(-80, -30)success_pen.write(msg, align='left', font=('Arial', 14, 'bold')) #进入下一关
def next_level():global scorescore = 0global current_level #全局变量if current_level == len(levels):current_level = 1else:current_level += 1#清除提示信息success_pen.clear()#隐藏并清除敌人for e in enemies:e.ht()enemies.clear()#清除墙pen.clear()walls.clear()#重建迷宫pen.make_maze()#给恶魔加定时器,重新动起来for e in enemies: t.ve, random.randint(100,300))score = 0
pen = Pen()
player = Player()
board = []
walls = []
golds = []
enemies = []
pen.make_maze()#监控键盘
mz.listen()
mz._right, 'Right')
mz._left, 'Left')
mz._up, 'Up')
mz._down, 'Down')
mz.onkey(next_level, 'Return')#回车键#让恶魔动起来
for e in enemies: t.ve, random.randint(100,300))while True:mz.update() #更新显示画面mz.mainloop()
本文发布于:2024-01-29 09:28:32,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170649171714317.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |