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

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

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

1.导入相关模块

python">import time
import turtle

2.制作游戏整体窗口

python">window = turtle.Screen()

 3.绘制猫与老鼠

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

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

python"># 老鼠前进 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.设置一个边界,防止老鼠离开游戏窗口

python"># 窗口可用范围为 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.手动结束游戏与难度控制

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

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

 7.游戏开始

python"># 是否被抓住:默认未被抓住
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.结束游戏及得分

python">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.完整代码

python">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.niftyadmin.cn/n/4995991.html

相关文章

IntelliJ IDEA的远程开发(Remote Development)

DEA的远程开发功能&#xff0c;可以将本地的编译、构建、调试、运行等工作都放在远程服务器上执行&#xff0c;而本地仅运行客户端软件进行常规的开发操作即可&#xff0c;官方给出的逻辑图如下&#xff0c;可见通过本地的IDE和服务器上的IDE backend将本地电脑和服务器打通&am…

AUTOSAR从入门到精通-【应用篇】基于AUTOSAR的AT自动变速器控制系统故障诊断(续)

目录 3.2设备状态监测技术 3.2.1 AUTOSAR体系架构 3.2.2 AUTOSAR通信协议栈 3.3基于AUTOSAR的状态监测系统

Python模块之logging和colorlog

使用logging和colorlog实现日志记录可以方便地记录程序的运行情况&#xff0c;方便调试和分析问题。下面将详细说明如何使用logging和colorlog&#xff0c;并提供相应的代码示例。 1. 安装colorlog模块 首先需要安装colorlog模块。可以通过pip命令进行安装&#xff1a; pip …

vue cli构建的项目出现 Uncaught runtime errors

使用 vue/cli 脚手架构建的项目&#xff0c;在 npm run dev 运行后&#xff0c;页面出现 Uncaught runtime errors 报错遮罩层&#xff0c;如下图所示。 报错原因 这种错误通常是运行时出的问题&#xff0c;可能是网络错误&#xff0c;可能是变量未定义等等。 这种错误默认在开…

【Redis从头学-完结】Redis全景思维导图一览!耗时半个月专为Redis初学者打造!

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…

Android 大图显示优化方案-加载Gif 自定义解码器

基于Glide做了图片显示的优化&#xff0c;尤其是加载Gif图的优化&#xff0c;原生Glide加载Gif图性能较低。在原生基础上做了自定义解码器的优化&#xff0c;提升Glide性能 Glide加载大图和Gif 尤其是列表存在gif时&#xff0c;会有明显卡顿&#xff0c;cpu和内存占用较高&…

算法训练营第四十一天(9.2)| 动态规划Part11:最长公共子序列

Leecode 1143.最长公共子序列 题目地址&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目类型&#xff1a;最长子序列 class Solution { public:int longestCommonSubsequence(string text1, string text2) {int m text1.size(), n t…

深度学习(十)--- cv2.pointPolygonTest() 判断一点是否在指定区域内

今天发现了opencv一个好用的函数 cv2.pointPolygonTest() &#xff0c;它可以判断一个点是否在指定区域内。 1. cv2.pointPolygonTest() 函数解析 dist cv2.pointPolygonTest(contour,point,Boolean)contour: 多边形轮廓 point: 坐标点 Boolean:True或False &#xff0c;Tru…