Python 贪吃蛇游戏
贪吃蛇是一款老少皆宜的经典游戏,在很多平台上都有出现。本文将介绍如何使用 Python 制作贪吃蛇游戏。
首先,我们需要安装 Pygame 库。Pygame 是一个用于制作游戏的 Python 库,可以帮助我们快速绘制游戏界面和处理用户输入。使用 pip 命令安装 Pygame 库:
pip install pygame
接下来,我们需要创建贪吃蛇游戏的主要组成部分:
- 常量定义:定义了游戏中使用到的一些常量,如窗口大小、游戏速度等。
- 贪吃蛇类:表示游戏中的贪吃蛇。贪吃蛇类中定义了贪吃蛇的属性和方法,如贪吃蛇的位置、方向、长度等。
- 食物类:表示游戏中的食物。食物类中定义了食物的属性和方法,如食物的位置、大小等。
游戏主循环:表示游戏的主要逻辑。游戏主循环中,我们不断调用贪吃蛇的 move - 方法来移动贪吃蛇,同时判断贪吃蛇是否吃到了食物,并根据贪吃蛇的移动情况来更新游
游戏主循环中,我们使用 Pygame 的键盘事件来控制贪吃蛇的移动。 直接上代码:(注意: 在运行这个小程序之前,你需要确保已经安装了 Pygame 库。如果你使用的是 Python 3.9,你需要在安装 Pygame 前先安装一个库叫做 Pillow,它是 Pygame 的一个依赖库。)
import pygame
import random
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
BLOCK_SIZE = 20
class Snake:
def __init__(self):
self.x = SCREEN_WIDTH // 2
self.y = SCREEN_HEIGHT // 2
self.dx = 0
self.dy = 0
self.body = [(self.x, self.y)]
self.length = 1
def move(self):
self.x += self.dx
self.y += self.dy
if self.x < 0 or self.x >= SCREEN_WIDTH or self.y < 0 or self.y >= SCREEN_HEIGHT:
pygame.quit()
sys.exit()
self.body.insert(0, (self.x, self.y))
self.body = self.body[:self.length]
class Food:
def __init__(self):
self.x = random.randint(0, SCREEN_WIDTH // BLOCK_SIZE - 1) * BLOCK_SIZE
self.y = random.randint(0, SCREEN_HEIGHT // BLOCK_SIZE - 1) * BLOCK_SIZE
self.size = BLOCK_SIZE
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
snake = Snake()
food = Food()
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
snake.dx = 0
snake.dy = -BLOCK_SIZE
elif event.key == pygame.K_DOWN:
snake.dx = 0
snake.dy = BLOCK_SIZE
elif event.key == pygame.K_LEFT:
snake.dx = -BLOCK_SIZE
snake.dy = 0
elif event.key == pygame.K_RIGHT:
snake.dx = BLOCK_SIZE
snake.dy = 0
snake.move()
if snake.x == food.x and snake.y == food.y:
snake.length += 1
food = Food()
screen.fill((0, 0, 0))
for x, y in snake.body:
pygame.draw.rect(screen, (255, 255, 255), (x, y, BLOCK_SIZE, BLOCK_SIZE))
pygame.draw.rect(screen, (255, 0, 0), (food.x, food.y, food.size, food.size))
pygame.display.flip()
clock.tick(10)
|