摘要
本项目基于PyCharm,实现了彩图版飞机大战游戏这款小游戏。Pygame是python的一个package,是一个经典的游戏制作包,可以完成大部分2D游戏制作。下面是游戏的玩法及一些功能的介绍。
在PyCharm中运行《彩图版飞机大战》即可进入如图1所示的游戏界面。
图1 游戏主界面
具体的操作步骤如下:
(1)玩游戏
。在游戏主界面中,从屏幕的顶部不断出现下落的敌机,玩家按下键盘上的↑、↓、←、→方向键移动飞机的位置并且发射子弹打掉敌机,每打掉一只敌机得100分。当玩家飞机与敌机发生碰撞时游戏结束,同时显示游戏得分以及排行榜按钮,游戏结束界面如图2所示。
图2 游戏结束界面
(2)查看排行榜。
在游戏结束界面中,单击“排行榜”按钮,将显示排行榜界面,如图3所示。在该界面中,如果想重新玩游戏,可以单击“重新开始”按钮。
图3 游戏排行榜界面
**
1.引言
1.1 需求分析
本项目实现的彩图版飞机大战小游戏应具备以下功能:
记录分数;
敌机被击中动画;
玩家飞机爆炸动画;
使用文件保存分数,用排行榜的形式表现出来。
2. 系统结构
2.1系统功能结构图
2.2 文件夹组织结构
2.3 开发环境及工具
操作系统: Windows7、 Windows10;
开发工具: PyCharm;
Python版本: Python3.7;
Python内置模块:sys、 random、 codecs;
第三方模块: pygame
注意:在使用第三方模块时,首先需要使用pip install命令安装该模块,例 如,安装pygame模块,可以在Python命令窗口中执行以下命令:
pip install pygame
3. 实现代码。
3.1 通过 pygame模块实现飞机大战的主窗体,先要理清开发流程和实现技术。
具体步骤如下:
(1)创建名称为foo的文件夹,该文件夹用于保存飞机大战游戏的项目文件,并在该文件夹中创建 resources文件夹用于保存项目资源,在 resources文件夹中创建 Image用于保存游戏中所使用的图片资源。最后在foo项目文件夹中创建 main. py文件,在该文件中编写实现飞机大战的游戏代码。
图片资源
(2)导入pygame库与pygame中的常量库,然后定义窗体的高度和宽度:
import pygame # 导入pygame库
from pygame.locals import * # 导入pygame库中的一些常量
from sys import exit # 导入sys库中的exit函数
import random
import codecs
#设置游戏屏幕大小
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 800
(3)接下来进行 pygame的初始化工作,设置窗体的名称和图标,再创建窗体实例并设置窗体的大小以及背景色,最后通过循环实现窗体的显示与刷新:
#初始化 pygame
pygame.init()
#设置游戏界面大小
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
#游戏界面标题
pygame.display.set_caption('彩图版飞机大战')
#图标
ic_launcher = pygame.image.load('resources/image/ic_launcher.png').convert_alpha()
pygame.display.set_icon(ic_launcher)
#背景图
background = pygame.image.load('resources/image/background.png').convert_alpha()
def startGame():
# 游戏循环帧率设置
clock = pygame.time.Clock()
# 判断游戏循环退出的参数
running = True
# 游戏主循环
while running:
# 绘制背景
screen.fill(0)
screen.blit(background, (0, 0))
# 控制游戏最大帧率为 60
clock.tick(60)
# 更新屏幕
pygame.display.update()
# 处理游戏退出
for evet in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
starGame()
3.2 本游戏元素包含玩家飞机、敌机及子弹。用户可以通过键盘移动玩家飞机在屏幕上的位置来打击不同位置的敌机。因此设计 Player、 Enemy和 Bullet三个类对应的三种游戏精灵。对于Player,需要的操作有射击和移动两种,移动又分为上、下、左、右4种情况。对于 Enemy,则比较简单,只需要移动即可,从屏幕上方出现并移动到屏幕下方。对于 Bullet,与飞机相同,仅需要以一定速度移动即可。
# 子弹类
class Bullet(pygame.sprite.Sprite):
def __init__(self, bullet_img, init_pos):
# 调用了父类的初始化方法来初始化sprite的属性
pygame.sprite.Sprite.__init__(self)# 调用了父类的初始化方法来初始化sprite的属性
self.image = bullet_img
self.rect = self.image.get_rect()
self.rect.midbottom = init_pos
self.speed = 10
def move(self):
self.rect.top -= self.speed
#玩家飞机类
class Player(pygame.sprite.Sprite):
def __init__(self