Python语言程序设计--猫和老鼠小游戏

摘  要: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绘图要记住各个命令的使用,这是最基本的。但是想画好图还是需要逻辑思维的,编程思维真的很重要!

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无处安放的小曾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值