当前位置: 首页 > news >正文

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

最近闲(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 boxsizeif 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 boxsizeif 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)。

相关文章:

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

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

万里路,咫尺间:汽车与芯片的智能之遇

目前阶段&#xff0c;汽车产业有两个最闪耀的关键词&#xff0c;就是智能与低碳。 在践行双碳目标与产业智能化的大背景下&#xff0c;汽车已经成为了能源技术、交通技术、先进制造以及通信、数字化、智能化技术的融合体。汽车的产品形态与产业生态都在发生着前所未有的巨大变革…...

Ubuntu22.04.1上 mosquitto安装及mosquitto-auth-plug 认证插件配置

Ubuntu22.04.1上 mosquitto安装及mosquitto-auth-plug 认证插件配置 1、先上效果&#xff0c;可以根据mysql中mosquitto数据库的不同users角色登陆mosquitto&#xff1a; SELECT * FROM mosquitto.users; id,username,pw,super 1,jjolie,PBKDF2$sha256$901$yZnELWKK4NnaNNJl…...

CCKS2023:基于企业数仓和大语言模型构建面向场景的智能应用

8月24日-27日&#xff0c;第十七届全国知识图谱与语义计算大会&#xff08;CCKS 2023&#xff09;在沈阳召开。大会以“知识图谱赋能通用AI”为主题&#xff0c;探讨知识图谱对通用AI技术的支撑能力&#xff0c;探索知识图谱在跨平台、跨领域等AI任务中的作用和应用途径。 作为…...

LeetCode 热题 100——无重复字符的最长子串(滑动窗口)

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 从s字符串中&#xff0c;去找出连续的子串&#xff0c;使该子串中没有重复字符&#xff0c;返回它的最长长度。 暴力枚举 依次以第一个、第二个、第三个等等为起点去遍历字符串&a…...

【zookeeper】zookeeper的shell操作

Zookeeper的shell操作 本章节将分享一些zookeeper客服端的一些命令&#xff0c;实验操作有助于理解zookeeper的数据结构。 Zookeeper命令工具 在前一章的基础上&#xff0c;在启动Zookeeper服务之后&#xff0c;输入以下命令&#xff0c;连接到Zookeeper服务。连接成功之后&…...

R语言Meta分析核心技术

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…...

Oracle数据库尚硅谷学习笔记

文章目录 Oracle数据库体系结构简介补充SQL初步导入sql文件别名连接符distinct去重的坑 过滤和排序数据日期格式比较运算其它比较运算符逻辑运算优先级排序 单行函数SQL中不同类型的函数单行函数字符数值日期转换通用 使用条件表达式嵌套查询 多表查询等值连接非等值连接左外连…...

CG MAGIC进行实体渲染后!分析渲染器CR和VR的区别之处!

新手小白来说&#xff0c;如何选择渲染器&#xff0c;都会提出疑问&#xff1f; 渲染效果图究竟用CR渲染器还是VR渲染器呢&#xff1f; 今天&#xff0c;CG MAGIC小编通过一个真实的项目场景&#xff0c;实例渲染之后&#xff0c;CR渲染器和VR渲染器区别有哪几点&#xff1f; 1…...

Ubuntu下Python3与Python2相互切换

参考文章&#xff1a;https://blog.csdn.net/Nicolas_shen/article/details/124144931 设置优先级 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 200...

【深度学习】实验07 使用TensorFlow完成逻辑回归

文章目录 使用TensorFlow完成逻辑回归1. 环境设定2. 数据读取3. 准备好placeholder4. 准备好参数/权重5. 计算多分类softmax的loss function6. 准备好optimizer7. 在session里执行graph里定义的运算 附&#xff1a;系列文章 使用TensorFlow完成逻辑回归 TensorFlow是一种开源的…...

2023-09-04 Linux 让shell编译脚本里面设置的环境变量改变kernel里面驱动文件的宏定义值方法,我这里用来做修改固件版本

一、原生的读取版本接口是/proc/version&#xff0c;我这里需要提供获取固件版本号的api给app&#xff0c;因为版本号会经常需要修改&#xff0c;如果每次都到kernel下修改比较麻烦&#xff0c;我这里是想在编译脚本里面对版本号进行修改&#xff0c;这样方便一点。 二、主要修…...

Python操作Excel实战:Excel行转列

# 1、原始数据准备 样例数据准备 地区1m2-5m6-10m11-20m21-40m地区单价计费单位费用最小值费用最大值北京13012011010090     天津13012011010090     石家庄13012011010090     保定140130120110100     张家口170150130120110     邢台1401201101…...

java实现迭代器模式

迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供一种方法来顺序访问一个聚合对象&#xff08;如列表、集合、数组等&#xff09;中的元素&#xff0c;而不暴露聚合对象的内部表示。迭代器模式通常包括以下角色&#xff1a;迭代器&a…...

C++day7模板、异常、auto关键字、lambda表达式、数据类型转换、STL、list、文件操作

作业 封装一个学生的类&#xff0c;定义一个学生这样类的vector容器, 里面存放学生对象&#xff08;至少3个&#xff09; 再把该容器中的对象&#xff0c;保存到文件中。 再把这些学生从文件中读取出来&#xff0c;放入另一个容器中并且遍历输出该容器里的学生。 #include …...

【校招VIP】产品分析之活动策划宣传

考点介绍&#xff1a; 产品的上线运营是非常重要的。应该来说好的产品都是运营出来的&#xff0c;在一运营过程中难免会依靠策划活动来提高产品知名度、用户数。用户粘度等等指标一&#xff0c;如何策划一个成功的活动就显得非常重要。 产品分析之活动策划宣传-相关题目及解析…...

node基础之一:fs 模块

概念&#xff1a;文件的创建、删除、重命名、移动、写入、读取等 const fs require("fs");// 写入 fs.writeFile("./demo.txt", "hello", (err) > {}); fs.writeFileSync();// 追加 fs.appendFile("./demo.txt", "hello&quo…...

如何快速搭建母婴行业的微信小程序?

如果你想为你的母婴行业打造一个独特的小程序&#xff0c;但没有任何编程经验&#xff0c;别担心&#xff01;现在有许多小程序制作平台提供了简单易用的工具&#xff0c;让你可以轻松地建立自己的小程序。接下来&#xff0c;我将为你详细介绍搭建母婴行业小程序的步骤。 首先&…...

【科普向】Jmeter 如何测试接口保姆式教程

现在对测试人员的要求越来越高&#xff0c;不仅仅要做好功能测试&#xff0c;对接口测试的需求也越来越多&#xff01;所以也越来越多的同学问&#xff0c;怎样才能做好接口测试&#xff1f; 要真正的做好接口测试&#xff0c;并且弄懂如何测试接口&#xff0c;需要从如下几个…...

阿里云2核4G服务器5M带宽5年费用价格明细表

阿里云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS&#xff0c;轻量2核4G4M带宽服务器297元一年&#xff0c;2核4G云服务器ECS可以选择计算型c7、c6或通用算力型u1实例等&#xff0c;买5年可以享受3折优惠&#xff0c;阿腾云分享阿里云服务器2核4G5M带宽五年费用表&…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...