📜  定义 Snake (1)

📅  最后修改于: 2023-12-03 15:25:08.881000             🧑  作者: Mango

定义 Snake

Snake(或贪吃蛇)是一种经典的游戏,玩家通过控制一条蛇在一个有限的区域内移动,吃掉食物并避免撞到自己或墙壁。

游戏规则

游戏区域一般为一个矩形,初始时在区域内生成一条蛇和一些食物。玩家通过控制蛇的方向,使其移动到食物位置并吃掉食物。每吃掉一个食物,蛇的长度会增加一个单位,得分也会增加。当蛇头碰到自己的身体或墙壁时,游戏结束。

实现方法

实现 Snake 游戏的方法有很多种,以下是一个基于 Python 的示例实现:

import pygame
import random

# 定义常量
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 480
TILE_SIZE = 20
SNAKE_COLOR = (0, 255, 0)
FOOD_COLOR = (255, 0, 0)

# 初始化 Pygame
pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# 创建时钟
clock = pygame.time.Clock()

# 定义 Snake 类
class Snake:
    def __init__(self):
        self.body = [(10, 10)]
        self.direction = (1, 0)

    def move(self):
        new_head = (self.body[0][0] + self.direction[0], self.body[0][1] + self.direction[1])
        self.body.insert(0, new_head)
        self.body.pop()

    def turn_left(self):
        self.direction = (-1, 0)

    def turn_right(self):
        self.direction = (1, 0)

    def turn_up(self):
        self.direction = (0, -1)

    def turn_down(self):
        self.direction = (0, 1)

    def draw(self):
        for tile in self.body:
            x, y = tile
            pygame.draw.rect(screen, SNAKE_COLOR, (x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE))

    def check_collision(self, other):
        if self.body[0] in other.body:
            return True
        if self.body[0][0] < 0 or self.body[0][0] >= SCREEN_WIDTH / TILE_SIZE or self.body[0][1] < 0 or self.body[0][
            1] >= SCREEN_HEIGHT / TILE_SIZE:
            return True
        return False


# 定义 Food 类
class Food:
    def __init__(self):
        self.position = self.random_position()

    def random_position(self):
        x = random.randint(0, SCREEN_WIDTH / TILE_SIZE - 1)
        y = random.randint(0, SCREEN_HEIGHT / TILE_SIZE - 1)
        return x, y

    def draw(self):
        x, y = self.position
        pygame.draw.rect(screen, FOOD_COLOR, (x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE))


# 初始化 Snake 和 Food
snake = Snake()
food = Food()

# 游戏循环
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:
                snake.turn_left()
            elif event.key == pygame.K_RIGHT:
                snake.turn_right()
            elif event.key == pygame.K_UP:
                snake.turn_up()
            elif event.key == pygame.K_DOWN:
                snake.turn_down()

    # 更新 Snake 和 Food
    snake.move()
    if snake.body[0] == food.position:
        snake.body.append(snake.body[-1])
        food.position = food.random_position()

    # 绘制游戏界面
    screen.fill((0, 0, 0))
    snake.draw()
    food.draw()
    pygame.display.flip()

    # 判断游戏是否结束
    if snake.check_collision(snake) or snake.check_collision(food):
        pygame.quit()
        exit()

    # 控制游戏速度
    clock.tick(5)

以上代码实现了一个基本的 Snake 游戏,包括 Snake 和 Food 的类定义、移动和绘制逻辑、碰撞检测、游戏循环和事件处理等。你可以根据需要对其进行优化和扩展,例如增加难度、加入音效、添加动画效果等。