python学习之小游戏:用面向对象开发迷宫

阅读: 评论:0

python学习之小游戏:用面向对象开发迷宫

python学习之小游戏:用面向对象开发迷宫

课程视频链接

用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小时内删除。

标签:小游戏   迷宫   面向对象   python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23