Python 是开发小游戏的绝佳工具,借助第三方库,如 pygame
,我们可以快速开发一个经典的贪吃蛇游戏。本篇将介绍如何用 Python 实现一个完整的贪吃蛇小游戏。
一、游戏设计
1.1 游戏规则
- 玩家通过方向键控制贪吃蛇移动。
- 贪吃蛇吃到食物后会变长,同时得分增加。
- 如果贪吃蛇撞到自己或边界,游戏结束。
1.2 技术点
- 绘图与事件处理:使用
pygame
实现画面渲染与键盘事件监听。 - 游戏逻辑:包括蛇的移动、碰撞检测、食物生成等。
二、开发环境
- 开发工具:任意 Python 编辑器(如 PyCharm、VS Code)
- 依赖库:
pygame
安装方法:pip install pygame
三、代码实现
以下是完整代码及详细注释:
import pygame
import random
import time
# 初始化 Pygame
pygame.init()
# 屏幕大小
WIDTH, HEIGHT = 600, 400
BLOCK_SIZE = 20
# 颜色定义
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
# 创建屏幕
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("贪吃蛇小游戏")
# 时钟对象
clock = pygame.time.Clock()
def draw_snake(snake_body):
"""
绘制贪吃蛇
"""
for block in snake_body:
pygame.draw.rect(screen, GREEN, pygame.Rect(block[0], block[1], BLOCK_SIZE, BLOCK_SIZE))
def show_score(score):
"""
显示分数
"""
font = pygame.font.SysFont('comicsansms', 20)
score_surface = font.render(f"Score: {score}", True, WHITE)
screen.blit(score_surface, (10, 10))
def game_over():
"""
显示游戏结束画面
"""
font = pygame.font.SysFont('comicsansms', 50)
game_over_surface = font.render("Game Over!", True, RED)
screen.blit(game_over_surface, (WIDTH // 4, HEIGHT // 3))
pygame.display.flip()
time.sleep(3)
pygame.quit()
quit()
def main():
# 初始位置
snake_body = [[100, 50], [80, 50], [60, 50]] # 初始蛇身
direction = 'RIGHT' # 初始方向
change_to = direction
# 初始食物位置
food_pos = [random.randrange(1, (WIDTH // BLOCK_SIZE)) * BLOCK_SIZE,
random.randrange(1, (HEIGHT // BLOCK_SIZE)) * BLOCK_SIZE]
food_spawn = True
score = 0
while True:
# 事件处理
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and direction != 'DOWN':
change_to = 'UP'
if event.key == pygame.K_DOWN and direction != 'UP':
change_to = 'DOWN'
if event.key == pygame.K_LEFT and direction != 'RIGHT':
change_to = 'LEFT'
if event.key == pygame.K_RIGHT and direction != 'LEFT':
change_to = 'RIGHT'
# 更新方向
direction = change_to
# 更新蛇头位置
if direction == 'UP':
snake_body[0][1] -= BLOCK_SIZE
if direction == 'DOWN':
snake_body[0][1] += BLOCK_SIZE
if direction == 'LEFT':
snake_body[0][0] -= BLOCK_SIZE
if direction == 'RIGHT':
snake_body[0][0] += BLOCK_SIZE
# 增长蛇身
snake_body.insert(0, list(snake_body[0]))
if snake_body[0] == food_pos:
score += 10
food_spawn = False
else:
snake_body.pop()
if not food_spawn:
food_pos = [random.randrange(1, (WIDTH // BLOCK_SIZE)) * BLOCK_SIZE,
random.randrange(1, (HEIGHT // BLOCK_SIZE)) * BLOCK_SIZE]
food_spawn = True
# 游戏结束条件
if snake_body[0][0] < 0 or snake_body[0][0] >= WIDTH or snake_body[0][1] < 0 or snake_body[0][1] >= HEIGHT:
game_over()
for block in snake_body[1:]:
if snake_body[0] == block:
game_over()
# 绘制屏幕
screen.fill(BLACK)
draw_snake(snake_body)
pygame.draw.rect(screen, RED, pygame.Rect(food_pos[0], food_pos[1], BLOCK_SIZE, BLOCK_SIZE))
show_score(score)
# 更新屏幕
pygame.display.flip()
# 控制游戏速度
clock.tick(15)
if __name__ == "__main__":
main()
四、运行效果
-
游戏界面
- 贪吃蛇用绿色方块表示。
- 食物用红色方块表示。
- 左上角实时显示得分。
-
游戏操作
- 通过上下左右键控制蛇移动。
- 吃到食物后,蛇身变长,得分增加。
-
游戏结束
- 撞墙或撞到自己时,游戏结束并显示“Game Over”提示。
五、扩展功能
- 增加关卡:设置不同关卡,每关提高速度或改变地图布局。
- 障碍物:在地图中添加障碍物增加难度。
- 存档功能:保存玩家最高分,显示排行榜。
- 多人模式:支持多个玩家同时控制不同的蛇。
六、总结
通过本项目,你可以学到:
- 使用
pygame
实现画面渲染和事件监听。 - 设计经典游戏逻辑(如碰撞检测、状态更新)。
- 将编程与趣味性结合,提高开发兴趣。
希望你能通过贪吃蛇小游戏开发,迈出游戏编程的第一步!
标签:body,direction,Python,小游戏,pygame,贪吃蛇,SIZE,BLOCK,snake From: https://blog.csdn.net/X2829352498/article/details/144281070