Python 贪吃蛇游戏代码实现 - 完整教程
以下是一个简单的 Python 贪吃蛇游戏的代码实现:
import pygame
import random
# 初始化pygame
pygame.init()
# 设置游戏窗口大小
WINDOW_WIDTH = 500
WINDOW_HEIGHT = 500
window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
# 设置游戏标题
pygame.display.set_caption('贪吃蛇游戏')
# 定义游戏的颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
# 定义贪吃蛇的属性
SNAKE_SIZE = 10
snake_speed = 15
# 定义食物的属性
FOOD_SIZE = 10
# 创建一个Clock对象,用于控制游戏帧率
clock = pygame.time.Clock()
# 定义一个函数,用于绘制贪吃蛇
def draw_snake(snake_list):
for snake in snake_list:
pygame.draw.rect(window, GREEN, [snake[0], snake[1], SNAKE_SIZE, SNAKE_SIZE])
# 定义一个函数,用于生成食物
def generate_food():
food_x = round(random.randrange(0, WINDOW_WIDTH - FOOD_SIZE) / 10.0) * 10.0
food_y = round(random.randrange(0, WINDOW_HEIGHT - FOOD_SIZE) / 10.0) * 10.0
return food_x, food_y
# 定义游戏循环
def game_loop():
game_over = False
game_close = False
# 初始化贪吃蛇的位置和长度
snake_x = WINDOW_WIDTH / 2
snake_y = WINDOW_HEIGHT / 2
snake_list = []
snake_length = 1
# 初始化贪吃蛇的移动方向
direction = 'RIGHT'
change_to = direction
# 生成初始的食物
food_x, food_y = generate_food()
# 游戏循环
while not game_over:
# 判断是否有退出事件发生
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
change_to = 'LEFT'
elif event.key == pygame.K_RIGHT:
change_to = 'RIGHT'
elif event.key == pygame.K_UP:
change_to = 'UP'
elif event.key == pygame.K_DOWN:
change_to = 'DOWN'
# 判断贪吃蛇的移动方向是否与当前方向相反,如果是则不允许改变方向
if change_to == 'LEFT' and direction != 'RIGHT':
direction = 'LEFT'
elif change_to == 'RIGHT' and direction != 'LEFT':
direction = 'RIGHT'
elif change_to == 'UP' and direction != 'DOWN':
direction = 'UP'
elif change_to == 'DOWN' and direction != 'UP':
direction = 'DOWN'
# 根据贪吃蛇的移动方向更新贪吃蛇的位置
if direction == 'LEFT':
snake_x -= SNAKE_SIZE
elif direction == 'RIGHT':
snake_x += SNAKE_SIZE
elif direction == 'UP':
snake_y -= SNAKE_SIZE
elif direction == 'DOWN':
snake_y += SNAKE_SIZE
# 判断贪吃蛇是否吃到食物,如果吃到则更新贪吃蛇的长度和分数,并生成新的食物
if snake_x == food_x and snake_y == food_y:
snake_length += 1
food_x, food_y = generate_food()
# 创建贪吃蛇的头部
snake_head = []
snake_head.append(snake_x)
snake_head.append(snake_y)
snake_list.append(snake_head)
# 如果贪吃蛇的长度大于最大长度,则删除贪吃蛇的尾部
if len(snake_list) > snake_length:
del snake_list[0]
# 判断贪吃蛇是否碰到边界或自身,如果碰到则游戏结束
for snake in snake_list[:-1]:
if snake == snake_head:
game_close = True
if snake_x < 0 or snake_x >= WINDOW_WIDTH or snake_y < 0 or snake_y >= WINDOW_HEIGHT:
game_close = True
# 绘制游戏场景
window.fill(BLACK)
pygame.draw.rect(window, RED, [food_x, food_y, FOOD_SIZE, FOOD_SIZE])
draw_snake(snake_list)
pygame.display.update()
# 判断游戏是否结束,如果结束则显示分数并退出游戏循环
if game_close:
font_style = pygame.font.SysFont(None, 50)
message = font_style.render('Game Over! Your score is ' + str(snake_length - 1), True, WHITE)
window.blit(message, [WINDOW_WIDTH / 6, WINDOW_HEIGHT / 3])
pygame.display.update()
pygame.time.delay(2000)
game_over = True
# 控制游戏帧率
clock.tick(snake_speed)
# 退出pygame
pygame.quit()
quit()
# 启动游戏循环
game_loop()
这段代码实现了一个简单的贪吃蛇游戏,玩家通过控制贪吃蛇的移动方向,让贪吃蛇吃到食物,并尽可能地延长贪吃蛇的长度,直到碰到边界或自身游戏结束。在游戏结束时,会显示玩家的分数。
原文地址: https://www.cveoy.top/t/topic/npOb 著作权归作者所有。请勿转载和采集!