用Python做贪吃蛇
时间: 2023-11-19 19:05:58 浏览: 84
好的,让我们来实现一个简单的贪吃蛇游戏。
首先,我们需要导入 `pygame` 模块来创建游戏窗口和绘制图形。如果你还没有安装它,可以使用以下命令进行安装:
```
pip install pygame
```
接下来,我们需要定义一些常量和变量来描述游戏状态。以下是我们将使用的一些常量:
```python
import pygame
import random
# 游戏窗口大小
WINDOW_WIDTH = 600
WINDOW_HEIGHT = 600
# 贪吃蛇方块大小
BLOCK_SIZE = 20
# 贪吃蛇移动速度
SNAKE_SPEED = 10
# 食物颜色
FOOD_COLOR = (255, 0, 0)
# 贪吃蛇颜色
SNAKE_COLOR = (0, 255, 0)
# 游戏背景颜色
BACKGROUND_COLOR = (0, 0, 0)
```
我们还需要一些变量来跟踪游戏状态:
```python
# 初始化 pygame
pygame.init()
# 创建游戏窗口
window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption("Snake Game")
# 创建时钟对象用于控制帧率
clock = pygame.time.Clock()
# 初始化贪吃蛇位置和长度
snake = [(WINDOW_WIDTH // 2, WINDOW_HEIGHT // 2)]
snake_length = 1
# 初始化贪吃蛇移动方向
direction = "right"
# 创建食物位置
food = (random.randint(0, WINDOW_WIDTH // BLOCK_SIZE - 1) * BLOCK_SIZE,
random.randint(0, WINDOW_HEIGHT // BLOCK_SIZE - 1) * BLOCK_SIZE)
```
现在,我们可以编写游戏主循环了。在每个游戏循环中,我们需要处理用户输入、更新游戏状态、绘制游戏图形等。
```python
# 游戏主循环
while True:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
# 用户关闭游戏窗口
pygame.quit()
exit()
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.insert(0, (snake[0][0] - BLOCK_SIZE, snake[0][1]))
elif direction == "right":
snake.insert(0, (snake[0][0] + BLOCK_SIZE, snake[0][1]))
elif direction == "up":
snake.insert(0, (snake[0][0], snake[0][1] - BLOCK_SIZE))
elif direction == "down":
snake.insert(0, (snake[0][0], snake[0][1] + BLOCK_SIZE))
# 判断是否吃到食物
if snake[0] == food:
food = (random.randint(0, WINDOW_WIDTH // BLOCK_SIZE - 1) * BLOCK_SIZE,
random.randint(0, WINDOW_HEIGHT // BLOCK_SIZE - 1) * BLOCK_SIZE)
snake_length += 1
# 删除多余的贪吃蛇方块
if len(snake) > snake_length:
snake.pop()
# 绘制游戏图形
window.fill(BACKGROUND_COLOR)
pygame.draw.rect(window, FOOD_COLOR, (food[0], food[1], BLOCK_SIZE, BLOCK_SIZE))
for i, block in enumerate(snake):
pygame.draw.rect(window, SNAKE_COLOR, (block[0], block[1], BLOCK_SIZE, BLOCK_SIZE))
pygame.display.update()
# 控制帧率
clock.tick(SNAKE_SPEED)
```
好了,现在你可以运行这个程序,来体验一下贪吃蛇游戏了。如果你想增加游戏难度,可以尝试添加碰撞检测、分数统计等功能。
阅读全文