笔者参考《Python编程从入门到实践》、开源代码等资源,写了一个简单的贪吃蛇游戏。
最初学习pygame库的时候遇到的难点笔者也深有体会,所以为了方便新手学习理解,特地将注释写的非常详细。因此不再进行多余讲解。阅读需要一定pygame库基础知识。阅读代码不理解时请及时查阅pygame官方英文文档,会有详细介绍。
游戏由下图几部分组成:
因为工程量较小,笔者使用IDLE开发,整个游戏由这6个文件组成。双击run_game文件运行游戏。
food文件包含食物类,包含图片初始化、置于随机位置、获得食物坐标、获得外接矩形、绘制食物功能。
snake文件包含蛇类、初始化蛇头、获得各点位置列表、移动蛇、吃掉食物、绘制蛇功能。
settings文件包含设置类、修改速度、窗口大小、背景颜色功能,便于修改设置。
response文件包含响应鼠标键盘事件、修改移动方向、控制蛇移动功能。
run_game文件为运行文件,协调各文件。功能详见代码。
apple2为图片,用于加载食物。
以下是具体代码:
food文件:
import pygame
import random
class Food:
"""食物类"""
def __init__(self,screen):
"""随机初始化第一个食物的位置"""
self.screen = screen
#加载食物图片并获取外接矩形 (pygame通过外接矩阵操作图片)
self.image = pygame.image.load('apple2.png')
#获得图片外接矩阵
self.rect = self.image.get_rect()
#随机获得图片中心横纵坐标
#(randint获得10~490的int类型随机数,包括10和490)
#(rect.centerx为中心横坐标)
self.rect.centerx = random.randint(20,480)
self.rect.centery = random.randint(20,480)
def reinit(self):
""" 随机获得一个食物,并返回食物坐标"""
self.rect.centerx = random.randint(20,480)
self.rect.centery = random.randint(20,480)
return [self.rect.centerx,self.rect.centery]
def position(self):
""" 返回食物坐标"""
return [self.rect.centerx,self.rect.centery]
def foodrect(self):
"""返回外接矩矩形"""
return self.rect
def blitme(self):
"""在指定位置绘制食物"""
self.screen.blit(self.image,self.rect)
response文件:
import pygame
#初始化移动状态,使一开始向上移动
move_u