摘  要: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.1while 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_speedcat_speed += 0.1def slowdown():global cat_speedcat_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 = 3rats = []t.register_shape('rat.gif')for r in range(rats_number):rat = t.Turtle()rat.ht()  # hideturtlerat.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()  # showturtlerats.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绘图要记住各个命令的使用,这是最基本的。但是想画好图还是需要逻辑思维的,编程思维真的很重要!

Python语言程序设计--猫和老鼠小游戏相关推荐

  1. c语言程序设计猜拳小游戏答辩,C语言课程设计猜拳游戏.doc

    C语言程序设计 课程设计(论文) 题目: 院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 起止时间: 课程设计(报告)任务及评语 院(系):软件学院 教研室:软件教研窒 学 号学 ...

  2. python语言编写五子棋小游戏

    摘要 这是我基于pygame库做个一个五子棋小游戏,通过上网学习pygame库内的具体函数,以及一些前辈的指导.在这里我们需要绘画棋盘,棋子.棋盘直接调用pygame库中的draw.lines()函数 ...

  3. python语言程序设计王小银_《Python语言程序设计 王小银,王曙燕,孙家泽 编著 》【摘要 书评 试读】- 京东图书...

    权利声明: 京东上的所有商品信息.客户评价.商品咨询.网友讨论等内容,是京东重要的经营资源,未经许可,禁止非法转载使用. 注:本站商品信息均来自于合作方,其真实性.准确性和合法性由信息拥有者(合作方) ...

  4. lenpython执行结果_哪个选项是下面代码的执行结果? len ( Python 语言程序设计课程 )_学小易找答案...

    [填空题]构成地衣体的真菌绝大部分属于____亚门,少数为____亚门和____亚门的真菌. [单选题]给定字典 d ,哪个选项对 d.get(x, y) 的描述是正确的? [单选题]对于序列 s , ...

  5. c 语言500行小游戏代码,500行代码使用python写个微信小游戏飞机大战游戏.pdf

    500行行代代码码使使用用python写写个个微微信信小小游游戏戏飞飞机机大大战战游游戏戏 这篇文章主要介绍了500行代码使用python写个微信小游戏飞机大战游戏,本文通过实例代码给大家介绍的非常详 ...

  6. python从入门到精通 清华大学出版社-清华大学出版社-图书详情-《Python语言程序设计》...

    Python语言由荷兰人Guido van Rossum于1989年发明,1991年首次公开发行.Python语言经过二十多年的发展,已经广泛应用于计算机科学与技术.科学计算.数据的统计分析.移动终端 ...

  7. Python语言程序设计笔记(全)

    Python语言程序设计 源代码人类可理解 目标代码 计算机直接执行 文章目录 Python语言程序设计 1.编译与解释 2.编程语言分类 3.python语言简介 4. 下载配置python 5.编 ...

  8. 北理工嵩天Python语言程序设计笔记(10 Python计算生态概览)

    前言 本文是对<北理工 嵩天/黄天宇/礼欣 Python语言程序设计>的学习笔记,供自己查阅使用. 文章目录 北理工嵩天Python语言程序设计笔记(目录) 北理工嵩天Python语言程序 ...

  9. MOOC《Python语言程序设计》(第15次)Python计算生态概览(第九周)

    MOOC<Python语言程序设计>(第15次) Python计算生态概览(第九周)21.8.26 文章目录 MOOC<Python语言程序设计>(第15次) Python计算 ...

最新文章

  1. JAVA多线程中join()方法的详细分析
  2. 计算机课搞事情检讨,上微机课玩游戏检讨书
  3. linux 服务器账号及安全杂谈
  4. 有关CNN网络结构的总结
  5. Linux 文件与目录管理,玩转文件和目录管理的相关命令
  6. Java监听器Listener使用说明
  7. POJ 1716 Integer Intervals
  8. 25. PHP 文件处理
  9. 服务器虚拟化相关技术介绍,虚拟化技术介绍
  10. python内置函数用来返回序列中所有元素之和_Python内置函数——compile
  11. 关于preempt_enable 和 preempt_disable
  12. Unable to start program bug解决方法
  13. 关于如何构建数字资产量化的投资组合的思考
  14. JMETER解决测试结果乱码问题
  15. 记录一下自己的本本,DELL 640M铲掉XP,重装VISTA的过程
  16. linux下怎么安装打印驱动安装驱动程序,Linux下安装HP打印机的驱动程序
  17. linux amd显卡双屏,Ubuntu14.04安装AMD显卡驱动双屏显示器完全解决方案
  18. gcc 内联汇编用法介绍
  19. 如何将网盘空间映射为本地磁盘,可以看看这些方案
  20. 数字信号处理-9-离散余弦变换

热门文章

  1. 微信浏览器 rem 不适配的解决方案
  2. android长按home键流程
  3. HDMI EDID timing详细解析
  4. TC358779XBG,HDMI转MIPI DSI,支持全高清,东芝转接芯片
  5. 快速将PDF转换为图片:使用在线转换器的步骤
  6. Android储存 文件储存
  7. 关于计算机的合成新英语词,计算机英语专业词汇的构词法
  8. Unity Mesh(一) 初步使用Mesh画平面图形
  9. 蓝色——Love is Blue
  10. 2010年01期《程序员》配套源码及相关链接