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)。

相关推荐
倔强的石头1064 分钟前
【C++指南】类和对象(九):内部类
开发语言·c++
老大白菜5 分钟前
Python 爬虫技术指南
python
Watermelo6178 分钟前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
小奥超人15 分钟前
RAR压缩算法的文件修复功能详解
windows·经验分享·winrar·办公技巧
古希腊掌管学习的神1 小时前
[搜广推]王树森推荐系统——矩阵补充&最近邻查找
python·算法·机器学习·矩阵
半盏茶香1 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
Evand J2 小时前
LOS/NLOS环境建模与三维TOA定位,MATLAB仿真程序,可自定义锚点数量和轨迹点长度
开发语言·matlab
LucianaiB2 小时前
探索CSDN博客数据:使用Python爬虫技术
开发语言·爬虫·python
Ronin3052 小时前
11.vector的介绍及模拟实现
开发语言·c++
计算机学长大白3 小时前
C中设计不允许继承的类的实现方法是什么?
c语言·开发语言