哈喽!大家好!我是木木子~
纵观之前的文章——我发现了一个特点,很多小伙伴儿都喜欢学习Turtle或游戏代码,没错吧~
那今天这篇文章就是为这2方面的小伙伴儿精心准备滴!Turtle+游戏一起安排一波啦!
从Turtle开始介绍—基础知识到实践案例这篇文章都写到了嘞!不要以为是单单一个项目哦,想学
Turtle的必学篇,不要错过啦~
之前小编也写过很多Turtle的代码正在学的小伙伴儿等下文末有汇总文章,可以挑自己喜欢的文章
观看哈!
最后今天小编会带大家写一个利用Turtle的一款海龟闯关的三大迷宫哦!这工程量还是挺大的!都
是绘制下来的话代码量比较多了撒,400行代码才完成这款“海龟闯关走迷宫的”小游戏!
正文一、简介1)什么是Turtle?Turtle英译过来为乌龟,不过我们介绍的不是这种动物,而是以此命名的一个绘图软件。
在python文档中介绍了Turtle本身是一款简单、易上手的绘图软件,非常适合新手进入编程的世界。
海龟绘图Turtle是Python内置模块,总之是非常简单好玩的一个库。
其动作主要有:抬笔,此后的动作只是移动画笔,画布上不会留下痕迹;落笔,只要移动画笔,画
布上就会留下痕迹。
画笔动作只绝对移动、相对移动、向前(后)移动、转向(绝对角度、相对角度)、圆或圆弧、点(实心
圆),故画不了椭圆,绘制函数曲线困难!
2)怎么玩转Turtle?当然在这里需要进入python编程环境,然后在这个python文件中就可以开始动手写有关turtle的代码。
Turtle是python安装时自带的内置模块,调用该模块非常简单,直接使用import方式加载:
importturtle或fromturtleimport*
这也是程序的第一行代码,用于准备好使用turtle这个模块。
3)画布的设置1.1设置画布大小
()-*-coding:UTF-8-*-"""源码基地:csdn账号:顾木子吖海龟迷宫闯关游戏"""importturtle导入随机数模块game_title='小海龟大迷宫闯关小游戏'关卡'''绘制地图用的全局变量'''txt_path='map/'迷宫通道的颜色R,C=0,0一个格子的尺寸area_sign={}地图列表'''海龟对象'''map_t=()设置绘图速度最快(地图绘制)sign_t=()自动走迷宫的海龟auto_(5)设置绘图速度最快(手动)auto_()手动走迷宫的海龟manual_(5)设置绘图速度最快(手动)manual_('turtle')隐藏手动走迷宫所用的海龟光标(手动)右(-1,0),上(0,-1)抬笔cx,cy=itoc((ci,ri))移动到指定位置auto_()设置海龟光标的形状auto_('red')显示海龟光标defc_move_to(t,ctuple):隐藏海龟光标()移动到坐标指定的位置()根据索引值计算每个正方形的起点(x坐标)ty=R*cell_size/2-ri*cell_size正方形中心的x坐标cy=ty-cell_size/2计算列索引ri=((R-1)*cell_size/2-cy)/cell_size返回行列索引的元组defget_map(filename):"""功能:读取保存地图的文本文件内容到列表:paramfilename:地图文件名:return:地图列表"""withopen(filename,'r')asf:读取全部行maze_list=[]将读取的内容以空格分割为二维列表line=()以空格进行分割为列表maze_(line_list)返回地图列表defdraw_square(ci,ri,colorsign):"""功能:绘制组成地图的小正方形:paramci:列索引:paramri:行索引:paramcolorsign:填充颜色:return:"""tx=ci*cell_size-C*cell_size/2根据索引值计算每个正方形的起点(y坐标)map_()移动到绘图起点(正方形的左上角)ifcolorsign=='1':红色值g=(150,180)指定颜色为随机生成的颜色else:map_(colorsign)落笔map__fill()绘制正方形map_(cell_size)map_(90)map__fill()隐藏海龟光标defdraw_map(mazelist):"""功能:遍历地图列表绘制迷宫地图:parammazelist:保存地图数据的列表:return:"""(0)全局变量,记录入口和出口索引位置forriinrange(R):遍历列item=mazelist[ri][ci]ifitemin['1']:绘制墙elifitem=="S":绘制通道draw_sign(ci-1,ri,'入口')保存入口索引elifitem=="E":绘制通道draw_sign(ci-1,ri,'出口')保存出口索引else:draw_square(ci,ri,road_color)显示动画效果defdraw_sign(ci,ri,word):"""功能:绘制入口和出口标记:paramci:列索引:paramri:行索引:paramword:标记文字内容:return:"""cx,cy=itoc((ci,ri))隐藏海龟光标sign_()移动到标记位置sign_('red')绘制标记文字defwin_tip():"""功能:制作过关提示:return:"""globallevelc_move_to(manual_t,(-150,0))manual_('blue')ifint(level)==3:manual_('\n恭喜您顺利通关!',font=('黑体',20,'bold'))(,key='Return')监听按下Enter键defmanual_move(d):"""功能:手动走迷宫时通用探索并移动函数:paramd:向不同方面走时索引的变化规则:return:"""dc,dr=d获取行列索引point=mazeList[rici[0]][rici[1]]通路manual_('red')mazeList[rici[0]][rici[1]]='将当前位置标记为已探索manual_(cell_size)39;:绘制和通道相同颜色的线,达到擦除痕迹的效果mazeList[rici[0]+dr][rici[1]-dc]='0'向前移动manual_('red')elifpoint=='E':朝上manual_(90)手动探索并移动defdown_move():设置海龟朝向manual_move(direction[3])朝左manual_(180)手动探索并移动defright_move():设置海龟朝向manual_move(direction[0])清除绘图auto_()清除绘图globalmazeList重新读取地图数据移动到入口位置manual_()设置画笔粗细为3像素manual_('red')让海龟屏幕(TurtleScreen)获得焦点manual_().onkeyrelease(up_move,'Up')按下向下方向键manual_().onkeyrelease(left_move,'Left')按下向右方向键defauto_path():"""功能:查看答案(自动走迷宫):return:"""globalmazeList重新读取地图数据manual_()清除绘图auto_()设置画笔粗细auto_(0)隐藏海龟光标find(mazeList)清空帮助start_r,start_c=0,0forriinrange(R):forciinrange(C):item=mazeList[ri][ci]ifitem=="S":start_r,start_c=ri,ciauto_()移动到出口returnTrueifnot(0=ciCand0=riR):39;]:34;尝试从不同方向探索是否为通路,如果发现一条通路,则不再继续探索dc,dr=d将索引变化规则的值分别赋值给dc和dr,其中dc为x轴方向,dr为y轴方向found=find_next(mlist,ci+dc,ri+dr)如果是通路则绘制线路draw_path(ci,ri)返回True,不再探索returnFalse自动绘制用"""功能:根据索引位置移动海龟(画线):paramci:列索引:paramri:行索引:paramcolor:画笔颜色:return:"""auto_()将索引位置转换为坐标位置auto_(color)auto_(cx,cy)deflevel_init():"""功能:关卡初始化游戏规则:按下F2键开始手动走迷宫;按下F1键查看答案按下↑↓←→方向键控制小海龟移动,闯关成功后,按Enter进入下一关:return:"""manual_()清除绘图()定义全局变量iflevel==1:第二关的地图文件和背景txt_path="map/"levelbg='image/'eliflevel==3:退出程序returnmazeList=get_map(txt_path)根据地图调整窗口尺寸(levelbg)如果想要手动绘制关卡数,可以使用下面的两行代码cmoveto(turtle,(1*cellsize-C*cellsize/2,R*cellsize/2+10))('关卡:'+str(int(level)),font=('宋体',16,'normal'))'''()绘制地图四、效果图1)运行代码
2)关卡一这是按住了F1所以才出现路线图的哦!
3)关卡二这是按住了F2所以是自己手动在闯关哈!
4)关卡三
总结好啦!今天这篇文章就写到这里结束,从简单的基础知识到最后的案例实战,你学废了嘛?
什么?没学废?快,乖乖的放下手机,再来一遍~
完整的免费源码领取处:私信小编06即可免费领取啦~往期游戏热门文章推荐:项目5.3《玛丽冒险小游戏》
Python动作冒险类游戏推荐:一款奔跑的玛丽冒险岛游戏、你能坚持几天丫?
项目1.0趣味反弹球游戏
趣味小游戏:这款反弹球游戏简单好玩,叫人欲罢不能……
项目1.1《全民飞机大战》
【Pygame实战】全新模式飞机大战:空中追逐战,讲个笑话,飞机大战是休闲手游。
项目1.0超级玛丽
程序员自制游戏:超级玛丽100%真实版,能把你玩哭了~【附源码】
项目1.1扫雷
Pygame实战:据说这是史上最难扫雷游戏,没有之一,你们感受下
文章汇总——项目1.0Python—2021|已有文章汇总|持续更新,直接看这篇就够了
(更多内容+源码都在文章汇总哦!!欢迎阅读~)
[免责声明]本文来源于网络,不代表本站立场,如转载内容涉及版权等问题,请联系我们会予以删除相关文章,保证您的权利。转载请注明出处






