Python实现贪吃蛇
时间: 2023-05-25 20:02:44 浏览: 50
以下是一个简单的贪吃蛇游戏的 Python 实现。
首先,我们需要导入一些需要的包:
```python
import pygame, random
from pygame.locals import *
```
然后我们定义一些常量和初始化一些变量:
```python
# 游戏界面大小
SCREEN_WIDTH = 600
SCREEN_HEIGHT = 480
# 贪吃蛇的默认位置
SNAKE_POSITION = [(SCREEN_WIDTH/2, SCREEN_HEIGHT/2)]
# 贪吃蛇的默认方向(向右)
SNAKE_DIRECTION = 1
# 食物的默认位置
FOOD_POSITION = (0, 0)
# 初始化 Pygame
pygame.init()
# 创建游戏窗口
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
# 初始化时钟
clock = pygame.time.Clock()
# 初始化字体
font = pygame.font.SysFont(None, 36)
# 初始化得分
score = 0
```
然后我们创建一个函数来更新贪吃蛇的位置,同时也要检查蛇是否吃到了食物:
```python
def update_snake():
global SNAKE_POSITION, FOOD_POSITION, score
# 移除蛇尾
SNAKE_POSITION.pop()
# 获取蛇头的坐标
x, y = SNAKE_POSITION[0]
# 根据方向更新蛇头的坐标
if SNAKE_DIRECTION == 0:
y -= 10
elif SNAKE_DIRECTION == 1:
x += 10
elif SNAKE_DIRECTION == 2:
y += 10
elif SNAKE_DIRECTION == 3:
x -= 10
# 添加新蛇头
SNAKE_POSITION.insert(0, (x, y))
# 检查贪吃蛇是否吃到了食物
if SNAKE_POSITION[0] == FOOD_POSITION:
# 添加一个新的蛇头
SNAKE_POSITION.append((x, y))
# 食物重新生成在画面内的随机位置
FOOD_POSITION = (random.randint(0, SCREEN_WIDTH/10-1)*10, random.randint(0, SCREEN_HEIGHT/10-1)*10)
# 增加得分
score += 1
```
接下来,我们创建一个函数来绘制贪吃蛇和食物:
```python
def draw_snake_and_food():
global SNAKE_POSITION, FOOD_POSITION
# 绘制贪吃蛇
for i, pos in enumerate(SNAKE_POSITION):
if i == 0:
pygame.draw.rect(screen, (255, 0, 0), pygame.Rect(pos[0], pos[1], 10, 10))
else:
pygame.draw.rect(screen, (0, 120, 0), pygame.Rect(pos[0], pos[1], 10, 10))
# 绘制食物
pygame.draw.rect(screen, (0, 0, 255), pygame.Rect(FOOD_POSITION[0], FOOD_POSITION[1], 10, 10))
```
然后我们创建一个函数来检查贪吃蛇是否碰到了界面边缘或自身身体:
```python
def check_game_over():
global SNAKE_POSITION
# 碰到了左边界
if SNAKE_POSITION[0][0] < 0:
return True
# 碰到了右边界
if SNAKE_POSITION[0][0] > SCREEN_WIDTH-10:
return True
# 碰到了上边界
if SNAKE_POSITION[0][1] < 0:
return True
# 碰到了下边界
if SNAKE_POSITION[0][1] > SCREEN_HEIGHT-10:
return True
# 碰到了自身身体
if SNAKE_POSITION[0] in SNAKE_POSITION[1:]:
return True
return False
```
最后,我们创建一个循环来驱动游戏:
```python
# 游戏主循环
while True:
# 处理游戏事件
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_UP:
SNAKE_DIRECTION = 0
elif event.key == K_RIGHT:
SNAKE_DIRECTION = 1
elif event.key == K_DOWN:
SNAKE_DIRECTION = 2
elif event.key == K_LEFT:
SNAKE_DIRECTION = 3
# 更新贪吃蛇位置
update_snake()
# 检查游戏是否结束
if check_game_over():
# 游戏结束
screen.blit(font.render("Game Over", True, (255, 255, 255)), (SCREEN_WIDTH/2-70, SCREEN_HEIGHT/2-20))
pygame.display.flip()
pygame.time.wait(2000)
pygame.quit()
sys.exit()
# 绘制贪吃蛇和食物
screen.fill((0, 0, 0))
draw_snake_and_food()
# 绘制得分
screen.blit(font.render("Score: " + str(score), True, (255, 255, 255)), (10, 10))
# 更新屏幕
pygame.display.flip()
# 控制游戏速度
clock.tick(15)
```
到此为止,我们就完成了一个简单的贪吃蛇游戏的 Python 实现。