1. 简介
猫捉老鼠是一款非常经典的小游戏,也是很多学习编程的人喜欢使用的一个练手项目。在这个游戏中,玩家需要操纵猫去追逐老鼠,而老鼠则需要躲避猫的追击。那么,利用Python如何实现这个小游戏呢?接下来的文章将带大家逐步实现。
2. 准备工作
2.1 安装pygame库
在Python中实现游戏要用到pygame库,因此需要先安装。以下是在Windows系统下安装pygame库的方法:
pip install pygame
2.2 下载素材
为了让游戏更加生动,我们需要一些图片素材。本文使用的图片素材如下:
将这两个图片文件下载到本地,准备好开始编写游戏界面。
3. 实现游戏界面
首先,需要导入pygame库,并初始化。接下来,创建一个游戏窗口并设置标题、大小和背景颜色:
import pygame
# 初始化pygame
pygame.init()
# 设置窗口标题和大小
pygame.display.set_caption('猫捉老鼠')
screen = pygame.display.set_mode((700, 550))
# 设置背景颜色
background_color = (96, 96, 96)
screen.fill(background_color)
# 刷新屏幕
pygame.display.flip()
运行代码,可以看到一个灰色的窗口。
接下来,让我们把猫和老鼠加入到游戏窗口中。
# 载入猫和老鼠图片
cat = pygame.image.load('cat.png')
cat = pygame.transform.scale(cat, (100, 100))
mouse = pygame.image.load('mouse.png')
mouse = pygame.transform.scale(mouse, (100, 100))
# 将猫和老鼠放在窗口中央
cat_rect = cat.get_rect()
cat_rect.x = screen.get_width() // 2 - cat.get_width() // 2
cat_rect.y = screen.get_height() // 2 - cat.get_height() // 2
screen.blit(cat, cat_rect)
mouse_rect = mouse.get_rect()
mouse_rect.x = screen.get_width() // 2 - mouse.get_width() // 2 + 200
mouse_rect.y = screen.get_height() // 2 - mouse.get_height() // 2
screen.blit(mouse, mouse_rect)
# 刷新屏幕
pygame.display.flip()
运行代码,可以看到一个猫和老鼠都在中央的窗口。
此时,游戏窗口中已经有了猫和老鼠,但它们还没有开始移动。我们需要在后面的代码中加入游戏逻辑,使它们可以开始运动。
4. 实现游戏逻辑
在每个游戏循环中,我们需要监听键盘事件,根据按键采取合适的操作,如猫向左、向右、向上、向下移动,老鼠在随机方向上移动等。
在游戏循环开始之前,需要定义猫和老鼠的初始方向、位置、速度等参数:
# 初始方向和位置
cat_direction = 'right'
cat_speed = 5
cat_x, cat_y = cat_rect.x, cat_rect.y
mouse_direction = 'left'
mouse_speed = 3
mouse_x, mouse_y = mouse_rect.x, mouse_rect.y
在游戏循环中,使用pygame.event.get()监听键盘事件。如果是按下方向键,则更新方向;否则,判断是否退出游戏。
while True:
# 监听事件
for event in pygame.event.get():
# 如果按下ESC键,则退出游戏
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 如果按下方向键,则更新方向
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
cat_direction = 'left'
elif event.key == pygame.K_RIGHT:
cat_direction = 'right'
elif event.key == pygame.K_UP:
cat_direction = 'up'
elif event.key == pygame.K_DOWN:
cat_direction = 'down'
同时,需要更新猫和老鼠的位置。根据它们的方向和速度,计算出它们移动后的坐标。
# 计算猫的新位置
if cat_direction == 'left':
cat_x -= cat_speed
elif cat_direction == 'right':
cat_x += cat_speed
elif cat_direction == 'up':
cat_y -= cat_speed
elif cat_direction == 'down':
cat_y += cat_speed
cat_rect.x, cat_rect.y = cat_x, cat_y
# 计算老鼠的新位置
directions = ['left', 'right', 'up', 'down']
index = random.randint(0, 3)
mouse_direction = directions[index]
if mouse_direction == 'left':
mouse_x -= mouse_speed
elif mouse_direction == 'right':
mouse_x += mouse_speed
elif mouse_direction == 'up':
mouse_y -= mouse_speed
elif mouse_direction == 'down':
mouse_y += mouse_speed
mouse_rect.x, mouse_rect.y = mouse_x, mouse_y
最后,在每个游戏循环结束时刷新屏幕。
# 刷新屏幕
screen.fill(background_color)
screen.blit(cat, cat_rect)
screen.blit(mouse, mouse_rect)
pygame.display.flip()
现在,整个猫捉老鼠的小游戏基本完成了。完整代码如下:
import pygame
import random
import sys
# 初始化pygame
pygame.init()
# 设置窗口标题和大小
pygame.display.set_caption('猫捉老鼠')
screen = pygame.display.set_mode((700, 550))
# 设置背景颜色
background_color = (96, 96, 96)
# 载入猫和老鼠图片
cat = pygame.image.load('cat.png')
cat = pygame.transform.scale(cat, (100, 100))
mouse = pygame.image.load('mouse.png')
mouse = pygame.transform.scale(mouse, (100, 100))
# 将猫和老鼠放在窗口中央
cat_rect = cat.get_rect()
cat_rect.x = screen.get_width() // 2 - cat.get_width() // 2
cat_rect.y = screen.get_height() // 2 - cat.get_height() // 2
screen.blit(cat, cat_rect)
mouse_rect = mouse.get_rect()
mouse_rect.x = screen.get_width() // 2 - mouse.get_width() // 2 + 200
mouse_rect.y = screen.get_height() // 2 - mouse.get_height() // 2
screen.blit(mouse, mouse_rect)
# 初始方向和位置
cat_direction = 'right'
cat_speed = 5
cat_x, cat_y = cat_rect.x, cat_rect.y
mouse_direction = 'left'
mouse_speed = 3
mouse_x, mouse_y = mouse_rect.x, mouse_rect.y
# 游戏循环
while True:
# 监听事件
for event in pygame.event.get():
# 如果按下ESC键,则退出游戏
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 如果按下方向键,则更新方向
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
cat_direction = 'left'
elif event.key == pygame.K_RIGHT:
cat_direction = 'right'
elif event.key == pygame.K_UP:
cat_direction = 'up'
elif event.key == pygame.K_DOWN:
cat_direction = 'down'
# 计算猫的新位置
if cat_direction == 'left':
cat_x -= cat_speed
elif cat_direction == 'right':
cat_x += cat_speed
elif cat_direction == 'up':
cat_y -= cat_speed
elif cat_direction == 'down':
cat_y += cat_speed
cat_rect.x, cat_rect.y = cat_x, cat_y
# 计算老鼠的新位置
directions = ['left', 'right', 'up', 'down']
index = random.randint(0, 3)
mouse_direction = directions[index]
if mouse_direction == 'left':
mouse_x -= mouse_speed
elif mouse_direction == 'right':
mouse_x += mouse_speed
elif mouse_direction == 'up':
mouse_y -= mouse_speed
elif mouse_direction == 'down':
mouse_y += mouse_speed
mouse_rect.x, mouse_rect.y = mouse_x, mouse_y
# 刷新屏幕
screen.fill(background_color)
screen.blit(cat, cat_rect)
screen.blit(mouse, mouse_rect)
pygame.display.flip()
运行代码,可以看到一个猫捉老鼠的小游戏。
5. 总结
在本文中,我们使用Python和pygame库实现了一个简单的猫捉老鼠小游戏。通过这个项目,我们学习了pygame库的使用,了解了如何创建游戏窗口、载入图片、监听键盘事件、计算移动位置等。
这只是一个简单的游戏,还有很多地方可以优化。例如,可以增加碰撞检测、增加多只老鼠、增加声音效果等等。不论是完整的游戏制作还是小模块的练习,都是非常有趣的编程实践。希望本文能对初学者起到一定的指导作用。