基于pygame的贪吃蛇游戏
概述
Pygame是一种流行的Python游戏开发库,它提供了许多功能,使开发人员可以轻松创建2D游戏。本文使用pygame库实现了一个基本的贪吃蛇游戏,包括蛇的移动、食物的生成、分数的计算和显示、背景音乐、游戏音效、游戏结束的判断等功能。
设计思路
本文的实现包括以下几个类:
- Timer时间类:通过time库实现计时功能。
- Snake蛇类:存储蛇的信息,例如:蛇的移动速度、蛇的身体坐标、蛇的移动方向、蛇的得分等。实现蛇移动的功能。
- GameSet游戏设置类:游戏界面大小等设置。
- GameColor游戏颜色类:游戏所需颜色的设置。
- Game类:游戏运行主体,包括游戏开始、游戏结束、食物位置随机生成等功能。
涉及知识点
-
开发工具:Python3.8 , PyCharm2022
-
Pygame库是专门为了帮助用户做出的游戏和其他多媒体应用Python编程语言的一个开放源代码模块。Pygame游戏开发框架图如下所示:
-
Time模块主要用于处理时间戳和一些基本的时间操作。
-
Python内置的random库主要用于产生各种分布的伪随机数序列。
-
pygame.Surface对象是pygame的绘图层,或绘图平面,或图层,用于展示图形、文字或图像的绘制效果。
-
pygame.draw中相关方法绘制矩形、直线、多边形、圆形等各种常见图形。
-
pygame.font.Font()可以创建字体对象,调用一个字体对象的render()方法可以生成文本Surface对象,通过Surface对象的blit()方法,可将相应文本绘制到指定屏幕上。
-
pygame.mixer.Sound(music_path)方法可以用于加载音乐,生成一个Sound对象。
核心代码
运行入口
def main():
pygame.init() # 模块初始化
snake_speed_clock = pygame.time.Clock() # 创建Pygame时钟对象
screen = pygame.display.set_mode((GameSet.windows_width, GameSet.windows_height))
screen.fill(GameColor.white)
pygame.display.set_caption("贪吃蛇") # 设置标题
game = Game(snake_speed_clock, screen)
game.game_start()
while True:
game.game_running()
game.game_over()
Timer类
class Timer:
def __init__(self):
self.start_time = time.time()
def now_time(self):
return round(time.time() - self.start_time, 1)
Snake类
class Snake:
def __init__(self):
self.snake_speed = 8 # 贪吃蛇的速度
start_y = GameSet.map_height / 2 # 贪吃蛇从页面左边的中间出生
self.snake_body = [{
'x': 4, 'y': start_y},
{
'x': 3, 'y': start_y},
{
'x': 2, 'y': start_y}]
self.direction = GameSet.RIGHT # 开始时向右移动
self.alive = True # 贪吃蛇是否存活
self.score = 0 # 贪吃蛇分数
def move(self):
if self.direction == GameSet.UP:
new_head = {
'x': self.snake_body[0]['x'], 'y': self.snake_body[0]['y'] - 1}
elif self.direction == GameSet.DOWN:
new_head = {
'x': self.snake_body[0]['x'], 'y': self.snake_body[0]['y'] + 1}
elif self.direction == GameSet.LEFT:
new_head = {
'x': self.snake_body[0]['x'] - 1, 'y': self.snake_body[0]['y']}
else:
new_head = {
'x': self.snake_body[0]['x'] + 1, 'y': self.snake_body[0]['y']}
self.snake_body.insert(0, new_head)
# 蛇碰到墙壁 蛇死亡
if self.snake_body[0]['x'] == -1 or self.snake_body[0]['x'] == GameSet.map_width or self.snake_body[0][
'y'] == -1 or \
self.snake_body[0]['y'] == GameSet.map_height:
self.alive = False
# 蛇碰到自己身体 蛇死亡
for snake_body in self.snake_body[1:]:
if snake_body['x'] == self.snake_body[0]['x'] and snake_body['y'] == self.snake_body[0]['y']:
self.alive = False
def is_eat_food(self, food):
if self.snake_body[0]['x'] == food['x'] and self.snake_body[0]['y'] == food['y']:
# 蛇吃到食物, 获得分数
self.score += 1
return True
else:
del self.snake_body[-1] # 如果没有吃到实物, 就向前移动, 尾部一格删掉
return False
GameSet类
class GameSet:
windows_width = 1200
windows_height = 800
cell_size = 50
map_width = int(windows_width / cell_size)
map_height = int(windows_height / cell_size)
UP = 1
DOWN = 2
LEFT = 3
RIGHT = 4
GameColor类
class GameColor:
white = (255, 255, 255)
black = (0, 0, 0)
# 背景颜色
gray = (241, 242, 242)
dark_gray = (40, 40, 40)
# 食物颜色
Red = (246, 99, 143)
# 蛇的身体的颜色
blue = (106, 205, 253)
dark_blue = (87, 172, 212)
播放背景音乐方法
def play_music():
pygame.mixer.music.load('music.mp3')
pygame.mixer.music.set_volume(0.3)
pygame.mixer

本文使用Python的pygame库实现基本贪吃蛇游戏,涵盖蛇移动、食物生成、分数计算等功能。介绍了设计思路,涉及Timer、Snake等类,还提及开发工具及相关知识点,如Time模块、random库等,最后展示运行界面和源代码。
最低0.47元/天 解锁文章
488

被折叠的 条评论
为什么被折叠?



