基于Python的飞机大战游戏系统设计与实现

摘 要
作为早期最经典游戏之一的飞机大战,它是一种传统的电脑游戏,经常出现在便携式终端、手机和计算机中。可是,传统的飞行游戏是一个二次元平面上的,用黑白制作的居多。然而,随着计算机 络的飞速发展,在电脑上可以看到多种颜色的飞机大战。
Python是一种目前广泛使用的语言,非常受使用者们的欢迎,因其自身的优越性很快就得到了迅速的发展。这对C++,java等今年来流行的语言造成了很强的影响。拥有良好的通用性,作业迅速,良好的跨平台和稳性是Python技术的优点,目前,像个人电脑、数据操作、电脑和手机游戏后台、手机移动端和计算机应用的很多方面都在使用Python作为开发语言,技术稳定成熟,缩短开发时间,重复性好,在线扩展方便。
本游戏是一个基于面向对象编程思想,选用Python开发语言,Pycharm为开发工具,而实现于PC端的一款飞机大战游戏。该游戏操作灵活简单,趣味性较强,玩家可以通过键盘进行游戏操作,通过移动躲避敌方飞机子弹,并发射子弹消灭敌方飞机,从而获取积分。游戏主要涉及了实现飞机移动、发射子弹、多条生命、碰撞检测、敌方飞机血量检测、事件监听、发放补给包,刷新游戏画面及音乐,记录游戏分数和使用者的信息,使游戏界面更多样化,展现出游戏的整体的开发创新流程和设计想法。

关键词:飞机大战;电脑游戏;Python;

Design and Implementation of Aircraft Battle System Based on Python
Abstract
As one of the most classic games in the early days of Aircraft Warfare, it is a traditional computer game, often appearing in portable terminals, mobile phones and computers. However, the traditional flight game is a quadratic plane, mostly made in black and white. However, with the rapid development of computer network, we can see many kinds of color fights on the computer.
Python is a widely used language, which is very popular with users. Because of its own advantages, it has been rapidly developed. This has a strong impact on C++, Java and other popular languages this year. Python technology has the advantages of good versatility, rapid operation, good cross-platform and stability. At present, Python is used as the development language in many aspects, such as personal computers, data manipulation, computer and mobile game backstage, mobile phones and computer applications. The technology is stable and mature, shortens the development time, has good repeatability, and is easy to expand online.
This game is based on the idea of object-oriented programming, using Python development language, Pycharm as a development tool, and implemented on the PC side of an aircraft war game. The game is flexible, simple and interesting. Players can operate the game by keyboard, evade enemy aircraft bullets by moving, and shoot bullets to kill enemy aircraft, so as to obtain points. The game mainly involves the realization of aircraft movement, launching bullets, multiple lives, collision detection, enemy aircraft blood volume detection, event monitoring, distribution of supply packages, refreshing game pictures and music, recording game scores and user information, making the game interface more diversified, showing the overall development and innovation process and design ideas of the game.

Key Words: aircraft war; game; Python;

目 录

3.4数据库设计
由于本游戏与数据库交互较少,只设计了一个表用作数据存储,其中包括四个字段:id(记录的唯一标识)、username(用户名)、password(密码)、score(分数)

图3- 3 系统流程图
3.6 系统模块设计
3.6.1 主界面选项卡功能
在主页面上放置5个按钮,分别是“登陆”、“注册”、“试玩”、“积分榜”、“设置”。

图3- 5 主程序页面设计图
3.6.2 游戏难度的调整
随着积分的增加,游戏难度会提高,具体方式为提高敌机血量。
以难度1提升到难度2为例,当玩家的血量大于0,且当前难度为1,如果玩家积分超过40即可进入到难度2,此时敌方飞机数量和血量开始增加,每次难度提升,敌方飞机的血量都会增加。
3.6.3 游戏界面绘画功能
左侧是游戏界面,背景以森林和河流为主,飞机大战就是在这个背景下开展的。
右侧是工具栏,其中包括操作说明,本游戏是以键盘的上下左右四个键操作的。空格键可以操纵飞机发射子弹。下面是提示部分:R/r代表重生,B/b功能是自爆,S/s是开启/关闭,Q/q是暂停。
在右边工具栏中,存在分数和血量,以及炮弹的管数。以及提示最高分。

3.6.4 游戏控制功能
玩家可以通过控制键盘、鼠标来进行游戏控制。鼠标控制主要是左键单击界面内按钮元素,或者特定区域来触发绑定事件。
键盘控制共9个键,其中包括:来控制自方飞机的移动方向(上下左右四个键)、飞机子弹的发射(Space)、游戏暂停(Q/q)、飞机重生(R/r)、飞机自爆(B/b)、开启及关闭三倍子弹(S/s)。

4.1.2注册功能实现
玩家可进行账 注册,进行合法有效输入后,不与数据库内存在账 重复即可注册成功。
具体实现步骤为:
a.分别设置对应的标签和按钮。
b.使用cursor()方法获取操作游标 cursor = db.cursor()。
c.使用execute方法执行SQL语句,并使用fetchone()方法获取一条数据。
d.打开数据库连接。
e.对数据的合法性进行校验,校验不通过则提示错误信息。
f.如果校验通过,则执行sql语句,使用db.commit()函数将数据提交到数据库。
g.关闭数据库连接。

4.1.4试玩功能实现
在充分考虑部分玩家不想拥有账 的情况下,参考其他游戏,添加试玩功能。
实现逻辑:创建试玩账 ,玩家点击试玩直接进行登录,游戏结束后,试玩账 的积分不记录至数据库。
4.1.5积分榜实现
积分榜:显示前N名玩家的积分信息(N 具体实现步骤为:
a.分别设置对应的标签和按钮。
b.使用cursor()方法获取操作游标 cursor = db.cursor()。
c.使用方法fetchall()并将返回值赋值给变量作为文本。
d.关闭数据库连接即可。
f.对文本进行格式处理,然后添加Label标签,把文本添加至积分榜页面进行展示。

4.2 游戏功能实现
4.2.1游戏界面绘制
左侧是游戏界面,背景以森林和河流为主,飞机大战就是在这个背景下开展的。
右侧是工具栏,其中包括按键操作提示,分数和血量,以及炮弹的管数。以及提示最高分重新开始及退出游戏。
实现逻辑:右侧操作说明及游戏背景均使用图片插入。

4.2.3飞机移动实现
(1)我方飞机移动
我方飞机移动分为单向移动与双向移动,如果玩家同时按下两个方向键就会同时朝综合方向移动,实现方法是为我方飞机类设置了8个方向的移动方法,根据按键调用对应的移动方法。
(2)敌方飞机移动
敌方飞机从屏幕顶端出现,向下移动至窗口上部,左右移动射击,射击子弹数量达到一定值后,添加向下移动。

4.2.6展示血量和绘制血条
不同类型的敌方飞机拥有不同血量,我方战机初始血量为50,随着大战的继续,难度逐渐提高,敌方飞机的血条逐渐增加。由玩家当前积分决定敌方飞机的血量,积分越高,敌方飞机血量越长。对于玩家自身的血量,则体现在游戏界面的右侧,玩家可以实时观察自己的生命值。
血条是最直观体现敌方飞机的血量的属性,血条使用pygame.draw.line进行绘制,长度与敌方飞机血量有关,并根据敌方飞机血量实时进行变化。

图4- 10血条展示

5.3 测试结果
5.3.1评价
软件评价是指软件正式运行后,根据需求对软件的功能、性能、结构、界面友好性等内容做出客观表述[24]。
功能评价
本软件可流畅运行、界面风格简单友好,实现功能可以满足玩家需求。
(2)数据评价
数据库设计合理完全可以满足使用需求,且程序与数据库交互良好,维护成本低。
性能评价
游戏主内容性能良好,游戏对玩家的可交互性良好,但程序打开与开始游戏时,停顿时间较长。
稳定性评价
程序运行过程中未发生程序终止、重启等异常现象。
5.3.2 BUG修复进度
几乎所有的计算机程序都有缺点,而且还有一些明显不受保护的软件没有经过仔细维护。即使是Windows也存在许多类型的错误和漏洞[25]。 在选本游戏作为课设的时候,刚开始感觉逻辑复杂,难以控制,因此产生了大量BUG,现在BUG已完全解决,重要程度为高的BUG如下:
(1)注册页面,注册时 两次密码不一致时,提示信息弹出,关闭后,直接跳到主页面,原来注册页面被隐藏。
(2)主界面多次点击注册 会出现多个注册界面(积分榜界面、设置界面同样存在该问题)。
(3)游戏中飞机死亡后可以继续进行射击。
(4)窗口位置应设置在显示屏顶端 及窗口长度过长。
(5)注册时,用户名不能含有英文字符,目前只能注册纯数字组合的用户名(SQL语句中缺少‘’导致)。
(6)小型飞机的碰撞检测过小。
由于水平关系,代码变量太多,游戏运行效率低下。有很多重复结构。希望在以后编程水平提高时再优化整个程序。

第六章 总结与展望
本次课题研究是基于兴趣爱好的一次实践,兴趣爱好给予了我很大的动力,这也使我在遇到各种问题时,总能通过多种渠道找到解决方案。虽然是第一次使用Python开发游戏,在一边进行学习,一边进行游戏开发和设计过程中,遇到了很多问题,也走了不少弯路,但锻炼了自我解决问题的能力。这次课题研究不仅让我对Python有了进一步的了解,而且还大大提高了编程能力,锻炼了自己的逻辑思维和整体设计的能力,收获颇多。通过这次课题研究,我意识到完整的软件开发思路是非常重要的,它关系到我们开发过程能否顺利实现。在项目开始之前,必须有软件工程的系统化的知识体系,不仅如此,还应包括软件结构位置、代码编写和模块划分和整体布局,只有做完这些步骤,才能逐步开发出想要实现的功能。这样定能达到事半功倍的效果。
整个软件按照计划大致实现了游戏的具体功能,虽然游戏能正常运行,不过因所学知识及开发周期有限,还有很多需要改进的地方,有待于日后进一步的改进和完善。
经过汇总测试人员的建议,本游戏应该完善的功能如下:
(1)游戏未继续美化,主界面过于简洁,部分飞机图片不包含击中与击毁图片,只能使用较为简单的飞机模型。
(2)BOSS未设置过多技能,没有设置过关动画。
希望日后,我能够有能力对这个游戏进行改进,以优化系统,完善玩家体验、使游戏更加流畅美观。

参考文献
[1] [美]Wesley J. Chun著 宋吉广译 《Python核心编程》(第二版) 人民邮电出版
[2] 小甲鱼著 《零基础入门学习Python》 清华大学出版
[3] [英] Ben Forta 著 刘晓霞/钟鸣 译《MySQL必知必会》 人民邮电出版
[4] 李瑞祥,刘伟.MYSQL数据查询技巧[J]. 络安全和信息化,2019(05):70-71.
[5] Jason Briggs 著 尹哲译 《趣学Python编程》 人民邮电出版
[6][美]Bill Lubanovic著 丁家瑞 译 《Introducing Python》 人民邮电出版
[7][挪威] Magnus Lie Hetland著 凌杰 陆禹淳 顾俊 译 《Python算法教程》 人民邮电出版
[8] [美]Jonathan S.harbour 著 李强译 《Python游戏编程入门》 人民邮电出版
[8] [瑞典] Jan Erik Solem 朱文涛/袁勇 译《Python计算机视觉编程》 人民邮电出版
[9] [美] Al Sweigart著 李强译《Python游戏编程快速上手》 人民邮电出版
[10] [美]James Payne著 张春晖 译《Python游戏编程入门》 清华大学出版
[11] [美]Eric Matthes 著 袁国忠 译《Python编程:从入门到实践》 人民邮电出版
[12] 张子良,陈俊豪,申明华.基于Python的数据处理及图形化分析平台的设计开发[J].汽车实用技术,2019(06):71-73.
胡崇刚.软件工程的标准化[J/OL].电子技术与软件工程,2019(10):48[2019-05-31].http://kns.cnki.net/kcms/detail/10.1108.TP.20190524.1656.082.html.
沈鑫,陈华山.关于软件需求分析的理解[J].现代信息科技,2018,2(11):13-14+17.
瞿苏.基于Python的飞机大战游戏设计[J].扬州职业大学学 ,2019,23(01):35-39.
郑宪秋.软件工程技术在数据库设计中的重要性及应用[J].电子技术与软件工程,2019(07):158.
吴玑震,戴天啸,马春江,汪婵.飞机大战游戏软件中的数据结构和策略分析[J].信息与电脑(理论版),2016(13):145+154.
梁孔科,李芳莹.基于Python脚本语言的Web开发应用研究[J].信息与电脑(理论版),2019(06):72-73.
吴文庆.软件开发中测试驱动开发的运用[J/OL].科技资讯:1-2[2019-05-31].https://doi.org/10.16661/j.cnki.1672-3791.2019.11.01
孙佳美.基于Java飞机大战的设计与实现[J].无线互联科技,2016(01):54-55
. ScaleGrid; MySQL Hosting on Azure, Fully Managed Cloud Database Service Launches at ScaleGrid[J]. Computers, Networks & Communications,2018.
孔韬,王俊江.软件需求管理的工程应用[J].电子质量,2018(10):60-62.
项楠.软件测试策略和测试方法的应用分析[J].科学技术创新,2019(11):64-6
陈豪文,周璐雨,宁志豪.认识软件测试[J].科技风,2019(14):69.
阚青.对软件测试过程中的质量管理及风险应对分析[J].电子技术与软件工程,2019(03):40.

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览215254 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年8月14日
下一篇 2020年8月14日

相关推荐