迷宫小游戏

强烈推荐b站麦叔编程 (https://b23.tv/ZBqJSJ)讲的真的超好,容易理解。
而且理解基础代码后还可以自己稍加拓展。
我进行了简单的拓展,也可能存在bug,欢迎指正。
拓展一:共设置了5关,也可跟自己喜好随意设置多少关卡
拓展二:左上角显示当前关卡和游戏说明
拓展三:当玩家和恶魔相撞,提醒gameover,然后空格键重玩此关

效果图片






简单效果

吃金币

空格键刷新

回车键进入下一关

代码

代码中相关注释,保准大家一定能看懂

#1.创建游戏背景
import turtle as timport random# 创建窗口
mz = t.Screen()# 设置长宽
mz.setup(700,700)
# 设置背景色
mz.bgcolor('black')
# 设置标题
mz.title('吃金币迷宫小游戏')# 使用照片前先将照片注册
mz.register_shape('images/wall.gif')
mz.register_shape('images/pr.gif')
mz.register_shape('images/pl.gif')
mz.register_shape('images/gold.gif')
mz.register_shape('images/e.gif')# 不用一步一步显示画面,最后一起显示,和mz.update()配合用
mz.tracer(0)levels = []
# 第一关
# P:player; G:金币; E:恶魔;
level_1 = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"XXX   XXXXXX  XXXXXXXXXXX",
"XXXP XXXXXXX  XXXXXXXXXXX",
"XXX  XXXXXXX  XXXXXXXXXXX",
"XXX                  XXXX",
"XXXXXXX XXXX  XXXXX  XXXX",
"XXXXXXXG XXX  XXXXXG  XXX",
"XXXXXXXX XXX  XXXXXX  XXX",
"XXXXXXXX XXX  XXXXX    XX",
"XX                     XX",
"XXXX  XXXGXXXXX XX  XXXXX",
"XXXX  XXXXXXXXX XXX XXXXX",
"XXXXE               XXXXX",
"XXXXX  XX XXXXX  XX XXXXX",
"XXXXXX XX XXXXX  XX XXXXX",
"XXXXXX XX XXXXX  XXXXXXXX",
"XX               XXXXXXXX",
"XX   XXXXXXXXXXGXXXXXXXXX",
"XX   XXXXX              X",
"XXE  XXXXXXXXXXXXX  XXXXX",
"XX     XXXXXXXXXXX  XXXXX",
"XX            XXXX      X",
"XXXX                    X",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]
level_2 = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"XXX   XXXXXX  XXXXXXXXXXX",
"XXXP XXXXXXX  XXXXXXXXXXX",
"XXX  XXXXXXX  GXXXXXXXXXX",
"XXX                  XXXX",
"XXXXXXX XXXX  XXXXX  XXXX",
"XXXXXXXG XXX  XXXXXG  XXX",
"XXXXXXXX XXX  XXXXXX  XXX",
"XXXXXXXX XXX  XXXXX    EX",
"XX                     XX",
"XXXX  XXXGXXXXX XX  XXXXX",
"XXXX  XXXXXXXXX XXXGXXXXX",
"XXXXE               XXXXX",
"XXXXX  XX XXXXX  XX XXXXX",
"XXXXXX XX XXXXX  XX XXXXX",
"XXXXXX XX XXXXX  XXXXXXXX",
"XX               XXXXXXXX",
"XX   XXXXXXXXXXGXXXXXXXXX",
"XX   XXXXX              X",
"XXE  XXXXXXXXGXXXX  XXXXX",
"XX     XXXXXXXXXXX  XXXXX",
"XX            XXXX      X",
"XXXX                    X",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]
level_3 = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"XXX   XXXXXX  XXXXXXXXXXX",
"XXXX XXX  XXE XXXXX  XXXX",
"XXX  XXX   X  XXXXX  XXXX",
"XXX                   XXX",
"XXXXXXX XXXX  XXXXX  XXXX",
"XXXXX  GXXXX  XXXXXE   XX",
"XXXX  XXXXXP  XXXXX   XXX",
"XXXX  GXX XX  XXXXX    XX",
"XX                     XX",
"XX X  XXXX XX XXXX  XXXXX",
"XXXX  XXXXGXX XXX   X XXX",
"XXXGX            XX XXXXX",
"XXX   XXX XXX X  XX XXXXX",
"XXX  XXXE XXX G  XX XXXXX",
"XXX  XXXX XXX X   G XXXXX",
"XX               XX XXXXX",
"XX   X X XXXX XXXXX XXXXX",
"XX   X X                X",
"XX   XXXGXXXX XXXX XXXXXX",
"XX     XXXXXEXXXXX  XXXXX",
"XX            XXXX      X",
"XXXX                    X",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]
level_4 = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"XXX   XXXXXX  XX XXXXXXXX",
"XXXE XXX  XX  PX XX   XXX",
"XXX  XXX  XX  XX XX  XXXX",
"XXX                  XXXX",
"XXXXXXX XXXX  XX XX  XXXX",
"XXX    GXXXX  XX XXE   XX",
"XG  XXXXXXX   XXXXX   XXX",
"X  X  XXXXXX  XXGXX    XX",
"XX                     EX",
"XXXX  XXXX XX XXXX   XXXX",
"XXXX  XXXXXXXGXXXXX  XXXX",
"XXXXE            XXXGXXXX",
"XXXX  XXX XXX X  XXX XXXX",
"XXX  XXXX XXX X  XXX XXXX",
"XG   XXGX XXX X  XXX XXXX",
"XX                   XXXX",
"XX   XXXXXX X XEXXXX XXXX",
"XX   XXXXX              X",
"XX   XGXXXXXX XXXX  XXXXX",
"XX     XXXXXX XXXX  XXXXX",
"XX            XXXX      X",
"XXEX                    X",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]level_5 = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"XXX   XXXXXE  XX XXXXXXXX",
"XXXE XXX  XXX XX XX   PXX",
"XXX  XXX  XX  XX XX  XXXX",
"XXX                  GXXX",
"XXXXXXX XXXX  XX XX  XXXX",
"XXX    GXXXXXXXX XXE   XX",
"XG  XXXXXXX   XX XX   XXX",
"X  X  XXXXXX  XXGXX    XX",
"XX                     EX",
"XXXX  XXXX XX XXXX   XX X",
"XXXX  XXXXXXXGXXXXX  XX X",
"XXXXE            XXXGXXGX",
"XXXX  XXX XXX X  XXX XX X",
"XXX  XXXX XXX E  XXX XX X",
"XG   XXGX XXX X  XXX XX X",
"XX                    G X",
"XX   XXXXXX X XEXXXX XXXX",
"XX   XXXXX              X",
"XX   XGXXXXXX XXXX  XXXXX",
"XX     XXXXXX XXGX  XXEXX",
"XX            XX X      X",
"XXEX                    X",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]levels.append(level_1)
levels.append(level_2)
levels.append(level_3)
levels.append(level_4)
levels.append(level_5)class Pen(t.Turtle):# -----------画笔-------------def __init__(self):# 继承父类的属性super().__init__()# 先隐藏起来,隐秘进行运动self.ht()self.shape('images/wall.gif')self.speed(0)self.penup()# -----------迷宫--------------def make_maze(self):level = levels[current_level - 1]for i in range(len(level)):# 取出某一行row = level[i]# 获取到某一元素的坐标for j in range(len(row)):screen_x = -288 + 24 * jscreen_y = 288 - 24 * ichar = row[j]#如果元素为X,则画出迷宫if char == 'X':self.goto(screen_x,screen_y)self.stamp()walls.append((screen_x,screen_y))#元组elif char == 'P':player.goto(screen_x,screen_y)player.st()elif char == 'G':gold = Gold()golds.append(gold)gold.goto(screen_x,screen_y)gold.st()elif char == 'E':e = Evil()evils.append(e)e.goto(screen_x, screen_y)e.st()show_level('当前关卡:',current_level,'如想重玩此关,在进入下一关前按空格键即可!')class Player(t.Turtle):# -----------玩家-------------def __init__(self):# 继承父类的属性super().__init__()# 先隐藏起来,隐秘进行运动self.ht()self.shape('images/pr.gif')self.speed(0)self.penup()# 右移def go_right(self):# print('going right')go_x = self.xcor() + 24go_y = self.ycor()self.shape('images/pr.gif')self.move(go_x, go_y)# 左移def go_left(self):# print('going left')go_x = self.xcor() - 24go_y = self.ycor()# 左移时通过更换图片来更换方向self.shape('images/pl.gif')self.move(go_x,go_y)# 上移def go_up(self):# print('going up')go_x = self.xcor()go_y = self.ycor() + 24self.move(go_x, go_y)# 下移def go_down(self):# print('going down')go_x = self.xcor()go_y = self.ycor() - 24self.move(go_x, go_y)# 运动时的共同行为def move(self, go_x, go_y):if (go_x, go_y) not in walls:self.goto(go_x, go_y)# 边运动边查找是否金币self.look_for_gold(go_x,go_y)self.isgameover(go_x,go_y)else:print('撞墙了')def look_for_gold(self,go_x,go_y):global scorefor g in golds:# print('g--',g)# 判断玩家和金币的距离if g.distance(player) == 0:score += 1#当玩家和金币重叠时,将金币隐藏,并从golds数组中移除g.ht()golds.remove(g)# 如果golds数组为空,则说明金币已全部吃完if not golds:print('金币全部吃完了')success()def isgameover(self,go_x,go_y):for e in evils:# print('e--',e)if e.distance(player) ==0:print('gameover')fail()class Gold(t.Turtle):# -----------金币-------------def __init__(self):# 继承父类的属性super().__init__()# 先隐藏起来,隐秘进行运动self.ht()self.shape('images/gold.gif')self.speed(0)self.penup()class Evil(t.Turtle):# -----------恶魔-------------def __init__(self):# 继承父类的属性super().__init__()# 先隐藏起来,隐秘进行运动self.ht()self.shape('images/e.gif')self.speed(0)self.penup()# 恶魔移动def move(self):# 调用turn给恶魔运动一个随机的方向self.turn()if self.fx == 'U':go_x = self.xcor()go_y = self.ycor() + 24elif self.fx == 'D':go_x = self.xcor()go_y = self.ycor() - 24elif self.fx == "L":go_x = self.xcor() - 24go_y = self.ycor()elif self.fx == "R":go_x = self.xcor() + 24go_y = self.ycor()# 避免恶魔撞墙if (go_x, go_y) not in walls:self.goto(go_x, go_y)# 恶魔移动时间在100-300毫秒之间t.ontimer(self.move, random.randint(100, 300))# 恶魔转向def turn(self):# 跟随功能if self.distance(player) < 48:if self.xcor() < player.xcor():self.fx = 'R'elif self.xcor() > player.xcor():self.fx = 'L'elif self.ycor() < player.ycor():self.fx = 'U'elif self.ycor() > player.ycor():self.fx = 'D'else:self.fx = random.choice(['U', 'D', 'L', 'R'])# 进入下一关
# 默认当前级别为1
current_level = 1# --------显示当前关卡----------
level_pen = t.Turtle()
level_pen1 = t.Turtle()
def show_level(title,current_level,msg):# ---title---msg--level_pen.ht()level_pen.speed(0)level_pen.penup()level_pen.color('#fff')level_pen.goto(-300,310)level_pen.write(title,align='left',font=('Arial',20,'bold'))level_pen.goto(-160, 310)level_pen.write(msg, align='left', font=('Arial', 14, 'bold'))# ----关卡数----level----level_pen1.ht()level_pen1.speed(0)level_pen1.penup()level_pen1.color('#FF4500')level_pen1.goto(-200, 310)level_pen1.write(current_level, align='left', font=('Arial', 30, 'bold'))# --------通关---------------
def success():# 如果已到最后一关,则提示您已通关if(current_level == len(levels)):print('您已全部过关')show_success_msg('恭喜,您已全部过关!!','','按回车键重玩游戏')# 否则进入下一关else:print('成功过关,按回车键进入下一关')show_success_msg('恭喜,您成功通过关卡',current_level,'按回车键进入下一关')# --------画笔-----通关消息------------
success_pen = t.Turtle()
def show_success_msg(title,current_level,msg):success_pen.ht()success_pen.speed(0)success_pen.penup()success_pen.goto(-100,-100)# 填充色success_pen.fillcolor('#BC8F8F')# 开始填充success_pen.begin_fill()for i in range(4):success_pen.fd(250)success_pen.left(90)# 结束填充success_pen.end_fill()success_pen.goto(-80,40)success_pen.color('#fff')success_pen.write(title,align='left',font=('Arial',20,'bold'))success_pen.goto(120, 40)success_pen.write(current_level, align='left', font=('Arial', 20, 'bold'))success_pen.goto(-85,-40)success_pen.write(msg, align='left', font=('Arial', 20, 'bold'))# ------进入下一关---------
def next_level():global current_level# 只有当吃完金币进入下一关时,回车键才起作用if not golds:if current_level == len(levels):current_level = 1else:current_level =current_level + 1# 清除提示信息success_pen.clear()level_pen.clear()level_pen1.clear()fail_pen.clear()# 隐藏并清空恶魔for e in evils:e.ht()evils.clear()# 清空砖块walls.clear()#清除迷宫的砖墙pen.clear()#重建迷宫pen.make_maze()# 设置定时器让恶魔移动for e in evils:t.ontimer(e.move, random.randint(100, 300))# --------gameover---------------
def fail():# print('gameover----')show_fail_msg('gameover','按空格键重玩游戏')# --------画笔-----gameover消息------------
fail_pen = t.Turtle()
def show_fail_msg(title,msg):fail_pen.ht()fail_pen.speed(0)fail_pen.penup()fail_pen.goto(-100,-100)# 填充色fail_pen.fillcolor('#BC8F8F')# 开始填充fail_pen.begin_fill()for i in range(4):fail_pen.fd(250)fail_pen.left(90)# 结束填充fail_pen.end_fill()fail_pen.goto(-80,40)fail_pen.color('#fff')fail_pen.write(title,align='left',font=('Arial',20,'bold'))fail_pen.goto(-85,-40)fail_pen.write(msg, align='left', font=('Arial', 20, 'bold'))# ------gameover后重玩此关---------
def restart():global current_levelcurrent_level =current_level + 0# 清除提示信息fail_pen.clear()level_pen.clear()level_pen1.clear()success_pen.clear()# 隐藏并清空恶魔for e in evils:e.ht()evils.clear()# 清空砖块walls.clear()#清除迷宫的砖墙pen.clear()#重建迷宫pen.make_maze()# 设置定时器让恶魔移动for e in evils:t.ontimer(e.move, random.randint(100, 300))score = 0# 调用画笔类
pen = Pen()# 调用玩家
player = Player()evil = Evil()# walls数组来存储墙的坐标
walls = []# golds数组存储金币
golds = []evils = []# 根据不同的关卡绘制迷宫
pen.make_maze()# 根据键盘移动
mz.listen()
mz.onkey(player.go_right, 'Right')
mz.onkey(player.go_left, 'Left')
mz.onkey(player.go_up, 'Up')
mz.onkey(player.go_down, 'Down')
mz.onkey(next_level, 'Return')#回车键
mz.onkey(restart, 'space')#空格键# 设置闹钟让恶魔移动
for e in evils:t.ontimer(e.move,random.randint(100,300))while True:mz.update()# 提醒窗口不要退出
mz.mainloop()

image





引用

麦叔b站视频教程

python之迷宫小游戏相关推荐

  1. 一个Python的迷宫小游戏

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 迷宫小游戏 前言 一.python是什么? 二.使用步骤 1.引入库 2.读入数据 2.1.游戏开始 2.2.控制角色移动 2.3.鼠 ...

  2. Python游戏开发,pygame模块,Python实现过迷宫小游戏

    前言 今天为大家带来解闷用的过迷宫小游戏分享给大家好了.让我们愉快地开始吧~ 效果展示 开发工具 Python版本: 3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境 ...

  3. python迷宫小游戏大全_Python迷宫小游戏源代码、源程序

    Python迷宫小游戏源程序包括两个文件maze.py和mazeGenerator.py,mazeGenerator.py实现迷宫地图的生成,程序运行截图: mazeGenerator.py impo ...

  4. python迷宫小游戏代码_6.1 | 童年的游戏,Python一行代码就能玩

    作者 | 刘早起来源 | 早起Python 大家好,儿童节就要来了,虽然秃头程序员没有头发,但是童心还是一直都在的,今天就分享一个私藏的GitHub项目--free-python-games,一行代码 ...

  5. python迷宫小游戏

    一款基于 Python + Pygame + AI算法 的 迷宫小游戏 (一)课题内容 实现走迷宫. 主要功能为界面显示.上下左右键的响应以及当前步数统计. 通过该课题全面熟悉数组.字符串等的使用,掌 ...

  6. python迷宫小游戏代码_pygame简易迷宫游戏_mask应用示例程序

    用pygame制作的迷宫小游戏.像这类碰撞检测用mask最好.下面是部分代码预览: """ 简易迷宫游戏.本程序演示一个非常简单的迷宫游戏原理. 采用mask进行碰撞检测 ...

  7. 用python做一个简单的游戏,用python写一个小游戏

    大家好,本文将围绕如何用python做一个简单的小游戏展开说明,python编写的入门简单小游戏是一个很多人都想弄明白的事情,想搞清楚用python做一个简单的游戏需要先了解以下几个事情. 1.Pyt ...

  8. python经典小游戏五子棋,适合python编程的小游戏

    python入门可以做的小游戏 1.Python入门拼图小游戏简单介绍:将图像分为m×n个矩形块,并将图像右下角的矩形块替换为空白块后,将这些矩形块随机摆放成原图像的形状. 2.Python入门推箱子 ...

  9. python手机版做小游戏代码大全-python简单小游戏代码 怎么用Python制作简单小游戏...

    1.Python猜拳小游戏代码: 2.import random #导入随机模块 3. 4.num = 1 5.yin_num = 0 6.shu_num = 0 7.while num <= ...

  10. python写游戏脚本-使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

最新文章

  1. 阿里云PyODPS 0.7.18发布,针对聚合函数进行优化同时新增对Python 3.7支持
  2. Py之BaseHTTPServer:Python库之BaseHTTPServer的简介、安装、使用方法之详细攻略
  3. python查找输出文字_Python基础练习,查询文本内容并输出;
  4. linux之通过grep使用or、and、not操作
  5. C#中利用Linq.Dynamic实现简单的动态表达式构建查询
  6. Less or Equal(CF-977C)
  7. groovy 对 list 排序
  8. doc转docx文件会乱吗_利用python将doc文件转换为docx
  9. baseurl php,html base URL是什么?html base详细解析汇总
  10. 使用kubectl访问Kubernetes集群时的身份验证和授权
  11. 计算机骗局案例,骗局揭秘 | 卖你一台假电脑,再送你一个假鲁大师
  12. 【干货】区块链技术生态的设计|《白话区块链》作者蒋勇分享实录
  13. java火星坐标转百度坐标,火星坐标(GCJ-02)转百度坐标(BD-09)算法验证
  14. 有哪些盛极一时的互联网产品,现在都没落了?
  15. html css字体最小,网页字体大小的设计技巧
  16. 主流蓝牙芯片对比 Dialog- ST -TI - Nordic
  17. PHP获取Opcode及C源码
  18. java在web里被禁用_JavaWEB_Session被禁用的后果和解决方法
  19. 大数据之分布式搜索引擎_4.分布式搜索引擎写入和查询的工作流程是什么样的?
  20. 响应式中小学早教教育机构类网站源码 HTML5教育培训机构网站织梦模板

热门文章

  1. Android studio 如何连接手机
  2. qt:qt5.12警告消除大法之 warning: zero as null pointer constant
  3. 赛尔号星球大战游戏攻略
  4. Passenger, Apache/Nginx, Rails之间的关系
  5. SUV世家广汽三菱,牵手微信企业号打造学习型企业
  6. 两阶段目标检测详解--FastRCNN
  7. 艺考生冬日穿泳装秀三围
  8. python卡方检验计算pvalue值_Python数据科学:卡方检验
  9. 各种蜂蜜功效大全(收藏)
  10. 什么是糊涂窗口综合症