摘要
现代城市生活节奏日益加快,难得的休闲娱乐时光对于整日忙于工作的都市青年来说便显得尤为珍贵, 电子游戏顺其自然的成为了广大上班一族小伙伴们的最佳选择,尤其是近些年来移动手机游戏的快速崛起,让人们 随时随地都可以消遣一番。而贪吃蛇作为一款老牌的移动手游,随着科技发展移动设备的更新换代,这个小游戏也 变得更加丰富有趣,从以往简单的像素风格到现在生动活泼的形象、色彩斑斓的画面以及多种玩法甚至是联机功 能,贪吃蛇依然有着不错的玩家群体。这次的毕业设计就是贪吃蛇的设计和实现,游戏内容主要分为界面和功能, 并且在原有的基本功能上添加了其他游戏要素。游戏设计主要基于Python语言,它有着非常丰富的库和各种模块, 适用于设计一些规模较小的休闲游戏。
关键词:Python 游戏 库 模块
Abstract
The pace of life in modern cities is accelerating, and the rare leisure and entertainment time is particularly precious for urban youth who are busy with work all day. Video games have naturally become the best choice for the majority of working friends, especially in recent years. The rapid rise of mobile phone games in recent years has allowed people to have fun anytime, anywhere. As an old-fashioned mobile game, Snake has become richer and more interesting with the development of technology and the upgrading of mobile devices. From the simple pixel style in the past to the lively image and colorful pictures As well as a variety of gameplay and even online functions, Snake still has a good player group. This graduation project is the design and implementation of Snake. The game content is mainly divided into interface and functions, and other game elements are added to the original basic functions. Game design is mainly based on the Python language, which has a very rich library and various modules, which are suitable for designing some smaller casual games.
Key Words: Python game library module
前言
电子游戏如今成了广大年轻人休闲娱乐活动的首选,随着科技的进步和互联网的发展,各式各样的游戏也如雨 后春笋般出现在应用市场中。尤其是电子竞技为代表的竞技类游戏,完美结合了传统体育和现代艺术,打破了以往 人们对游戏的固有认知。现在,电子游戏也成为了一项重要的产业,继续促进着经济增长,带来更多的就业岗位。 疫情当中,在人身自由大幅度受到限制的时候,电子游戏不可谓不是消遣时光的最佳选择,只需要一台电脑或游戏 机,甚至一部手机就可以足不出户地享受在自己的虚拟世界里。
贪吃蛇是一款经典的移动游戏,从最开始诺基亚手机里基础的像素风格到如今智能手机里丰富有趣玩法,它已 经伴随了许多人的童年和青春,是几代人共同的记忆,同时现在依旧保持着相当庞大的玩家群体。
所以这一次是我用Python语言设计一款贪吃蛇小游戏来完成我的毕业设计。Python作为一个解释型的高级语言 非常适合来编写一些小型游戏,它有着丰富的类库,尤其是Python当中的pygame模块库,就是专门为2D游戏设计 的,它具有良好的跨平台性,包含图像、声音等等。
一、概述
(一)游戏产业现状
随着人民生活水平的不断提高,以及对生活品质要求的增加,人们在日常娱乐活动上有着更加多样的选择,电 子游戏便是其中之一,游戏产业作为近几年来的新兴产业已然成了最耀眼的一颗明珠,游戏行业也备受广大年轻人 的青睐。
数据显示,2021年度全球游戏市场收入高达1758亿美元, 全球玩家总数超过30亿,其中以移动玩家为主组成的 庞大的移动游戏市场以907亿的收入占据了全球市场的半壁江山。亚太地区拥有着世界上最多的玩家,占全球玩家总数的55%,这很大一部分得因于中国庞大的人口基数,同时也包含印度和东南亚的新兴地区。来自欧洲和北美市场的 玩家消费占比极高,合计占游戏市场收入的40%以上。同时值得注意的是,2021年,这两个市场的玩家在全球玩家总 数中占比不到四分之一。
据《2022中国游戏产业趋势及潜力分析报告》统计,2021年中国游戏产业实际销售收入预计超过2900亿元。二 次元移动游戏市场规模超过200亿元;IP改编移动游戏市场收入从2017年745亿元增至2021年近1300亿元;SLG头部市 场的符合增长率超过25%等等。此外诸如主机游戏、国外市场、云游戏,甚至元宇宙也都是报告长期看好的潜力领 域。
图1-1 中国二次元游戏市场实际销售收入
(二)游戏产业未来发展趋势
直至2022年,电子游戏已经发展了50余年,游戏市场依旧具有很大的发展空间。过去18个月是全球游戏市场增 速最高的一段时间,2020年全球游戏市场增速达到23.1%,为近十年来的增长最高速。在不断变化的疫情及其他全球 趋势的影响之下,游戏市场爆发出巨大的潜力,同时也经历着震荡和起伏。但有一点不会改变,游戏市场的潜力仍 未被开发殆尽。2022年的游戏市场将持续保持增长,全球近30亿玩家将为这一市场不断注入活力。
到2021年底,全球将有近30亿玩家,其中超过一半来自泛太平洋地区(APAC)。而他们也成为驱动全球游戏市 场增长的主要力量。玩家数量及游戏收入不断增长之下,是不断变化的市场发展方向及玩家与游戏互动方式的变 革。游戏内容的重要性不断凸显,而玩家更多地、或者也是更习惯地将游戏视为社交平台。更重要的是,游戏市场 的最新变革给游戏未来的设计及开发提供了许多新的主题及焦点。玩家参与游戏内容及互动的方式将不断创新,玩 家更习惯于订阅内容的支付方式,也更在意游戏作为社交平台的体验,甚至一些成功的产品会将游戏社交体验的优 先级置于游戏玩法之上。而有一些最新趋势则是在全球疫情之下催生并得到不断发展,例如用户对于直播及视频类 游戏内容的消费及参与。
综合来看所有地区和类型的玩家,会发现一个主要趋势,那就是除“玩游戏”之外的其他与游戏互动的方式将 推动未来游戏市场的大规模发展。游戏中的演唱会、直播内容、电竞以及身份探索,又或者仅仅是在游戏世界中与 好友会面、闲逛等参与方式,都将是未来游戏里不可或缺的一部分,当然,传统的游戏体验也并不会因此受到冷 落,只是与游戏互动的方式将变得更加多样化。
(三)贪吃蛇的过去和现在
贪吃蛇起源于1976年的街机游戏Blockade,不过这款游戏并没有引入“蛇”的概念,而是两个像素小人,一边 向前走,一边在走过的路上砌墙。当然,这只是在界面的表现形式不同。规则是一样的,谁先撞到墙,或者撞到对 方,谁就输了。1997年,一位芬兰软件工程师Taneli Armanto为诺基亚6110机型开发出一款名为Snake的小游戏,中文译名“贪吃蛇”。
没想到在25 年之后,他创作的《贪吃蛇》居然被视作科技和娱乐行业的一大重要转折点。事实上,以《贪吃 蛇》为代表的一批手游在当年一款极具商业潜力,甚至可以说为如今价值上千亿美元的手机游戏行业奠定了发展根 基。 2016年,一款名为《贪吃蛇大作战》的手机游戏凭借简洁的界面、优秀的手感、特色的联机系统以及各种创新新颖 的玩法模式一经推出便迅速火爆中国游戏市场,成为当时几个下载量最高的手游之一。
近几年来,各式各样的贪吃蛇游戏也出现在各大平台上,玩法模式也层出不穷。
二、开发工具和过程
(一)Python3.9
在本次毕业设计过程中,系统开发平台是Windows10专业版(64位),程序设计语言为Python,运行环境为 Python3.9。
Python3是Python2的功能升级版本,语法更为完善简洁,也拥有更庞大的函数库,而Python3.9就是Python3的 最新版本。
(二)Spyder
Spyder是一个Python的集成开发平台,与其他编译器不同的是,Spyder可以自由调整界面窗口的大小。作为一 个重点是数据分析的开发环境来说,它也有着和著名的MATLAB数学软件一样的优点,就是能够直接观察并修改数组 的值。此外,Spyder可以通过在控制台中按Tab键自动补全,另外还有特定的窗口进行变量显示。
三、需求分析
(一)条件分析
1. 技术条件
Python作为一个面向对象的解释型编程语言,具备了高级语言和低级语言的优点。它有着简单的语法和丰富的 库,pygame模块可以帮助我们构建完成游戏界面框架以及演示算法。Python的跨平台特性也适用于目前主流平台的 开发,代码的模块化也非常便于今后新系统的迭代而来进行修改或扩展。总而言之,本次的系统设计贪吃蛇游戏开 发符合现有的技术条件和硬件要求。
2.经济条件
本次所开发实现的贪吃蛇是一个小型的单机游戏,整体系统代码编写到测试和运行全程只通过一台个人笔记本 电脑来实现,在开发过程中也并没有消耗多少的资金,所以经济条件完全得以满足。
3.运行条件
作为一个小型单机游戏,无需网络连接,对设备的硬件要求也比较低。无论是家里的台式电脑,还是自己的笔 记本电脑,都可以轻松运行这款小游戏,而且并不会占用计算机的后台资源,所以完全满足运行条件。
(二) 功能分析
1.简单性
贪吃蛇之所以能像俄罗斯方块等经典游戏流传至今并仍然受到广大玩家欢迎的原因就是它的游戏规则的简单却 又不乏挑战,这也是为什么贪吃蛇会经常出现在移动游戏市场上。由于它的简单并且不消耗太多时间,非常适合人 们利用短暂的空闲时光来娱乐自己,比如在上班休息时或下班的通勤路上。这类人整日忙碌于生活或工作,休闲时 间比较短暂,贪吃蛇这种小型游戏成了打发无聊时间的不错选择。
2.趣味性
单纯的规则简单并不能吸引广大玩家,贪吃蛇同样具有那些经典游戏的趣味性和挑战性,你只需要在一个固定 的范围内上下左右控制小蛇不断地通过吃果实来使自己变长,避免碰到障碍或“咬”到自己的身体,小蛇的生存空 间也会因为自己的身体慢慢变长而受到挤压。随着游戏时间的推移,玩家为了获得更高的分数,就不得不快速进行 走位和拐弯,同时游戏的紧张感与刺激性也在慢慢增加。
四、玩法介绍和概要设计
(一)玩法介绍
贪吃蛇的游戏规则非常简单,玩家需要通过键盘上的方向键来控制小蛇不停地游动,然后不断地获取食物来使 其变长从而取得更高的得分,过程当中玩家需要避免碰到四周的墙壁,更不能碰到自己的身体,否则游戏结束。食 物在被吃掉后会刷新在不同的地点。
(二)概要设计
图4-2 概念设计图
1.画面设计
游戏画面主要由背景、边界,小蛇主体和食物组成。其中墙壁就是游戏的边界。
小蛇主要由头部和身体组成,头部是一个黑色实心的圆形,身体是有一个个小空心圆形排列而成,随着不断获 取食物,矩阵渐渐增多,这也意味着小蛇的身体慢慢变长。
食物是有一个个不同颜色的小圆形构成,每当小蛇吃掉一个食物时,下一个食物就会随机出现在任意位置。
这次设计还增添了开始界面、欢迎界面和死亡(结束)界面。每个界面上都会有相应的文字提示。其中欢迎界面 有正常模式和无边界模式让玩家选择。此外,在游戏结束时界面会显示最终的统计得分,结束后游戏会自动退出。
2.过程设计
游戏过程有开始、进行和结束。选择模式开始游戏后,小蛇在随机地点开始移动,这时玩家需要操作键盘上的 上下左右按键来控制小蛇移动,当玩家按下指定方向键时,小蛇会进行对应方向的移动。
碰撞检查分为三种:第一种是在正常模式下当小蛇碰到墙壁时,小蛇会死亡,游戏结束;第二种是当小蛇碰到 自己身体的时候,小蛇也会死亡;第三种是当小蛇碰到食物时,小蛇的身体会增加一个圆形块,即小蛇变长,游戏 继续进行。
当小蛇碰到边界或自己身体时,小蛇死亡,然后游戏会跳转到结束界面并统计分数。
3.功能设计
开始:游戏开始界面会有正常/无边界两种模式供玩家选择,还有退出游戏按键;
音乐:玩家在进入游戏后会一直伴随着背景音乐直至游戏结束;
结束:当玩家控制的小蛇死亡时游戏结束,程序退出;
分数记录:当小蛇吃到食物时会取得一定的分数,总分会在游戏结束界面显示。
五、详细设计
(一)程序整体实现与分析
1.定义贪吃蛇对象,包括蛇头和蛇身两个部分,蛇头单独设置,蛇身使用列表来存储;
2.定义食物对象,包括食物对象的初始化、随机颜色和随机位置的设置;
3.定义初始化界面,在该界面中设置文本为“正常模式”、“无边界模式”和“退出”的三个按钮供玩家选择;
4.定义正常模式,包括游戏窗口显示、主循环和判断贪吃蛇死亡的设置;
5.定义无边界模式,包括游戏窗口显示、主循环和判断贪吃蛇死亡的设置;
6.定义游戏结束窗口,包括窗口显示和最后得分显示的设置。
图5-1 程序设计流程图
(二)主要函数和库文件
1. 主要函数
(1)new_food()
食物对象初始化函数,传入形参为贪吃蛇蛇头坐标。当贪吃蛇吃掉食物后,通过该函数生成新的食物。通过传 入形参判断新生成的食物坐标是否与蛇头坐标相同,若相同则重新生成新的坐标。
(2)start_game()
正常模式的主循环函数,通过该函数进行正常模式下贪吃蛇和食物的初始化、玩家控制贪吃蛇运动、蛇头和蛇 身的判断更新和得分统计实现。
(3)die_snake()
正常模式下贪吃蛇死亡判断函数,传入形参为贪吃蛇蛇头和蛇身坐标数据。在该函数中设置布尔型变量 die_flag,若死亡设置为Ture并返回,没有死亡为False。通过遍历蛇身存储列表,判断蛇身坐标是否与蛇头坐标相 同,若相同则判定贪吃蛇咬到自身,死亡。同时,判断贪吃蛇是否撞墙,及判断蛇头的x和y坐标是否窗体的宽高, 若超过则死亡。
(4)start_kgame()
无边界模式的主循环函数,通过该函数进行无边界模式下贪吃蛇和食物的初始化、玩家控制贪吃蛇运动、蛇头 和蛇身的判断更新和得分统计实现。
(5)through_snake()
无边界模式下贪吃蛇死亡判断函数,传入形参为贪吃蛇蛇头和蛇身坐标数据。在该函数中设置布尔型变量 die_flag,若死亡设置为Ture并返回,没有死亡为False。通过遍历蛇身存储列表,判断蛇身坐标是否与蛇头坐标相 同,若相同则判定贪吃蛇咬到自身,死亡。
(6)show_end()
游戏结束时,结束界面设置函数。在该函数中进行结束界面窗体的初始化,在窗体中显示玩家的最终得分,并 在改函数中调用pygame库quit方法,使该库停止工作。
(7)into_game()
游戏初始界面实现函数,在该函数中进行游戏初始界面窗体的初始化。在该界面窗体中设置文本为“正常模 式”、“无边界模式”和“退出”的三个点击按钮,通过设置循环,调用button函数监听玩家的点击。 (8)button()
游戏初始界面按钮监听函数,在该函数中实现对玩家鼠标点击事件和键盘输入事件的监听。并根据玩家选择, 运行按钮对应的触发函数。即点击“正常模式”按钮,运行正常模式的主循环函数,以此类推。
2. 主要库文件
(1) pygame
Pygame是Python的一个模块库。 Pygame包含图像、声音。建立在SDL基础上,允许实时电子游戏研发而无需被低 级语言(如机器语言和汇编语言)束缚。基于这样一个设想,所有需要的游戏功能和理念(主要是图像方面)都完 全简化为游戏逻辑本身,所有的资源结构都可以由高级语言提供,如Python。
(2)random
random是产生随机数的库,即随机数发生器,random产生的是伪随机数或者说是用一种复杂的方法计算得到的序列 值,因此每次运算时需要一个不同的种子值。种子值不同,得到的序列值也不同。
(3)time
time库是Python中处理时间的标准库,用于计算机时间的表达,提供获取系统时间并格式化输出功能,提供系 统级精确计时功能,也可用于程序性能分析。
(4)sys
sys.exit([arg])用于程序的退出,sys.exit(n) 退出程序,正常退出时exit(0)。这是通过引发SystemExit 异 常来实现的,因此遵循finally语句的子句所指定的清理操作try ,并且可以拦截外层的退出尝试。可选参数arg可 以是一个整数,给出退出状态(默认为零)或其他类型的对象。如果它是整数,则零被认为是“成功终止”,并且 任何非零值等视为“异常终止”。
六、 运行和测试
(一)运行程序
1.开始界面
这是贪吃蛇游戏的欢迎界面,可以看到有文字提示,玩家可以选择正常模式或者无边界模式进入游戏,还可以 点击退出键退出游戏。
图6-1-1 开始界面
2.正常模式
这是正常模式下的游戏过程界面,此模式下小蛇不可碰到边界,否则游戏结束,旁边也有实时的分数统计情况。
图6-1-2 正常模式界面
3.无边界模式
这是无边界模式下的游戏界面,此模式下小蛇可以自由穿过四周边界,其余和正常模式一样。
图6-1-3 无边界模式界面
4.结束界面
这是游戏的结束界面,有文字提示并会统计显示你的最终得分情况。游戏结束后,程序自动退出。
图6-1-4 结束界面
(二)游戏测试
测试编号/内容 | 正常模式键 | 无边界模式键 | 退出键 | 上下左右键 | 结果/得分 |
1 | 正常 | 正常 | 正常 | 正常 | 10 |
2 | 正常 | 正常 | 正常 | 正常 | 21 |
3 | 正常 | 正常 | 正常 | 正常 | 6 |
4 | 正常 | 正常 | 正常 | 正常 | 16 |
5 | 正常 | 正常 | 正常 | 正常 | 34 |
图6-2 游戏测试统计表格
七、优点和不足
(一)优点
(1)游戏整体设计完整,游玩过程流畅;
(2)无边界模式和分数统计功能成为亮点;
(3)代码简短精炼无报错,运行流畅。
(二)不足
(1)玩法单调,画面设计过于简单;
(2)没有暂停功能成为痛点;
(3)代码排版布置稍显杂乱。
八、结语
历时半年的毕业设计作品加论文终于完成了。在这半年的时间里,我从一开始确定开题报告,接着搜集Python 的基础资料来学习,筑牢设计作品相关的语言基础,再着手实现一些书上的小程序,由部分到整体,然后开始设计 自己的贪吃蛇小游戏,这其中遇到过不少难以解决的问题和阻碍,但我最终还是通过适当的方法将它们一一解决, 中期检查之后,我完善了游戏的画面以及代码结构,并完成论文的剩余内容,最终在日期截止前提交了自己的初稿 和定稿。
短短半年的时间,通过一点一滴的积累和摸索,我最终收获许多。在看书敲代码的过程中,我系统地掌握 Python的语法基础,在多种函数的调用之后我也意识到了模块化编程的重要性,在各式的库文件的使用中,我也了 解到了Python的强大功能 这些都让我对Python语言有了更加深入全面的认识,这也能让我在之后的学习或工作中受 益匪浅。
本站文章通过互联网转载或者由本站编辑人员搜集整理发布,如有侵权,请联系本站删除。