贪吃蛇游戏是一个经典的小游戏,它需求玩家控制一条蛇在地图中奔跑,吃掉尽量多的食物,同时要避免撞到自己或者地图边界,否则就会死掉。以下是Python编写贪吃蛇游戏的完整代码示例。
一、游戏初始化
在这一部分中,我们需要将游戏所需的各种元素和设置进行初始化,这主要包括:
1. 导入需要用到的模块
2. 设置游戏窗口的尺寸和标题
3. 定义颜色变量,用于给各种元素上色
4. 设置蛇的起始位置和大小
5. 随机生成第一个食物的位置
import pygame
import random
# 设置游戏窗口的尺寸和标题
WIDTH = 800
HEIGHT = 600
pygame.init()
pygame.display.set_caption('Python贪吃蛇游戏')
# 定义颜色变量
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
# 设置蛇的起始位置和大小
SNAKE_SIZE = 20
snake_x = random.randrange(0, WIDTH, SNAKE_SIZE)
snake_y = random.randrange(0, HEIGHT, SNAKE_SIZE)
snake_position = [snake_x, snake_y]
snake_body = [snake_position]
# 随机生成第一个食物的位置
FOOD_SIZE = 20
food_x = random.randrange(0, WIDTH, FOOD_SIZE)
food_y = random.randrange(0, HEIGHT, FOOD_SIZE)
food_position = [food_x, food_y]
二、游戏主循环
在这一部分中,我们需要定义游戏的主循环,并在循环中不断更新游戏的状态和绘制游戏所需的各种元素。
每次循环包括以下几个步骤:
1. 处理游戏中的各种事件,例如按键操作
2. 更新蛇的位置
3. 判断蛇是否撞到边界或自己的身体,如果是则游戏结束
4. 判断是否吃到了食物,如果是则增加蛇的长度,并重新生成一个新的食物
5. 绘制游戏所需的各种元素,例如蛇和食物
game_over = False
# 游戏主循环
while not game_over:
# 处理游戏中的各种事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
# 处理按键事件
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
# 向左移动
elif event.key == pygame.K_RIGHT:
# 向右移动
elif event.key == pygame.K_UP:
# 向上移动
elif event.key == pygame.K_DOWN:
# 向下移动
# 更新蛇的位置
# ...
# 判断蛇是否撞到边界或自己的身体
# ...
# 判断是否吃到了食物
# ...
# 绘制游戏所需的各种元素
# ...
pygame.display.update()
三、更新蛇的位置
在这一部分中,我们需要编写代码来更新蛇的位置。为了实现这一功能,我们需要知道蛇的当前位置和朝向。
每次更新时,蛇的头部会向当前方向移动一格,并在头部添加一个新的节。
同时,如果蛇的长度大于1,我们还需要删除尾部的节,以保证蛇的长度不会无限增长。
# 定义蛇的朝向
DIRECTION = 'RIGHT'
# 更新蛇的位置
if DIRECTION == 'RIGHT':
snake_x += SNAKE_SIZE
elif DIRECTION == 'LEFT':
snake_x -= SNAKE_SIZE
elif DIRECTION == 'UP':
snake_y -= SNAKE_SIZE
elif DIRECTION == 'DOWN':
snake_y += SNAKE_SIZE
snake_position = [snake_x, snake_y]
snake_body.insert(0, snake_position)
# 如果蛇的长度超过1,删除尾部的节
if len(snake_body) > 1:
del snake_body[-1]
四、判断蛇是否撞到边界或自己的身体
在这一部分中,我们需要编写代码来判断蛇是否撞到了边界或自己的身体。
如果蛇撞到了边界或自己的身体,游戏就结束了。
# 判断蛇是否撞到边界或自己的身体
if snake_x WIDTH - SNAKE_SIZE or snake_y HEIGHT - SNAKE_SIZE:
game_over = True
if snake_position in snake_body[1:]:
game_over = True
五、判断是否吃到了食物
在这一部分中,我们需要编写代码来判断蛇是否吃到了食物。
如果蛇吃到了食物,就应该增加蛇的长度,并重新生成一个新的食物。
# 判断是否吃到了食物
if snake_position == food_position:
# 增加蛇的长度
# ...
# 生成新的食物
food_x = random.randrange(0, WIDTH, FOOD_SIZE)
food_y = random.randrange(0, HEIGHT, FOOD_SIZE)
food_position = [food_x, food_y]
六、绘制游戏所需的各种元素
在这一部分中,我们需要编写代码来绘制游戏所需的各种元素,包括蛇、食物和地图背景。
screen = pygame.display.set_mode((WIDTH, HEIGHT))
# 绘制游戏所需的各种元素
screen.fill(BLACK) # 绘制地图背景
pygame.draw.rect(screen, GREEN, pygame.Rect(snake_body[0][0], snake_body[0][1], SNAKE_SIZE, SNAKE_SIZE)) # 绘制蛇头
for position in snake_body[1:]:
pygame.draw.rect(screen, WHITE, pygame.Rect(position[0], position[1], SNAKE_SIZE, SNAKE_SIZE)) # 绘制蛇身
pygame.draw.rect(screen, RED, pygame.Rect(food_position[0], food_position[1], FOOD_SIZE, FOOD_SIZE)) # 绘制食物
# 刷新屏幕
pygame.display.update()
七、完整代码示例
将以上各个部分的代码合并起来,即可得到 Python 编写贪吃蛇游戏的完整代码:
import pygame
import random
# 设置游戏窗口的尺寸和标题
WIDTH = 800
HEIGHT = 600
pygame.init()
pygame.display.set_caption('Python贪吃蛇游戏')
# 定义颜色变量
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
# 设置蛇的起始位置和大小
SNAKE_SIZE = 20
snake_x = random.randrange(0, WIDTH, SNAKE_SIZE)
snake_y = random.randrange(0, HEIGHT, SNAKE_SIZE)
snake_position = [snake_x, snake_y]
snake_body = [snake_position]
# 定义蛇的朝向
DIRECTION = 'RIGHT'
# 随机生成第一个食物的位置
FOOD_SIZE = 20
food_x = random.randrange(0, WIDTH, FOOD_SIZE)
food_y = random.randrange(0, HEIGHT, FOOD_SIZE)
food_position = [food_x, food_y]
# 游戏主循环
game_over = False
while not game_over:
# 处理游戏中的各种事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
# 处理按键事件
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
DIRECTION = 'LEFT'
elif event.key == pygame.K_RIGHT:
DIRECTION = 'RIGHT'
elif event.key == pygame.K_UP:
DIRECTION = 'UP'
elif event.key == pygame.K_DOWN:
DIRECTION = 'DOWN'
# 更新蛇的位置
if DIRECTION == 'RIGHT':
snake_x += SNAKE_SIZE
elif DIRECTION == 'LEFT':
snake_x -= SNAKE_SIZE
elif DIRECTION == 'UP':
snake_y -= SNAKE_SIZE
elif DIRECTION == 'DOWN':
snake_y += SNAKE_SIZE
snake_position = [snake_x, snake_y]
snake_body.insert(0, snake_position)
# 如果蛇的长度超过1,删除尾部的节
if len(snake_body) > 1:
del snake_body[-1]
# 判断蛇是否撞到边界或自己的身体
if snake_x WIDTH - SNAKE_SIZE or snake_y HEIGHT - SNAKE_SIZE:
game_over = True
if snake_position in snake_body[1:]:
game_over = True
# 判断是否吃到了食物
if snake_position == food_position:
# 增加蛇的长度
snake_body.append(snake_body[-1])
# 生成新的食物
food_x = random.randrange(0, WIDTH, FOOD_SIZE)
food_y = random.randrange(0, HEIGHT, FOOD_SIZE)
food_position = [food_x, food_y]
# 绘制游戏所需的各种元素
screen = pygame.display.set_mode((WIDTH, HEIGHT))
screen.fill(BLACK)
pygame.draw.rect(screen, GREEN, pygame.Rect(snake_body[0][0], snake_body[0][1], SNAKE_SIZE, SNAKE_SIZE))
for position in snake_body[1:]:
pygame.draw.rect(screen, WHITE, pygame.Rect(position[0], position[1], SNAKE_SIZE, SNAKE_SIZE))
pygame.draw.rect(screen, RED, pygame.Rect(food_position[0], food_position[1], FOOD_SIZE, FOOD_SIZE))
pygame.display.update()
pygame.quit()