python 贪吃蛇
时间: 2023-10-12 15:11:22 浏览: 41
很好,下面是一个简单的Python贪吃蛇游戏示例:
```python
import pygame
import random
# 初始化Pygame
pygame.init()
# 设置游戏窗口大小和标题
WINDOW_WIDTH = 500
WINDOW_HEIGHT = 500
GAME_WINDOW = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption('贪吃蛇')
# 定义颜色常量
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# 定义贪吃蛇和食物的大小
BLOCK_SIZE = 10
# 定义游戏时钟
CLOCK = pygame.time.Clock()
# 定义字体
FONT = pygame.font.SysFont(None, 25)
# 绘制文字函数
def draw_text(text, color, x, y):
text_obj = FONT.render(text, True, color)
GAME_WINDOW.blit(text_obj, (x, y))
# 绘制方块函数
def draw_block(color, x, y):
pygame.draw.rect(GAME_WINDOW, color, [x, y, BLOCK_SIZE, BLOCK_SIZE])
# 主函数
def main():
game_over = False
# 初始化贪吃蛇
snake_pos = [100, 50]
snake_body = [[100, 50], [90, 50], [80, 50]]
# 初始化食物
food_pos = [random.randrange(1, (WINDOW_WIDTH // BLOCK_SIZE)) * BLOCK_SIZE,
random.randrange(1, (WINDOW_HEIGHT // BLOCK_SIZE)) * BLOCK_SIZE]
food_exist = True
# 初始化移动方向
direction = 'RIGHT'
change_to = direction
# 循环检测事件
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
change_to = 'UP'
elif event.key == pygame.K_DOWN:
change_to = 'DOWN'
elif event.key == pygame.K_LEFT:
change_to = 'LEFT'
elif event.key == pygame.K_RIGHT:
change_to = 'RIGHT'
# 检查是否移动到相反的方向
if change_to == 'UP' and direction != 'DOWN':
direction = 'UP'
elif change_to == 'DOWN' and direction != 'UP':
direction = 'DOWN'
elif change_to == 'LEFT' and direction != 'RIGHT':
direction = 'LEFT'
elif change_to == 'RIGHT' and direction != 'LEFT':
direction = 'RIGHT'
# 根据方向移动贪吃蛇头部
if direction == 'UP':
snake_pos[1] -= BLOCK_SIZE
elif direction == 'DOWN':
snake_pos[1] += BLOCK_SIZE
elif direction == 'LEFT':
snake_pos[0] -= BLOCK_SIZE
elif direction == 'RIGHT':
snake_pos[0] += BLOCK_SIZE
# 添加贪吃蛇头部位置到身体列表
snake_body.insert(0, list(snake_pos))
# 检查是否吃到食物
if snake_pos == food_pos:
food_exist = False
else:
snake_body.pop()
# 生成新的食物
if not food_exist:
food_pos = [random.randrange(1, (WINDOW_WIDTH // BLOCK_SIZE)) * BLOCK_SIZE,
random.randrange(1, (WINDOW_HEIGHT // BLOCK_SIZE)) * BLOCK_SIZE]
food_exist = True
# 绘制游戏窗口
GAME_WINDOW.fill(BLACK)
for pos in snake_body:
draw_block(GREEN, pos[0], pos[1])
draw_block(RED, food_pos[0], food_pos[1])
draw_text('Score: {}'.format(len(snake_body) - 3), WHITE, 10, 10)
pygame.display.update()
# 检查是否碰到墙壁或自身
if snake_pos[0] < 0 or snake_pos[0] > WINDOW_WIDTH - BLOCK_SIZE or \
snake_pos[1] < 0 or snake_pos[1] > WINDOW_HEIGHT - BLOCK_SIZE or \
snake_pos in snake_body[1:]:
game_over = True
# 控制游戏帧数
CLOCK.tick(20)
# 关闭Pygame
pygame.quit()
quit()
# 调用主函数
main()
```
运行后会出现一个黑色的游戏窗口,贪吃蛇初始位置在左上角,食物随机生成。使用方向键控制贪吃蛇移动,吃到食物后贪吃蛇变长,得分加1。当贪吃蛇碰到墙壁或自身时,游戏结束。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)