Python 贪吃蛇游戏代码:入门教程和完整实现
以下是一个简单的贪吃蛇程序,使用 Python 和 Pygame 库实现:
import pygame
import random
# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# 定义窗口大小
WINDOW_WIDTH = 600
WINDOW_HEIGHT = 600
# 定义方格大小和行列数
BLOCK_SIZE = 20
ROW_NUM = WINDOW_HEIGHT // BLOCK_SIZE
COL_NUM = WINDOW_WIDTH // BLOCK_SIZE
# 定义贪吃蛇初始位置和长度
INIT_SNAKE_POS = [(COL_NUM // 2, ROW_NUM // 2)]
INIT_SNAKE_LEN = 3
# 初始化pygame
pygame.init()
# 创建窗口
window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption('贪吃蛇')
# 定义字体
font = pygame.font.SysFont(None, 30)
# 定义计时器
clock = pygame.time.Clock()
# 定义食物位置
food_pos = (0, 0)
# 定义贪吃蛇
snake = INIT_SNAKE_POS.copy()
snake_len = INIT_SNAKE_LEN
snake_dir = (0, -1)
# 定义游戏结束标志
game_over = False
# 生成食物位置
def generate_food():
global food_pos
while True:
x = random.randint(0, COL_NUM - 1)
y = random.randint(0, ROW_NUM - 1)
if (x, y) not in snake:
food_pos = (x, y)
break
# 判断贪吃蛇是否撞墙或撞自己
def check_collision(pos):
if pos[0] < 0 or pos[0] >= COL_NUM or pos[1] < 0 or pos[1] >= ROW_NUM:
return True
if pos in snake[1:]:
return True
return 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_UP and snake_dir != (0, 1):
snake_dir = (0, -1)
elif event.key == pygame.K_DOWN and snake_dir != (0, -1):
snake_dir = (0, 1)
elif event.key == pygame.K_LEFT and snake_dir != (1, 0):
snake_dir = (-1, 0)
elif event.key == pygame.K_RIGHT and snake_dir != (-1, 0):
snake_dir = (1, 0)
# 移动贪吃蛇
head = (snake[0][0] + snake_dir[0], snake[0][1] + snake_dir[1])
if check_collision(head):
game_over = True
else:
snake.insert(0, head)
if head == food_pos:
snake_len += 1
generate_food()
else:
snake.pop()
# 绘制窗口
window.fill(WHITE)
for pos in snake:
pygame.draw.rect(window, GREEN, (pos[0] * BLOCK_SIZE, pos[1] * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE))
pygame.draw.rect(window, RED, (food_pos[0] * BLOCK_SIZE, food_pos[1] * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE))
score_text = font.render('Score: ' + str(snake_len - INIT_SNAKE_LEN), True, BLACK)
window.blit(score_text, (10, 10))
pygame.display.update()
# 控制帧率
clock.tick(10)
# 退出pygame
pygame.quit()
这个程序使用pygame模块实现了一个简单的贪吃蛇游戏。在游戏中,玩家通过控制贪吃蛇的方向,使其吃到食物,每吃一个食物贪吃蛇的长度就会加1。如果贪吃蛇撞墙或撞到自己,游戏就会结束。程序还显示了当前的得分。
代码说明:
- 导入模块: 导入
pygame和random模块,用于游戏逻辑和随机数生成。 - 定义颜色: 定义一些常用的颜色,用于绘制游戏元素。
- 定义窗口大小: 定义游戏窗口的宽度和高度。
- 定义方格大小和行列数: 定义每个方格的大小以及窗口的行列数。
- 定义贪吃蛇初始位置和长度: 定义贪吃蛇初始位置和长度。
- 初始化pygame: 初始化
pygame库。 - 创建窗口: 创建游戏窗口并设置标题。
- 定义字体: 定义游戏得分显示的字体。
- 定义计时器: 定义一个计时器,用于控制游戏帧率。
- 定义食物位置: 定义食物的初始位置。
- 定义贪吃蛇: 定义贪吃蛇的初始状态。
- 定义游戏结束标志: 定义一个标志,用于判断游戏是否结束。
- 生成食物位置: 定义一个函数,用于随机生成食物位置。
- 判断贪吃蛇是否撞墙或撞自己: 定义一个函数,用于判断贪吃蛇是否撞墙或撞到自己。
- 主循环: 游戏的主循环,用于处理事件、更新游戏状态、绘制游戏画面。
- 处理事件: 处理键盘事件,控制贪吃蛇的移动方向。
- 移动贪吃蛇: 更新贪吃蛇的位置,判断是否撞墙或撞到自己,如果吃到食物则增加长度。
- 绘制窗口: 绘制游戏窗口,包括贪吃蛇、食物和得分。
- 控制帧率: 控制游戏帧率,使游戏运行平稳。
- 退出pygame: 退出
pygame库。
运行代码:
- 确保你的电脑上已经安装了
pygame库。如果没有安装,请使用pip install pygame命令进行安装。 - 将代码保存为
.py文件,例如snake.py。 - 在命令行中运行
python snake.py命令,即可启动贪吃蛇游戏。
拓展:
你可以根据自己的想法对这个程序进行拓展,例如添加不同的游戏模式、增加游戏难度、添加音效等等。
更多资源:
原文地址: https://www.cveoy.top/t/topic/nPzY 著作权归作者所有。请勿转载和采集!