摘 要:Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。此项目就是导入Turtle库来设计开发简单猫和老鼠小游戏,引入Random在游戏界面随机产生小老鼠并使小老鼠进行随机移动,引入Time进行游戏时间计时。游戏目标为通过移动猫,在最短的时间内将随机移动的小老鼠全部抓获。
源码地址:https://download.csdn.net/download/m0_51152186/85687397
1.画布(canvas)
画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。
设置画布大小
turtle.screensize(canvwidth=None,canvheight=None,bg=None),参数分别为画布的宽(单位像素),高,背景颜色。
如:turtle.screensize(800,600,"green")
turtle.screensize()#返回默认大小(400,300)
turtle.setup(width=0.5,height=0.75,startx=None,starty=None),参数:width,height:输入宽和高为整数时,表示像素;为小数时,表示占据电脑屏幕的比例,(startx,starty):这一坐标表示矩形窗口左上角顶点的位置,如果为空,则窗口位于屏幕中心。
如:turtle.setup(width=0.6,height=0.6)
turtle.setup(width=800,height=800,startx=100,starty=100)
2.画笔
2.1画笔的状态
在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向),turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。
2.2画笔的属性
画笔(画笔的属性,颜色、画线的宽度等)
1)turtle.pensize():设置画笔的宽度;
2)turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如"green","red",也可以是RGB3元组。
3)turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。
2.3绘图命令
操纵海龟绘图有着许多的命令,这些命令可以划分为3种:一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令。
3.命令详解
3.1turtle.circle(radius,extent=None,steps=None)
描述:以给定半径画圆
参数:
radius(半径):半径为正(负),表示圆心在画笔的左边(右边)画圆;
extent(弧度)(optional);
steps(optional)(做半径为radius的圆的内切正多边形,多边形边数为steps)。
举例:
circle(50)#整圆;
circle(50,steps=3)#三角形;
circle(120,180)#半圆
关键词: Python;Turtle;Random;Time;猫和老鼠
第1章 项目说明
1.1项目内容
1.1.1目的与意义
选择这个拼图游戏作为课题,一方面是想学习和掌握Turtle库的课外知识,另一方面可增加学习的趣味性和培养对此课程的兴趣。Turtle库是python的基础绘图库,其主要是用于程序设计入门,是标准库之一,但turtle的功能十分,利用turtle可以制作很多复杂的绘图。希望通过这次的游戏设计,使得我可以了解Turtle库。
1.1.2项目功能
1)游戏界面的创建
2)猫的创建与移动
3)老鼠的随机创建与随机移动
4)抓老鼠的实现
5)键盘输入的监听
6)游戏计时功能
7)游戏结束提示与成绩显示
1.1.3开发环境
开发系统:Windows 10
开发工具:JetBrains PyCharm
编程语言:Python
Python版本:3.7
相关库:Turtle、Random、Time
1.1.4项目针对用户
任何年龄段想通过玩休闲小游戏解压的人。
1.2 项目背景
到了2000年,网络游戏问世并且很快流行起来我国的游戏行业才又渐渐的复苏,但是由于投入差距太大,起步晚等原因与外国游戏相对而言并没有竞争力。但如今,网络游戏走入盛世,成为一部分人休闲娱乐的主要行为。国产游戏渐渐走入国际市场,而且基于网络的发展真正实现了网络全球化。而猫和老鼠小游戏是家喻户晓的休闲类小游戏,不管是哪个年龄段都有它的爱好者,随着社会的发展,生活节奏越来越快,人们的压力也越来越大,通过玩休闲类游戏解压,成为忙碌的都市人们的不二选择。猫和老鼠小游戏就是其中很有代表性的一种,它可以使人在休闲娱乐的同时锻炼思维、观察力。
第2章 需求分析
2.1程序详细功能需求
1)游戏界面的创建
2)猫的创建与移动
3)老鼠的随机创建与随机移动
4)抓老鼠的实现
5)游戏计时功能
6)游戏结束提示与成绩显示
2.2程序功能分析
2.2.1游戏界面的创立
程序通过Turtle库创建一个游戏界面,并设置其大小、刷新时间以及背景。
2.2.2猫的创建与移动
程序通过Turtle库创建猫,并设置其大小颜色,然后可以通过键盘方向键输入控制猫向左向右转向以及加速与减速。
2.2.3老鼠的随机创建与随机移动
程序通过Turtle库创建老鼠,使其随机出现在界面中,并随机移动。 2.2.4抓老鼠的实现
通过猫与老鼠的距离判定,当猫与老鼠距离少于50时,即判定为抓到老鼠,老鼠被抓到后就从界面上消失。
2.2.5游戏计时功能
游戏开始时开始对游戏的计时,当游戏结束时结束计时,时间通过Turtle库在界面上显示。
2.2.6游戏结束提示与成绩显示
当界面老鼠数量为0时,提示游戏结束并显示所用时间。
第3章 设计文档
3.1流程图
图3.1 猫和老鼠游戏流程图
3.2创建游戏界面
调用Turtle库里的Screen()函数创建游戏界面,再调用mainloop()函数使维持界面不关闭。调用tracer()降低刷新率,减少游戏卡顿感。
# 创建背景
game = t.Screen()
game.setup(700, 700)
game.bgpic('bg.gif')
t.tracer(3)
game.mainloop()
3.3猫的创建与移动
3.3.1猫的创建
用turtle创建猫,调用cat.speed(0)使猫的创建以及降低接下来的转向与加减速的延迟。
# 创建猫咪
cat = t.Turtle()
cat.color('yellow')
cat.shapesize(3, 3)
cat.speed(0)
cat.up()
3.3.2猫的移动
1)调用fd()函数让猫前进,通过x、y判定使猫触碰边界时调用left()函数掉头。
2)定义函数move_left() 控制猫向左转向
3)定义函数move_ringt() 控制猫向右转向
4)定义函数speedup() 控制猫加速
5)定义函数slowdown() 控制猫减速
cat_speed = 0.1
while True:
update_time()
cat.fd(cat_speed)
x = cat.xcor()
y = cat.ycor()
if x > 350 or x < -350 or y < -350 or y > 350:
cat.left(180)
def move_left():
cat.left(30)
def move_right():
cat.right(30)
def speedup():
global cat_speed
cat_speed += 0.1
def slowdown():
global cat_speed
cat_speed -= 0.1
3.3.3键盘事件监听
调用listen()函数监听键盘事件,并调用onkey()函数绑定对应加减速与转向键位。
代码:
t.listen()
t.onkey(move_left, 'Left')
t.onkey(move_right, 'Right')
t.onkey(speedup, 'Up')
t.onkey(slowdown, 'Down')
3.4老鼠的随机创建与随机移动
循环用Turtle库创建多只老鼠,调用random库使每只老鼠出现在随机位置并使其向随机方向移动。调用rat.speed(0)减少每只老鼠创建间隔,使其如同同时创建般。
代码:
# 创建小老鼠
rats_number = 3
rats = []
t.register_shape('rat.gif')
for r in range(rats_number):
rat = t.Turtle()
rat.ht() # hideturtle
rat.up()
rat.speed(0)
rat.left(random.randint(0, 360))
rat.shape('rat.gif')
x = random.randint(-300, 300)
y = random.randint(-300, 300)
rat.setpos(x, y)
rat.st() # showturtle
rats.append(rat)
# 小老鼠动起来
for rat in rats:
rat.fd(0.1)
catch(rat)
x = rat.xcor()
y = rat.ycor()
if x > 300 or x < -300 or y < -300 or y > 300:
rat.left(180)
3.5抓老鼠的实现
定义catch(rat)函数 判定抓到使老鼠消失。
代码:
def catch(rat):
if cat.distance(rat) < 50:
rat.ht()
rats.remove(rat)
3.6游戏计时功能
定义update_time()函数调用time()库对游戏时间进行计时,并调用turtle库显示在界面上。
#加上计时
pen = t.Turtle()
pen.ht()
pen.up()
pen.setpos(240, 320)
pen.color('red')
pen.write("计时 ", align="left", font=('Arial', 18, 'bold'))
pen2 = t.Turtle()
pen2.ht()
pen2.up()
pen2.setpos(300, 320)
pen2.color('red')
def update_time():
global used_time
now_used_time = int(time.time() - start_time)
if now_used_time > used_time:
used_time = now_used_time
time_str = str(used_time)
pen2.clear()
pen2.write(time_str, align="left", font=('Arial', 18, 'bold'))
3.7游戏结束与成绩提示
判定len(rats)为0时,通过turtle库提示游戏结束与成绩。
# 判断游戏结束
if len(rats) == 0:
pen3 = t.Turtle()
pen3.ht()
pen3.up()
pen3.setpos(-150, 0)
pen3.color('red')
over_str = "游戏结束,用时" + str(used_time) + "秒"
pen3.write(over_str, align="left", font=('Arial', 25, 'bold'))
break;
第4章 项目实现
4.1游戏界面
图4.1游戏界面运行截图
4.2游戏结束与成绩提示
图4.2游戏结束与成绩提醒运行截图
第5章 总结
通过本次实验,我学习了Turtle模块的一些基础知识,并结合自己喜欢的素材制作了一个简单的猫和老鼠游戏,激发了对此门课程的兴趣。作为python的基础绘图库,有着无比的先天优势,大量的强大的绘图功能,可以大大的加快开发者的开发速度。更为重要的一点,作为开源语言Python的扩展库,其开源的特性使得这个Turtle库不断的在壮大,更多功能被程序员开发出来,这些不断推陈出新的技术支持,使得Turtle开发的游戏也会越发的完美,开发出的游戏的可玩性也会越来越好。与此同时,我还进一步了解了random和time两个库。random模块实现了各种分布的伪随机数生成器,他可以返回随机生成的一个实数,从而我可以实现让老鼠在随机位置产生以及随机方向移动。Time模块可以用于格式化日期和时间,提供各种与时间相关的函数,通过调用time模块中的函数可以实现游戏计时。总而之python是一门非常好的语言,它简洁灵活,易学,易读,可移植并且功能强大,为我们提供了很多解决问题的模块。python的学习,从无到有,真的是一点一点学习过来的,以前没有任何编程经验,所以这个课程对我来说真的是挺有难度,但真正学习下来,也感觉非常有收获。python最后一个实验想选做对自己难度较大的项目,不仅是对自身的挑战,也是对知识学习的检验,对一个文科生来说,真的需要投入大量的精力并且得翻看资料,学习视频,才能勉强做出来,这个小游戏还是简略版本,很多方面都没有进行优化,希望以后能够慢慢进步,而不只是局限于课内的实验。总结:用turtle绘图要记住各个命令的使用,这是最基本的。但是想画好图还是需要逻辑思维的,编程思维真的很重要!