用Python编写贪吃蛇游戏的完整代码示例(Python贪吃蛇)

贪吃蛇游戏是一个经典的小游戏,它需求玩家控制一条蛇在地图中奔跑,吃掉尽量多的食物,同时要避免撞到自己或者地图边界,否则就会死掉。以下是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()

Published by

风君子

独自遨游何稽首 揭天掀地慰生平