写一个贪吃蛇的python程序
时间: 2023-10-05 22:06:30 浏览: 51
以下是一个简单的贪吃蛇Python程序,使用了Pygame库来实现游戏界面和交互:
```python
import pygame
import random
# 初始化pygame库
pygame.init()
# 定义游戏界面的宽度和高度
width = 400
height = 400
# 定义蛇和食物的大小
block_size = 10
# 定义游戏界面的颜色
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
# 创建游戏界面
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('贪吃蛇')
# 定义游戏时钟
clock = pygame.time.Clock()
# 定义蛇的初始位置和长度
snake_pos = [width//2, height//2]
snake_body = [[width//2, height//2], [width//2-block_size, height//2], [width//2-2*block_size, height//2]]
# 定义食物的初始位置
food_pos = [random.randrange(0, width-block_size, block_size), random.randrange(0, height-block_size, block_size)]
# 定义蛇的初始方向
direction = 'RIGHT'
# 定义函数:绘制蛇
def draw_snake(snake_body):
for pos in snake_body:
pygame.draw.rect(screen, black, pygame.Rect(pos[0], pos[1], block_size, block_size))
# 定义函数:生成食物
def generate_food():
food_x = random.randrange(0, width-block_size, block_size)
food_y = random.randrange(0, height-block_size, block_size)
return [food_x, food_y]
# 定义函数:判断蛇是否吃到食物
def is_eaten(snake_pos, food_pos):
return snake_pos[0] == food_pos[0] and snake_pos[1] == food_pos[1]
# 定义函数:判断蛇是否撞墙或撞到自己
def is_game_over(snake_body):
return snake_body[0][0] < 0 or snake_body[0][0] > width-block_size or snake_body[0][1] < 0 or snake_body[0][1] > height-block_size or snake_body[0] in snake_body[1:]
# 游戏主循环
while True:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT and direction != 'RIGHT':
direction = 'LEFT'
elif event.key == pygame.K_RIGHT and direction != 'LEFT':
direction = 'RIGHT'
elif event.key == pygame.K_UP and direction != 'DOWN':
direction = 'UP'
elif event.key == pygame.K_DOWN and direction != 'UP':
direction = 'DOWN'
# 更新蛇的位置
if direction == 'LEFT':
snake_pos[0] -= block_size
elif direction == 'RIGHT':
snake_pos[0] += block_size
elif direction == 'UP':
snake_pos[1] -= block_size
elif direction == 'DOWN':
snake_pos[1] += block_size
snake_body.insert(0, list(snake_pos))
# 判断是否吃到食物
if is_eaten(snake_pos, food_pos):
food_pos = generate_food()
else:
snake_body.pop()
# 判断游戏是否结束
if is_game_over(snake_body):
pygame.quit()
quit()
# 绘制游戏界面
screen.fill(white)
draw_snake(snake_body)
pygame.draw.rect(screen, red, pygame.Rect(food_pos[0], food_pos[1], block_size, block_size))
pygame.display.update()
# 控制游戏帧率
clock.tick(10)
```
这个程序实现了基本的贪吃蛇游戏功能,玩家可以通过方向键来控制蛇的移动方向,吃到食物后蛇的长度会增加,当蛇撞墙或撞到自己时游戏结束。