200行python代码实现贪吃蛇游戏

1.引言

贪吃蛇应该是大家小学时期玩过的经典游戏之一,它可以培养我们的反应速度和眼手协调能力。现在我们可以用代码来实现这个游戏,本文将详细介绍如何实现这个游戏。我们将用到 Python 编程语言、pygame 游戏库以及一些经典的算法来完成游戏。同时我们将讨论如何使用模块、类和函数来组织程序。在完成游戏的过程中,我们还将学习如何调试 Python 代码以及如何使用 Git 保存我们的代码。

2.环境准备

2.1 安装 Python3

我们需要安装 Python3,可以从Python 官网下载安装,也可以使用 Anaconda Python,它是一个科学计算 Python 发行版,已经包含了大部分常用的科学计算工具。

2.2 安装 pygame

我们使用 Pygame 来实现我们的游戏,Pygame 是一种面向 Python 的开放源代码库,用于编写多媒体应用程序,特别是电子游戏。可以通过以下命令在终端安装:

pip install pygame

2.3 创建项目目录

打开命令终端,创建项目目录,并创建文件 game.py。

mkdir snakegame

cd snakegame

touch game.py

2.4 项目结构

我们需要创建以下文件和目录:

.

├── food.py

├── game.py

├── snake.py

└── util.py

我们的主程序文件 game.py 将根据需求导入其它文件,其中 food.py 和 snake.py 包含食物和贪吃蛇的类定义,util.py 包含通用函数和常量定义。

3.实现食物

贪吃蛇游戏中,蛇需要吃食物才能增长,我们先实现食物。在 food.py 文件中创建 Food 类,它具有 x 和 y 属性表示位置,draw 方法在屏幕上绘制食物:

# food.py

import random

import pygame as pg

import util

class Food:

def __init__(self, snake):

self.x, self.y = self.new_position(snake)

def new_position(self, snake):

while True:

x, y = random.randrange(util.WIDTH), random.randrange(util.HEIGHT)

if (x, y) not in snake.body:

return x, y

def draw(self, screen):

pg.draw.rect(screen, util.RED, (self.x * util.CELL_SIZE, self.y * util.CELL_SIZE,

util.CELL_SIZE, util.CELL_SIZE))

Food 类的构造方法需要一个 Snake 的实例作为参数,它使用 new_position 方法来获得随机位置,避免食物出现在蛇的身体上。draw 方法绘制一个红色的矩形,表示食物。

4.实现贪吃蛇

4.1 蛇的初始化

在 snake.py 文件中创建 Snake 类,它具有 body、direction 属性和 move 方法。body 属性是一个列表,用于存储蛇的所有身体部分的位置。构造方法来初始化蛇的起始位置,它的长度为 3。

# snake.py

import util

class Snake:

def __init__(self):

self.body = [(util.WIDTH // 2, util.HEIGHT // 2),

(util.WIDTH // 2, util.HEIGHT // 2 + 1),

(util.WIDTH // 2, util.HEIGHT // 2 + 2)]

self.direction = util.Direction.UP

def move(self, game):

head = self.body[0]

if self.direction == util.Direction.UP:

new_head = (head[0], head[1] - 1)

elif self.direction == util.Direction.DOWN:

new_head = (head[0], head[1] + 1)

elif self.direction == util.Direction.LEFT:

new_head = (head[0] - 1, head[1])

elif self.direction == util.Direction.RIGHT:

new_head = (head[0] + 1, head[1])

self.body.insert(0, new_head)

if not game.food:

game.new_food()

if new_head == game.food.position:

game.score += 1

game.food = None

else:

self.body.pop()

Snake 类的 move 方法更新蛇的身体位置,同时检查蛇是否吃到了食物,如果吃到了,蛇会变长一段,分数也会增加。

4.2 控制蛇的移动

我们需要一个方法来控制贪吃蛇的移动。这个方法将等待用户的输入来改变方向。我们可以在 game.py 中实现它。

# game.py

import pygame as pg

import food

import snake

import util

class Game:

def __init__(self):

pg.init()

self.screen = pg.display.set_mode((util.WIDTH * util.CELL_SIZE, util.HEIGHT * util.CELL_SIZE))

pg.display.set_caption('贪吃蛇')

self.clock = pg.time.Clock()

self.snake = snake.Snake()

self.food = None

self.score = 0

self.new_food()

def event_loop(self):

for event in pg.event.get():

if event.type == pg.QUIT:

self.quit()

elif event.type == pg.KEYDOWN:

if event.key == pg.K_UP:

self.snake.direction = util.Direction.UP

elif event.key == pg.K_DOWN:

self.snake.direction = util.Direction.DOWN

elif event.key == pg.K_LEFT:

self.snake.direction = util.Direction.LEFT

elif event.key == pg.K_RIGHT:

self.snake.direction = util.Direction.RIGHT

def update(self):

self.snake.move(self)

if self.is_over():

self.quit()

def draw(self):

self.screen.fill(util.BLACK)

pg.draw.rect(self.screen, util.WHITE, (0, 0, util.WIDTH * util.CELL_SIZE, util.HEIGHT * util.CELL_SIZE), 1)

self.snake.draw(self.screen)

if self.food:

self.food.draw(self.screen)

self.draw_score()

pg.display.update()

def draw_score(self):

font = pg.font.SysFont('arial', 18)

text = font.render('得分: %d' % self.score, True, util.WHITE)

self.screen.blit(text, (10, util.HEIGHT * util.CELL_SIZE - 20))

def new_food(self):

self.food = food.Food(self.snake)

def is_over(self):

return (self.snake.body[0][0] < 0 or self.snake.body[0][0] >= util.WIDTH or

self.snake.body[0][1] < 0 or self.snake.body[0][1] >= util.HEIGHT or

self.snake.body[0] in self.snake.body[1:])

def quit(self):

pg.quit()

quit()

def main():

game = Game()

while True:

game.event_loop()

game.update()

game.draw()

game.clock.tick(util.FPS)

if __name__ == '__main__':

main()

event_loop 方法等待用户的输入,并改变蛇的方向。update 方法更新蛇的位置和食物,同时检查游戏是否结束。draw 方法绘制游戏场景和得分。

5.结束

在这篇文章中,我们学习了如何使用 Python 以及 pygame 库来实现贪吃蛇游戏。我们还讨论了如何使用 Git 来管理我们的代码。在此基础上,我们可以扩展这个游戏,例如增加难度和级别、增加游戏声音和更好的图形界面等等。希望你可以继续探索和学习 Python 编程语言。

后端开发标签