简单的Python贪吃蛇游戏示例代码
以下是一个简单的Python贪吃蛇游戏示例代码,使用了pygame
库来实现图形界面和交互,在运行代码前请确保已经安装了pygame
库(可以通过pip install pygame
命令进行安装)
import pygame
import random
# 初始化pygame
pygame.init()
# 游戏窗口大小
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("贪吃蛇游戏")
# 颜色定义
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
# 蛇的相关参数
snake_block_size = 10
snake_speed = 15
snake_list = []
snake_length = 1
# 初始蛇头位置
x1, y1 = width / 2, height / 2
x1_change, y1_change = 0, 0
# 食物的位置
while True:
foodx = round(random.randrange(0, width - snake_block_size) / 10.0) * 10.0
foody = round(random.randrange(0, height - snake_block_size) / 10.0) * 10.0
if [foodx, foody] not in snake_list:
break
# 游戏结束标志
game_over = False
# 积分
score = 0
# 游戏主循环
clock = pygame.time.Clock()
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:
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 + x1_change >= width or x1 + x1_change < 0 or y1 + y1_change >= height or y1 + y1_change < 0 or [x1 + x1_change, y1 + y1_change] in snake_list[1:]:
game_over = True
else:
# 更新蛇头位置
x1 += x1_change
y1 += y1_change
snake_head = []
snake_head.append(x1)
snake_head.append(y1)
snake_list.append(snake_head)
if len(snake_list) > snake_length:
del snake_list[0]
# 判断蛇是否吃到食物
if x1 == foodx and y1 == foody:
score += 1
while True:
foodx = round(random.randrange(0, width - snake_block_size) / 10.0) * 10.0
foody = round(random.randrange(0, height - snake_block_size) / 10.0) * 10.0
if [foodx, foody] not in snake_list:
break
snake_length += 1
# 绘制背景
screen.fill(black)
# 绘制食物
pygame.draw.rect(screen, green, [foodx, foody, snake_block_size, snake_block_size])
# 绘制蛇
for segment in snake_list:
pygame.draw.rect(screen, white, [segment[0], segment[1], snake_block_size, snake_block_size])
# 在窗口左上角显示积分
font_style = pygame.font.SysFont(None, 30)
score_text = font_style.render("积分: " + str(score), True, white)
screen.blit(score_text, (10, 10))
pygame.display.update()
# 设置游戏帧率
clock.tick(snake_speed)
# 游戏结束,显示最终得分
font_style = pygame.font.SysFont(None, 50)
score_text = font_style.render("最终得分: " + str(score), True, white)
screen.blit(score_text, [width / 2 - 100, height / 2])
pygame.display.update()
pygame.time.delay(2000)
# 退出游戏
pygame.quit()
quit()
这个代码实现了一个基本的贪吃蛇游戏逻辑,具体功能如下:
游戏基本功能
- 界面展示:通过
pygame
创建了一个固定大小的游戏窗口,设置了窗口标题,定义了黑、白、红、绿几种颜色,用于后续绘制游戏中的不同元素,如蛇身、食物、背景等 - 蛇的控制:蛇初始在屏幕中间位置,玩家可以通过键盘上的方向键(上、下、左、右)来控制蛇的移动方向,蛇每次移动一个固定的方块大小(由
snake_block_size
定义) - 食物生成:食物会随机出现在游戏窗口内的某个坐标位置(坐标是
snake_block_size
的整数倍,保证位置规整),以绿色方块表示 - 游戏规则判定:
- 吃到食物:当蛇头碰到食物时,蛇的长度会增加一节,同时食物会重新在新的随机位置生成
- 游戏结束:如果蛇头撞到游戏窗口的边界(墙壁)或者蛇头碰到了蛇身自身,游戏就会结束
代码结构
- 初始化部分:
- 首先调用
pygame.init()
对pygame
库进行初始化 - 然后定义了游戏窗口的大小、设置了窗口标题,并定义了后续要用到的几种颜色。接着初始化了蛇的一些参数,如蛇身方块大小、初始移动速度、初始位置、初始长度等,以及食物的初始位置,同时将游戏结束标志设置为
False
- 首先调用
- 主循环部分:
- 通过
while not game_over
循环不断处理游戏中的各种事件和逻辑更新,比如获取用户的键盘输入事件来控制蛇的移动方向,不断更新蛇头的位置,判断蛇是否吃到食物、是否撞墙或者撞到自己等情况,并根据不同情况做出相应处理(如更新蛇身长度、结束游戏等) - 在每次循环中,还会进行界面的绘制,包括填充背景颜色、绘制食物和蛇身等元素,最后通过
pygame.display.update()
来更新显示画面,并且使用clock.tick(snake_speed)
来控制游戏的帧率,保证游戏以合适的速度运行
- 通过
- 结束部分:当游戏结束循环结束后,调用
pygame.quit()
来关闭pygame
库的相关资源,并使用quit()
退出程序
这只是一个简单的示例,你可以进一步扩展和优化它,比如添加计分功能、游戏难度调节、音效等,使其更加完善和有趣