Python 贪吃蛇游戏代码示例 - 使用Pygame库
以下是一个简单的贪吃蛇游戏的示例代码,使用 Python 的 Pygame 库编写:
import pygame
import time
import random
pygame.init()
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
display_width = 800
display_height = 600
game_display = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('贪吃蛇')
clock = pygame.time.Clock()
snake_block = 20
snake_speed = 10
font_style = pygame.font.SysFont(None, 50)
score_font = pygame.font.SysFont(None, 35)
def our_snake(snake_block, snake_list):
for x in snake_list:
pygame.draw.rect(game_display, green, [x[0], x[1], snake_block, snake_block])
def message(msg, color):
mesg = font_style.render(msg, True, color)
game_display.blit(mesg, [display_width / 6, display_height / 3])
def game_loop():
game_over = False
game_close = False
x1 = display_width / 2
y1 = display_height / 2
x1_change = 0
y1_change = 0
snake_List = []
Length_of_snake = 1
foodx = round(random.randrange(0, display_width - snake_block) / 20.0) * 20.0
foody = round(random.randrange(0, display_height - snake_block) / 20.0) * 20.0
while not game_over:
while game_close == True:
game_display.fill(black)
message('游戏结束!按 Q-退出或 C-重新开始', red)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
game_close = False
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
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block
x1_change = 0
if x1 >= display_width or x1 < 0 or y1 >= display_height or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
game_display.fill(black)
pygame.draw.rect(game_display, red, [foodx, foody, snake_block, snake_block])
snake_Head = []
snake_Head.append(x1)
snake_Head.append(y1)
snake_List.append(snake_Head)
if len(snake_List) > Length_of_snake:
del snake_List[0]
for x in snake_List[:-1]:
if x == snake_Head:
game_close = True
our_snake(snake_block, snake_List)
pygame.display.update()
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, display_width - snake_block) / 20.0) * 20.0
foody = round(random.randrange(0, display_height - snake_block) / 20.0) * 20.0
Length_of_snake += 1
clock.tick(snake_speed)
pygame.quit()
game_loop()
游戏规则:
- 玩家控制一条蛇,通过键盘上的箭头键来控制蛇的移动方向。
- 目标是吃到屏幕上随机生成的食物,每吃一个食物,蛇的长度会增加。
- 如果蛇撞到屏幕边缘或自己的身体,则游戏结束。
- 游戏结束后,玩家可以选择重新开始或退出游戏。
代码解释:
- 导入必要的库:
pygame库用于创建游戏,time库用于控制游戏速度,random库用于生成随机数。 - 初始化 Pygame:
pygame.init()初始化 Pygame 库。 - 定义颜色:
white、black、red、green定义了游戏的颜色。 - 定义游戏窗口尺寸:
display_width和display_height定义了游戏窗口的宽度和高度。 - 创建游戏窗口:
game_display = pygame.display.set_mode((display_width, display_height))创建了一个游戏窗口。 - 设置窗口标题:
pygame.display.set_caption('贪吃蛇')设置了游戏窗口的标题。 - 创建时钟:
clock = pygame.time.Clock()创建了一个时钟,用于控制游戏速度。 - 定义蛇块大小和速度:
snake_block定义了蛇块的大小,snake_speed定义了蛇的速度。 - 定义字体:
font_style和score_font定义了游戏的字体样式。 - 定义画蛇函数:
our_snake(snake_block, snake_list)函数用于画蛇,接受蛇块大小和蛇的位置列表作为参数。 - 定义显示消息函数:
message(msg, color)函数用于显示消息,接受消息内容和颜色作为参数。 - 定义游戏循环函数:
game_loop()函数是游戏的核心函数,包含游戏逻辑。 - 游戏循环:
- 初始化游戏变量: 初始化蛇的位置、方向、长度以及食物的位置。
- 游戏循环: 使用
while not game_over循环来运行游戏。 - 处理事件: 使用
for event in pygame.event.get():来处理用户的输入事件,例如键盘输入、鼠标点击等。 - 更新蛇的位置: 根据用户的输入,更新蛇的移动方向和位置。
- 检查是否撞墙或自身: 检查蛇是否撞到了屏幕边缘或自身,如果是则结束游戏。
- 绘制游戏画面: 清空游戏画面,绘制蛇、食物以及其他元素。
- 更新游戏画面: 使用
pygame.display.update()来更新游戏画面。 - 检查是否吃到食物: 检查蛇是否吃到了食物,如果是则增加蛇的长度,并生成新的食物。
- 控制游戏速度: 使用
clock.tick(snake_speed)来控制游戏速度。
- 退出游戏: 使用
pygame.quit()来退出游戏。
运行方法:
- 确保你已经安装了 Pygame 库,可以使用
pip install pygame命令进行安装。 - 将代码保存为 Python 文件,例如
snake.py。 - 在命令行中运行
python snake.py来运行游戏。
注意:
- 代码中使用了一些 Python 的内置函数,例如
round()、random.randrange()等,你可以根据需要进行调整。 - 游戏的难度可以通过调整
snake_speed和snake_block的值来进行调节。 - 游戏的画面效果可以通过修改代码中的颜色、字体等参数来进行调整。
- 这是一个简单的贪吃蛇游戏示例,你可以根据自己的需求进行扩展和改进。
原文地址: https://www.cveoy.top/t/topic/o34P 著作权归作者所有。请勿转载和采集!