Python|小游戏之猫捉老鼠!!!

news2025/6/28 14:12:24

最近闲(mang)来(dao)无(fei)事(qi),喜欢研究一些小游戏,本篇文章我主要介绍使用 turtle 写的一个很简单的猫捉老鼠的小游戏,主要是通过鼠标控制老鼠(Tom)的移动,躲避通过电脑控制的猫(Jerry)的追捕。

游戏主体思考逻辑:输入1-5的数字选择难度,使用方向键盘控制老鼠的方向及移动,让它不要被猫抓住,最后被猫抓住时游戏结束,结束时会弹出得分。

1.导入相关模块

import time
import turtle

2.制作游戏整体窗口

window = turtle.Screen()

 3.绘制猫与老鼠

# 猫 系统默认的黑色
cat = turtle.Turtle()
# 老鼠 红色
mouse = turtle.Turtle()
mouse.color('red')
# 将老鼠的画笔提起,使不会出现轨迹
mouse.penup()    
# 老鼠的初始地址放置在坐标(150,150)               
mouse.goto(150, 150)

 4.通过方向键盘控制老虎旋转方向及移动

# 老鼠前进 30 像素
def up():
    mouse.forward(30)
# 老鼠左转 45 度
def left():
    mouse.left(45)
# 老鼠右转 45 度
def right():
    mouse.right(45)
# 老鼠后退 30 像素
def back():
    mouse.backward(30)
    
# 按动方向键 Up 则执行函数up ...
window.onkeypress(up, "Up")     
window.onkeypress(left, "Left")
window.onkeypress(right, "Right")
window.onkeypress(back, "Down")

 5.设置一个边界,防止老鼠离开游戏窗口

# 窗口可用范围为 300x300 像素
boxsize = 300
# 检测老鼠是否跑过界,如再前进便过界,让老鼠卡在边界处
def checkbound():
    global boxsize
    if mouse.xcor() > boxsize:
        mouse.goto(boxsize, mouse.ycor())
    if mouse.xcor() < -boxsize:
        mouse.goto(-boxsize, mouse.ycor())
    if mouse.ycor() > boxsize:
        mouse.goto(mouse.xcor(), boxsize)
    if mouse.ycor() < -boxsize:
        mouse.goto(mouse.xcor(), -boxsize)
# 老鼠前进 30 像素
def up():
    mouse.forward(30)
    checkbound()
# 老鼠后退 30 像素
def back():
    mouse.backward(30)
    checkbound()

 6.手动结束游戏与难度控制

# 结束游戏
def quitTurtle():
    window.bye()
# 空格键结束游戏
window.onkeypress(quitTurtle, "Escape")

# 产生一个输入难度的对话框
difficulty = window.numinput("难度", "请输入游戏的难度(1~5)", minval=1, maxval=5)
# 窗体监听按键
window.listen()

 7.游戏开始

# 是否被抓住:默认未被抓住
caught = False
# 游戏开始
while not caught:
    # 猫调整自己方向,使自己正对老鼠
    cat.setheading(cat.towards(mouse))   
    # 猫前进
    cat.forward(8+difficulty)
    # 老鼠与猫的距离小于 5 个像素就输了
    if cat.distance(mouse) < 5:            
        caught = True
    # 难度越高,运行速度越快
    time.sleep(0.2-(0.01*difficulty))

 8.结束游戏及得分

score = 0
# 游戏开始
while not caught:
    # 猫调整自己方向,使自己正对老鼠
    cat.setheading(cat.towards(mouse))   
    # 猫前进
    cat.forward(8+difficulty)
    # 分数增加
    score += 1
    # 老鼠与猫的距离小于 5 个像素就输了
    if cat.distance(mouse) < 5:            
        caught = True
    # 难度越高,运行速度越快
    time.sleep(0.2-(0.01*difficulty)) 
# 游戏结束及得分
window.textinput("GAME OVER", "游戏得分:"+str(score*difficulty))
window.bye()

 9.完整代码

import time
import turtle

# 一些常量
# 窗口可用范围为 300x300 像素
boxsize = 300
# 是否被抓住:默认未被抓住
caught = False
score = 0

# 老鼠前进 30 像素
def up():
    mouse.forward(30)
    checkbound()
# 老鼠左转 45 度
def left():
    mouse.left(45)
# 老鼠右转 45 度
def right():
    mouse.right(45)
# 老鼠后退 30 像素
def back():
    mouse.backward(30)
    checkbound()
    
# 检测老鼠是否跑过界,如再前进便过界,让老鼠卡在边界处
def checkbound():
    global boxsize
    if mouse.xcor() > boxsize:
        mouse.goto(boxsize, mouse.ycor())
    if mouse.xcor() < -boxsize:
        mouse.goto(-boxsize, mouse.ycor())
    if mouse.ycor() > boxsize:
        mouse.goto(mouse.xcor(), boxsize)
    if mouse.ycor() < -boxsize:
        mouse.goto(mouse.xcor(), -boxsize)

# 结束游戏
def quitTurtle():
    window.bye()

window = turtle.Screen()
# 猫 系统默认的黑色
cat = turtle.Turtle()
# 老鼠 红色
mouse = turtle.Turtle()
mouse.color('red')
# 将老鼠的画笔提起,使不会出现轨迹
mouse.penup()    
# 老鼠的初始地址放置在坐标(150,150)               
mouse.goto(150, 150)

# 按动方向键 Up 则执行函数up ...
window.onkeypress(up, "Up")     
window.onkeypress(left, "Left")
window.onkeypress(right, "Right")
window.onkeypress(back, "Down")
# 空格键结束游戏
window.onkeypress(quitTurtle, "Escape")

# 产生一个输入难度的对话框
difficulty = window.numinput("难度", "请输入游戏的难度(1~5)", minval=1, maxval=5)
# 窗体监听按键
window.listen()

# 游戏开始
while not caught:
    # 猫调整自己方向,使自己正对老鼠
    cat.setheading(cat.towards(mouse))   
    # 猫前进
    cat.forward(8+difficulty)
    # 分数增加
    score += 1
    # 老鼠与猫的距离小于 5 个像素就输了
    if cat.distance(mouse) < 5:            
        caught = True
    # 难度越高,运行速度越快
    time.sleep(0.2-(0.01*difficulty)) 
# 游戏结束及得分
window.textinput("GAME OVER", "游戏得分:"+str(score*difficulty))
window.bye()

以上就是简单的猫捉老鼠的小游戏,总计代码不过60多行,感兴趣的各位可以动手试(wan)一(yi)试(xia)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/965353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

良品铺子聚焦高品质,打造零食王国

出品| 大力财经 文 | 魏力 8月29日&#xff0c;休闲食品企业良品铺子发布2023年半年报显示&#xff0c;实现营业收入39.87亿元&#xff0c;归母净利润1.89亿元。 值得注意的是&#xff0c;在全球经济增速不强的背景下&#xff0c;良品铺子上半年&#xff0c;新开店323家&#…

孙哥Spring源码第15集

第15集 BeanPostProcessor、BeanFactroyPostProcessor 【视频来源于&#xff1a;B站up主孙帅suns Spring源码视频】 1、Spring预先给我们提供的PostProcessor的有哪些 是怎么来的&#xff1f; 2、Spirng中非常重要的扩展点 BeanPostProcessor 和BeanFactoryPostProcesor Aut…

IA-SEG项目中DIAL-Filters(IAPM模块+LGF模块)使用解读

IA-SEG项目源自论文Improving Nighttime Driving-Scene Segmentation via Dual Image-adaptive Learnable Filters&#xff0c;其核心就是在原有的语义分割模型上添加了DIAL-Filters。而&#xff0c;DIAL-Filters由两部分组成&#xff0c;包括一个图像自适应处理模块&#xff0…

正运动携手EPLAN,以高效的电气设计助力运动控制的数字化设计

随着智能制造行业的快速发展&#xff0c;仪器仪表自动化的需求也越来越高。为了提高生产效率&#xff0c;降低成本&#xff0c;许多企业开始寻找一种集成电气、控制和数据管理的解决方案。 正运动技术作为国内领先的的运动控制和数字化解决方案供应商&#xff0c;已经来到前沿…

【Spring专题】Spring之事务底层源码解析

目录 特别声明前置知识Transactional简单介绍*Spring事务传播类型&#xff08;非常重要&#xff09;Transactional使用示例分析示例一&#xff1a;常用示例二&#xff1a;发生异常回滚示例三&#xff1a;try-catch【经典】示例四&#xff1a;REQUIRES_NEW&#xff0c;没有捕获异…

VS2019编译curl库

下载&#xff1a; curl-7.61.0.tar.gz 编译&#xff1a; 解压到一个文件下&#xff0c;然后右键以管理员权限运行buildconf.bat 编译x64的库使用的是x64 Native Tools Command Prompt for VS 2019 本机工具命令提示&#xff0c;如果想编译x86的库&#xff0c;可以选择x86 Nat…

2019CVPR Semantic Graph Convolutional Networks for 3D Human Pose Regression

基于语义图卷积网络的三维人体姿态回归 源码 https://github.com/garyzhao/SemGCN 摘要 在本文中&#xff0c;我们研究了学习图卷积网络&#xff08;GCN&#xff09;回归的问题。GCN的当前体系结构受限于卷积滤波器和共享的变换矩阵为的小感受野。为了解决这些限制&#xff…

逆向工程-架构真题(二十)

结构化程序设计采用自顶向下、逐步求精及模块化程序设计方法&#xff0c;通过&#xff08;&#xff09;三种基本控制结构可以构造出任何单入口单出口程序。 顺序、选择和嵌套顺序、分支和循环分支、并发和循环跳转、选择和并发 答案&#xff1a;B 解析&#xff1a; 结构化设…

Ubuntu学习---跟着绍发学linux课程记录(第二部分)

文章目录 7 文件权限7.1 文件的权限7.2 修改文件权限7.3 修改文件的属主 8、可执行脚本8.2Shell脚本8.3python脚本的创建 学习链接: Ubuntu 21.04乌班图 Linux使用教程_60集Linux课程 所有资料在 http://afanihao.cn/java 我自己的ubuntu系统 账号&#xff1a;jiaoyidi 密码&a…

Nginx的配置及优化2

nginx的配置文件 一、nginx配置文件1.1、主配置文件详解1.2、子配置文件 二、修改启动程序的全局配置2.1、修改启动的工作进程数优化2.2、cpu与eorker process绑定优化2.3、PID路径优化2.4、修改工作进程的优先级 优化2.5、调试工作进程打开文件的文件个数2.5.1、基本原理2.5.2…

LPDDR4、DDR4

核心信息&#xff1a; 2400Mbps&#xff08;每秒传输2400*1百万bit&#xff09; 2400MT/s&#xff08;百万次/秒&#xff09; 信号

leetcode - 360周赛

一&#xff0c;2833. 距离原点最远的点 这道题的意思是&#xff0c;遇到 "L" 向左走&#xff0c;遇到 "R" 向右走&#xff0c;遇到 "_" 左右都可以走&#xff0c;那么要想找到距离原点最远的点&#xff0c;就是在找 | "L" "R&qu…

Kafka知识点总结

常见名词 生产者和消费者 同一个消费组下的消费者订阅同一个topic时&#xff0c;只能有一个消费者收到消息 要想让订阅同一个topic的消费者都能收到信息&#xff0c;需将它们放到不同的组中 分区机制 启动方法 生成者和消费者监听客户端

OpenCV C++案例实战三十三《缺陷检测》

OpenCV C案例实战三十三《缺陷检测》 前言一、结果演示二、缺陷检测算法2.1、多元模板图像2.2、训练差异模型 三、图像配准3.1 功能源码3.1 功能效果 四、多元模板图像4.1 功能源码 五、缺陷检测5.1 功能源码 六、效果演示总结 前言 本案例将使用OpenCV C 进行PCB印刷缺陷检测…

c++二叉树遍历

目录 二叉树节点结构&#xff1a; 1.1 前序遍历&#xff08;Preorder Traversal&#xff09;&#xff1a; 递归实现&#xff08;preorderRecursive函数&#xff09;&#xff1a;首先访问当前节点&#xff0c;然后递归遍历左子树&#xff0c;最后递归遍历右子树。这种遍历方式…

【Mycat 2】详解分库分表设计方案及实操测试(二)

文章目录 4. 分表、不分实例、不分库4.1 数据分片映射关系4.2 测试过程5. 分实例、分表、不分库5.1 分库键和分表键相同5.1.1 数据分片映射关系5.1.2 测试过程5.2 分库键和分表键不相同5.2.1 数据分片映射关系5.2.2 测试过程6. 不分片6.1 普通表6.1.1 数据映射关系6.1.2 测试过…

Java智慧工地信息化管理平台源码,依托计算机信息、网络通讯、物联网、系统集成及云计算技术建立

Java智慧工地源码 智慧工地APP源码 系统定义&#xff1a; 智慧工地信息化管理平台是依托计算机信息、网络通讯、物联网、系统集成及云计算技术&#xff0c;通过数据采集、信息动态交互、智能分析&#xff0c;建立起来的一套集成的项目建设综合管理系统。实现项目管理信息化、网…

自定义TimeLine实现卡拉OK轨

系列文章目录 自定义TimeLine 自定义TimeLine 系列文章目录前言正文UI部分代码部分Data&#xff08;数据&#xff09;Clip&#xff08;片段&#xff09;Track&#xff08;轨道&#xff09;Mixer&#xff08;混合&#xff09;被控制物体 总结 前言 自定义TimeLine实际上就是自定…

搭建STM32F407的Freertos系统(基于STM32CubeMX)

本人长期开发Linux、Windows上应用软件&#xff0c;一直以来MCU开发有所接触&#xff0c;但较少&#xff08;最近项目需要&#xff0c;小公司么&#xff0c;都得会&#xff0c;被逼的&#xff09;&#xff0c;好在有STM32CubeMX这样工具&#xff0c;貌似就是我想要的工具。 本次…

C++ sizeof求类型大小

注意内存对齐 struct Stu {int id;char sex;float hight; }; cout<<sizeof(Stu)<<endl; 会输出什么&#xff1f; 字节对齐原则:在系统默认的对齐方式下&#xff1a;每个成员相对于这个结构体变量地址的偏移量正好是该成员类型所占字节的整数倍&#xff0c;且最终…