写一个贪吃蛇游戏代码
好的,这是一个用Python和Pygame库编写的简单贪吃蛇游戏示例。
import pygame
import random
# 初始化Pygame
pygame.init()
# 屏幕尺寸
screen_width = 600
screen_height = 480
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("贪吃蛇")
# 颜色定义
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
# 蛇的初始设置
snake_block_size = 20
snake_speed = 15
# 字体
font_style = pygame.font.SysFont(None, 30)
# 时钟
clock = pygame.time.Clock()
# 函数:显示消息
def message(msg, color):
mesg = font_style.render(msg, True, color)
screen.blit(mesg, [screen_width / 6, screen_height / 3])
# 函数:画蛇
def our_snake(snake_block_size, snake_list):
for x in snake_list:
pygame.draw.rect(screen, green, [x[0], x[1], snake_block_size, snake_block_size])
# 游戏主循环
def game_loop():
game_over = False
game_close = False
# 蛇的初始位置
x1 = screen_width / 2
y1 = screen_height / 2
# 蛇的位置变化
x1_change = 0
y1_change = 0
snake_List = []
snake_Length = 1
# 食物的随机位置
foodx = round(random.randrange(0, screen_width - snake_block_size) / 20.0) * 20.0
foody = round(random.randrange(0, screen_height - snake_block_size) / 20.0) * 20.0
while not game_over:
while game_close == True:
screen.fill(black)
message("你输了! 按C-重新开始或Q-退出", red)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_over = True
game_close = False
if event.key == pygame.K_c:
game_loop()
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:
x1_change = -snake_block_size
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block_size
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block_size
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block_size
x1_change = 0
# 边界检测
if x1 >= screen_width or x1 < 0 or y1>= screen_height or y1 < 0: game_close='True' x1 y1 screen.fillblack pygame.draw.rectscreen red foodx foody snake_block_size snake_block_size snake_head='[]' snake_head.appendx1 snake_head.appendy1 snake_list.appendsnake_head if lensnake_list> snake_Length:
del snake_List[0]
# 检测蛇是否咬到自己
for x in snake_List[:-1]:
if x == snake_Head:
game_close = True
our_snake(snake_block_size, snake_List)
pygame.display.update()
# 吃食物
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, screen_width - snake_block_size) / 20.0) * 20.0
foody = round(random.randrange(0, screen_height - snake_block_size) / 20.0) * 20.0
snake_Length += 1
clock.tick(snake_speed)
pygame.quit()
quit()
# 启动游戏
game_loop()
代码解释:
- 导入库: 导入pygame用于游戏开发,random用于生成随机数 (食物的位置)。
- 初始化: 初始化Pygame,设置屏幕尺寸和标题。
- 颜色定义: 定义一些常用的颜色。
- 蛇的设置: 定义蛇的块大小和速度。
- 字体: 创建一个字体对象用于显示消息。
- message() 函数: 在屏幕上显示文本消息。
- our_snake() 函数: 画出蛇。它接收蛇的块大小和蛇的身体列表作为参数。
- game_loop() 函数: 游戏的主循环,包含以下内容:游戏状态变量: game_over 和 game_close 用于控制游戏循环。蛇的初始位置和移动: x1, y1 表示蛇头的坐标,x1_change, y1_change 表示蛇的移动方向。蛇的身体列表: snake_List 存储蛇的身体坐标。食物的随机位置: foodx, foody 使用随机数生成食物的位置。游戏循环:事件处理: 监听键盘事件,控制蛇的移动方向。边界检测: 如果蛇碰到屏幕边界,游戏结束。更新蛇的位置: 根据移动方向更新蛇头的坐标。画蛇和食物: 调用 our_snake() 函数画蛇,使用 pygame.draw.rect() 画食物。吃食物: 如果蛇头碰到食物,更新食物的位置,并增加蛇的长度。自碰撞检测: 检查蛇头是否和自己的身体碰撞,如果碰撞,游戏结束。游戏结束逻辑: 在 game_close 状态下显示 "你输了" 的消息,并等待用户按键重新开始或退出。
- 启动游戏: 调用 game_loop() 函数启动游戏。
如何运行代码:
- 安装Pygame: 如果尚未安装,请使用以下命令安装:pip install pygame
- 保存代码: 将代码保存为 .py 文件 (例如 snake.py)。
- 运行代码: 在命令行中运行该文件:python snake.py
游戏控制:
- 方向键: 控制蛇的移动方向(上、下、左、右)。
- Q 键: 在游戏结束后退出游戏。
- C 键: 在游戏结束后重新开始游戏。
改进建议:
- 添加计分系统: 显示玩家的分数。
- 增加难度: 随着分数增加,蛇的速度加快。
- 美化界面: 使用更漂亮的图像和颜色。
- 添加音效: 在吃食物或游戏结束时播放音效。
- 更多游戏元素: 添加障碍物或其他元素来增加游戏的趣味性。
- 更好的游戏结束界面: 提供一个更友好的游戏结束界面,显示玩家的最高分等信息。
- 优化代码: 提高代码的可读性和可维护性。
希望这个简单的贪吃蛇游戏对你有帮助!