Pygame 贪吃蛇游戏教程:从入门到进阶
Pygame 贪吃蛇游戏教程:从入门到进阶
本教程将带你一步步使用 Pygame 编写一个简单的贪吃蛇游戏,涵盖基本的游戏逻辑、图形绘制和事件处理等内容。
代码示例
import pygame
import random
# 初始化 Pygame
pygame.init()
# 设置窗口大小
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('贪吃蛇游戏')
# 定义颜色
white = (255, 255, 255)
green = (0, 255, 0)
red = (255, 0, 0)
# 定义贪吃蛇参数
snake_block_size = 20
snake_speed = 10
# 定义贪吃蛇移动方向
direction = 'right'
# 定义贪吃蛇初始位置和长度
snake_x = screen_width // 2
snake_y = screen_height // 2
snake_body = []
snake_length = 1
# 定义食物初始位置
food_x = round(random.randrange(0, screen_width - snake_block_size) / 20) * 20
food_y = round(random.randrange(0, screen_height - snake_block_size) / 20) * 20
# 游戏主循环
running = True
clock = pygame.time.Clock()
def draw_snake(snake_block_size, snake_body):
for x in snake_body:
pygame.draw.rect(screen, green, [x[0], x[1], snake_block_size, snake_block_size])
while running:
# 处理游戏事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT and direction != 'right':
direction = 'left'
elif event.key == pygame.K_RIGHT and direction != 'left':
direction = 'right'
elif event.key == pygame.K_UP and direction != 'down':
direction = 'up'
elif event.key == pygame.K_DOWN and direction != 'up':
direction = 'down'
# 移动贪吃蛇的位置
if direction == 'left':
snake_x -= snake_block_size
elif direction == 'right':
snake_x += snake_block_size
elif direction == 'up':
snake_y -= snake_block_size
elif direction == 'down':
snake_y += snake_block_size
# 贪吃蛇吃到食物
if snake_x == food_x and snake_y == food_y:
food_x = round(random.randrange(0, screen_width - snake_block_size) / 20) * 20
food_y = round(random.randrange(0, screen_height - snake_block_size) / 20) * 20
snake_length += 1
# 填充背景色
screen.fill(white)
# 绘制食物
pygame.draw.rect(screen, red, [food_x, food_y, snake_block_size, snake_block_size])
# 绘制贪吃蛇
snake_head = []
snake_head.append(snake_x)
snake_head.append(snake_y)
snake_body.append(snake_head)
if len(snake_body) > snake_length:
del snake_body[0]
for x in snake_body[:-1]:
if x == snake_head:
running = False
draw_snake(snake_block_size, snake_body)
# 更新屏幕显示
pygame.display.update()
# 设置游戏帧率
clock.tick(snake_speed)
# 退出游戏
pygame.quit()
游戏说明
- 贪吃蛇会在窗口中自动移动。
- 使用键盘的方向键控制贪吃蛇的移动方向。
- 目标是吃到食物并尽量避免碰到自己的身体。
- 贪吃蛇碰到自己的身体时游戏结束。
代码解释
- 初始化 Pygame:
pygame.init()初始化 Pygame 库。 - 设置窗口大小:
screen = pygame.display.set_mode((screen_width, screen_height))设置游戏窗口大小。 - 定义颜色:
white = (255, 255, 255)定义 RGB 颜色值。 - 定义贪吃蛇参数:
snake_block_size = 20设置贪吃蛇块的大小。 - 定义贪吃蛇移动方向:
direction = 'right'设置初始移动方向。 - 定义贪吃蛇初始位置和长度:
snake_x = screen_width // 2设置初始横坐标。 - 定义食物初始位置:
food_x = round(random.randrange(0, screen_width - snake_block_size) / 20) * 20设置食物随机位置。 - 游戏主循环:
while running:循环处理游戏事件和逻辑。 - 处理游戏事件:
for event in pygame.event.get():处理键盘事件,控制贪吃蛇移动方向。 - 移动贪吃蛇的位置:根据
direction更新贪吃蛇的坐标。 - 贪吃蛇吃到食物:如果贪吃蛇坐标与食物坐标相同,则食物随机生成新的位置,贪吃蛇长度加 1。
- 填充背景色:
screen.fill(white)填充窗口背景色。 - 绘制食物:
pygame.draw.rect(screen, red, [food_x, food_y, snake_block_size, snake_block_size])绘制食物。 - 绘制贪吃蛇:
draw_snake(snake_block_size, snake_body)绘制贪吃蛇,并检查是否碰撞自身。 - 更新屏幕显示:
pygame.display.update()更新屏幕显示。 - 设置游戏帧率:
clock.tick(snake_speed)设置游戏帧率。
扩展功能
你可以根据自己的需要对游戏进行修改和扩展,比如:
- 增加难度:增加食物移动速度、缩短贪吃蛇移动速度、增加障碍物等。
- 计分:统计得分并显示在屏幕上。
- 音效:添加背景音乐和音效。
希望这个例子能帮助你开始编写一个复杂一点的 Pygame 游戏!如果你有任何问题,欢迎在评论区提问。
原文地址: https://www.cveoy.top/t/topic/1rI 著作权归作者所有。请勿转载和采集!