python贪吃蛇代码
1. 简介
贪吃蛇(Snake)是一款经典的游戏,它最早出现在20世纪70年代,很快就流行起来。贪吃蛇的规则非常简单,玩家通过控制一条蛇的移动来吃食物,每吃一个食物,蛇的长度会增加一节。游戏结束的条件是蛇撞到自己的身体或者撞到墙壁。
在本文中,我们将使用Python编写一个简单的贪吃蛇游戏。
2. 游戏界面设计
我们首先需要创建游戏的界面。在Python中,我们可以使用pygame
库来实现游戏界面的创建和管理。首先,我们需要导入pygame
库,并初始化游戏。
import pygame
# 初始化pygame
pygame.init()
# 创建游戏窗口
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
接下来,我们需要在游戏界面上绘制蛇的初始位置和食物。我们可以使用pygame.draw.rect
函数来绘制矩形,表示蛇和食物。
# 绘制蛇
snake_x, snake_y = 100, 100
snake_size = 20
snake_color = (0, 255, 0)
pygame.draw.rect(screen, snake_color, (snake_x, snake_y, snake_size, snake_size))
# 绘制食物
food_x, food_y = 200, 200
food_size = 20
food_color = (255, 0, 0)
pygame.draw.rect(screen, food_color, (food_x, food_y, food_size, food_size))
# 刷新界面
pygame.display.update()
运行上述代码,可以看到一个黑色的游戏窗口,上面有一个绿色的方块表示蛇,一个红色的方块表示食物。
3. 控制蛇的移动
接下来,我们需要实现玩家控制蛇的移动。我们可以使用键盘的上、下、左、右箭头键来控制蛇的移动方向。
# 控制蛇的移动
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
snake_y -= snake_size
elif event.key == pygame.K_DOWN:
snake_y += snake_size
elif event.key == pygame.K_LEFT:
snake_x -= snake_size
elif event.key == pygame.K_RIGHT:
snake_x += snake_size
# 清空界面
screen.fill((0, 0, 0))
# 绘制蛇
pygame.draw.rect(screen, snake_color, (snake_x, snake_y, snake_size, snake_size))
# 绘制食物
pygame.draw.rect(screen, food_color, (food_x, food_y, food_size, food_size))
# 刷新界面
pygame.display.update()
运行上述代码,可以使用箭头键来控制蛇的移动。蛇会根据按键的方向进行相应的移动。
4. 判断蛇吃到食物
在游戏中,我们需要判断蛇是否吃到了食物。当蛇的头和食物重合时,我们认为蛇吃到了食物,并更新食物的位置。
# 判断蛇是否吃到食物
if snake_x == food_x and snake_y == food_y:
# 生成新的食物位置
food_x = random.randint(0, width // snake_size - 1) * snake_size
food_y = random.randint(0, height // snake_size - 1) * snake_size
# 增加蛇的长度
# ...
# 绘制蛇
pygame.draw.rect(screen, snake_color, (snake_x, snake_y, snake_size, snake_size))
# 绘制食物
pygame.draw.rect(screen, food_color, (food_x, food_y, food_size, food_size))
# 刷新界面
pygame.display.update()
在上述代码中,我们使用random.randint
函数来生成一个新的食物位置,然后更新食物的坐标。同时,我们需要增加蛇的长度,具体的实现方式将在下文中介绍。
5. 蛇的移动和长度增加
在贪吃蛇游戏中,蛇会不断地向前移动,而且蛇的长度会随着吃食物而增加。为了实现这个功能,我们可以使用一个列表来表示蛇的身体,列表的第一个元素表示蛇的头部,后面的元素表示蛇的身体。
# 初始蛇的长度为1
snake_body = [(snake_x, snake_y)]
# 绘制蛇的身体
for x, y in snake_body:
pygame.draw.rect(screen, snake_color, (x, y, snake_size, snake_size))
# 判断蛇是否吃到食物
if snake_x == food_x and snake_y == food_y:
# 生成新的食物位置
food_x = random.randint(0, width // snake_size - 1) * snake_size
food_y = random.randint(0, height // snake_size - 1) * snake_size
# 增加蛇的长度
snake_body.append((food_x, food_y))
# 绘制蛇的身体
for x, y in snake_body:
pygame.draw.rect(screen, snake_color, (x, y, snake_size, snake_size))
# 刷新界面
pygame.display.update()
在上述代码中,我们使用snake_body
列表来保存蛇的身体的坐标。当蛇吃到食物时,我们通过snake_body.append
函数将新的身体坐标添加到列表末尾。然后,我们可以使用一个循环来绘制蛇的身体。
6. 游戏结束的判断
最后,我们需要添加游戏结束的判断条件。游戏结束的条件可以是蛇撞到自己的身体或者撞到墙壁。
# 判断蛇是否撞到自己的身体
if (snake_x, snake_y) in snake_body[1:]:
# 游戏结束
# ...
# 判断蛇是否撞到墙壁
if snake_x < 0 or snake_x >= width or snake_y < 0 or snake_y >= height:
# 游戏结束
# ...
在上述代码中,我们通过判断蛇的头部坐标是否在蛇的身体列表中来判断蛇是否撞到自己的身体。同时,我们还判断了蛇的头部坐标是否超出了游戏界面的边界,来判断蛇是否撞到墙壁。
7. 完整代码
下面是完整的贪吃蛇游戏的代码:
import pygame
import random
import sys
# 初始化pygame
pygame.init()
# 创建游戏窗口
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
# 蛇的初始位置和大小
snake_x, snake_y = 100, 100
snake_size = 20
snake_color = (0, 255, 0)
# 食物的初始位置和大小
food_x, food_y = 200, 200
food_size = 20
food_color = (255, 0, 0)
# 初始蛇的长度为1
snake_body = [(snake_x, snake_y)]
# 控制蛇的移动
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
snake_y -= snake_size
elif event.key == pygame.K_DOWN:
snake_y += snake_size
elif event.key == pygame.K_LEFT:
snake_x -= snake_size
elif event.key == pygame.K_RIGHT:
snake_x += snake_size
# 清空界面
screen.fill((0, 0, 0))
# 判断蛇是否吃到食物
if snake_x == food_x and snake_y == food_y:
# 生成新的食物位置
food_x = random.randint(0, width // snake_size - 1) * snake_size
food_y = random.randint(0, height // snake_size - 1) * snake_size
# 增加蛇的长度
snake_body.append((food_x, food_y))
# 判断蛇是否撞到自己的身体
if (snake_x, snake_y) in snake_body[1:]:
# 游戏结束
pygame.quit()
sys.exit()
# 判断蛇是否撞到墙壁
if snake_x < 0 or snake_x >= width or snake_y < 0 or snake_y >= height:
# 游戏结束
pygame.quit()
sys.exit()
# 绘制蛇的身体
for x, y in snake_body:
pygame.draw.rect(screen, snake_color, (x, y, snake_size, snake_size))
# 绘制食物
pygame.draw.rect(screen, food_color, (food_x, food_y, food_size, food_size))
# 刷新界面
pygame.display.update()
8. 运行结果
运行上述代码,可以看到一个游戏窗口,蛇会根据键盘的上、下、左、右箭头键进行相应的移动。当蛇吃到食物时,蛇的长度会增加,而当蛇撞到自己的身体或者撞到墙壁时,游戏结束。