欢迎来到咨信网! | 成为共赢成为共赢 咨信网助力知识提升 | 自信网络旗下运营:咨信网 自信AI创作助手 自信AI导航
咨信网
全部分类
  • 包罗万象   教育专区 >
  • 品牌综合   考试专区 >
  • 管理财经   行业资料 >
  • 环境建筑   通信科技 >
  • 法律文献   文学艺术 >
  • 学术论文   百科休闲 >
  • 应用文书   研究报告 >
  • ImageVerifierCode 换一换
    首页 咨信网 > 资源分类 > PDF文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于Python的贪吃蛇游戏设计.pdf

    • 资源ID:828181       资源大小:1.48MB        全文页数:28页
    • 资源格式: PDF        下载积分:1金币
    微信登录下载
    验证码下载 游客一键下载
    账号登录下载
    三方登录下载: QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    验证码: 获取验证码
    温馨提示:
    支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    VIP下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    声明    |    会员权益      获赠5币      写作写作
    1、填表:    下载求助     索取发票    退款申请
    2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【鱼**】。
    6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    7、文档遇到问题,请及时私信或留言给本站上传会员【鱼**】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

    基于Python的贪吃蛇游戏设计.pdf

    1、基于 Python 的贪吃蛇游戏设计本科毕业设计本科毕业设计(论文论文)(20182018 届届)题目题目:基于:基于 PythonPython 的贪吃蛇游戏设计的贪吃蛇游戏设计学院:数理与信息工程学院学院:数理与信息工程学院专业:计算机科学与技术专业:计算机科学与技术班级:班级:*作者姓名:作者姓名:*磊磊学号:学号:*指导老师:指导老师:*职称:职称:讲师讲师基于 Python 的贪吃蛇游戏设计浙江师范大学本科毕业设计浙江师范大学本科毕业设计(论文论文)正文正文目录目录摘要.3Abstract.3一、概述.41.1、中国游戏产业的现状.41.2、中国游戏产业的未来发展局势.41.3、贪吃蛇

    2、游戏的发展状况.5二、开发工具的简介.52.1、Python3.2 IDLE 简介.52.2、Python3.2 开发过程.6三、需求分析.63.1、可行性分析.63.1、1.技术可行性.73.1、2.经济可行性.73.1、3.运行可行性.73.2、功能性分析.73.2、1.简单性.73.2、2.趣味性.8四、概要设计.84.1、功能介绍.84.2、概要设计图.94.2、1.画面设计.94.2、2.游戏过程.104.2、3.游戏结束.104.2、4.添加功能.10五、详细设计.115.1、程序设计分析.115.2、主要函数及模块.115.2、1.主要模块.111基于 Python 的贪吃蛇游戏

    3、设计5.2、2.主要函数.125.3、主要代码.135.3、1.设计游戏界面.135.3、2.构建贪吃蛇.155.3、3.构建食物.175.3、4.碰撞检测.17六、测试与运行.196.1、运行程序.196.2、程序的调试和测试.21七、八、遇到的困难及解决过程.22结论.24参考文献.26致谢.272基于 Python 的贪吃蛇游戏设计基于基于 PythonPython 的贪吃蛇游戏设计的贪吃蛇游戏设计数理与信息工程学院 计算机科学与技术 洪磊(14190125)指导老师:宋炯(讲师)摘要摘要:现如今,人们生活节奏日益加快,繁忙冗杂的工作、学习和生活使人们的生活变的枯燥,没有新意,休息时间越

    4、来越少。面对这样的生活,人们大都渴望在这仅有的休息时间里,找到一些能让身心放松的娱乐活动。于是,贪吃蛇这款游戏就进入了大众的视野。本次毕业设计的主题就是贪吃蛇游戏的设计,游戏的主要内容分为游戏界面设计和游戏功能设计两大部分,其中游戏界面设计以满足视听觉体验为主,游戏功能设计是在满足原有的贪吃蛇游戏基本功能的基础上添加一些其他的功能。本次毕业设计运用的开发语言是 Python语言,Python语言拥有十分丰富的函数库和模块库,本次设计主要运用其中的pygame模块。关键词:关键词:贪吃蛇;游戏;Python;函数库;pygameDesignofsnake game based on Python

    5、Designofsnake game based on PythonCollege of Mathematics,Physics and Information Engineering,computer science and Technology,HongLei,14190125Tutor:SongJiong(lecturer)AbstractAbstract:Nowadays,peoples pace of life is accelerating,busy and tedious.work,study,and life make peoples lives boring,without

    6、new ideasand less time for rest.Faced with thiskind of life,people are eager to find some recreational activities that can relax both physically andmentally during this sole rest period.As a result,the game of snakes entered the publics view.Thetheme of this graduation project is the design of the G

    7、reedy Snake game.The main contents of thegame are divided into two parts:the game interface design and the game function design.Thegame interface is designed to meet the audiovisual experience.And the game function design istoadd some other featureson the basic of original.The development language u

    8、sed in thisgraduation project is the Python language.The Python language has a very rich library offunctions and modules.This design mainly uses the pygame module.KeywordKeyword:gluttonous snake;game;Python;Function library;pygame3基于 Python 的贪吃蛇游戏设计一、一、概述概述游戏是当下社会十分推崇的一种娱乐方式,近年来,各式各样的游戏如雨后春笋般拔节而出,有些

    9、游戏披荆斩棘,脱颖而出,也有些游戏精疲力竭,隐于尘埃。但不管是哪种游戏,都为人们带去了欢声笑语。在工作学习之余,身心疲惫,大多数人会选择来一款有趣的游戏来放松放松疲惫不堪的内心;在生活闲暇时候,百无聊赖,很多人会打开久违的游戏来打发打发生锈的时光。当然,对人们来说,电影、音乐、阅读、旅游这些都是不错的娱乐方式,但随着社会发展的步伐在加快,这些传统的娱乐方式已经渐渐跟不上人们的娱乐需求了,游戏理所当然地走进了人们的视野。可以这么说,游戏,已经成为了生活中不可或缺一个东西,它能为人们带来很多生活中得不到的乐趣和满足。贪吃蛇游戏作为一款深受大家喜爱的经典游戏,伴随着很多人的童年和青春,是很多年轻人甚

    10、至中年人的游戏起点,发展到现在,更是受到各阶层广大人群的热衷和追捧。1.11.1、中国游戏产业的现状中国游戏产业的现状近年来,随着科技的飞速发展,人民生活水平的日益提高,人们对生活品质的要求日渐愈高,在娱乐休闲方式的选择上也变得更加多元化,游戏产业就是其中最耀眼夺目的方式之一。由于中国拥有庞大的人口基数和较大产业自由,再加上中国的市场开放度高,因此游戏产业在中国的市场上取得了令人瞩目的发展成果。根据新华网发布的2017 中国游戏产业发展报告指出,社会对游戏娱乐消费支出不断增加,有效带动了游戏娱乐行业和游戏实体产品行业的快速发展。通过数据来看,2017 年,中国游戏行业总收入约为 2189.6

    11、亿元,同比增长23.1。其中,网络游戏贡献游戏行业收入较大,全年估计约为2011 亿元,同比增长 23.1;VR 游戏收入约为 4 亿元,比去年同比增长 28.2;游戏实体产品收入约为 176.6 亿元,同比增长 23.9%。从游戏用户规模上来看,2017 年,中国网络游戏用户市场增速稍有放缓。其中,客户端游戏用户数量约为 1.5 亿,与 2016 年相比略有增长;手机游戏用户约 4.6 亿,同比增长 9;VR 游戏用户数量约为 4000 万,同比增长 100;电竞游戏用户数约 2.2 亿,同比增长 69.2。1.21.2、中国游戏产业的未来发展局势中国游戏产业的未来发展局势正如我们所知道的,

    12、电子游戏起源于西方,已经有了近 50 年的历史,然而对于中国来说,发源于上世纪 90 年代后期的游戏产业还是个刚刚出生不久的婴4基于 Python 的贪吃蛇游戏设计儿,只是这个婴儿在短短二十年几年内已经成长的十分强壮。从最初的“游戏产业的史前时期”,到 1994 年中国内地游戏的“元年”,再到网络游戏异军突起的“网游时代”,中国游戏产业的发展可以说是举世瞩目,让人瞠目结舌。2017 年新华网发布的2017 中国游戏产业发展表示出,中国游戏产业的经济效益可以说是日益倍增,并且势头不减,相比于当初的“史前荒芜时代”来说,中国游戏产业取得的巨大发展是显而易见的。由此可知,未来几年中国游戏产业的发展必

    13、将又是一路高歌猛进。再而言之,国家和政府的有效引导将继续推动高质量、高内容、高创新的原创精品游戏的研发;随着市场规模继续、持续地增长,将逐渐推动者中国的游戏产业朝着更加专业化、商业化和产业化的方向发展;长此以往,游戏产业必将成为中国文化海外输出的重要形式。1.31.3、贪吃蛇游戏的发展状况贪吃蛇游戏的发展状况1997 年,诺基亚工程师 Taneli Armanto 为诺基亚 N6610 手机写了一款贪吃蛇程序,命名为 Snake,中译贪吃蛇。而后,在我们更加熟悉的诺基亚 3310 等机型上,安装了升级版的 Snake II。2000 年,诺基亚重写了程序 Snake EX,安装在同年发行的诺基

    14、亚 9200 上。近十年来,贪吃蛇游戏以各种形式出现在各大游戏网站,模式新颖,层出不穷,吸引了数以亿计的游戏爱好者前来游玩。2016 年,贪吃蛇大作战横空出世,火爆一时。同年,腾讯游戏推出 疯狂贪吃蛇 网络游戏,下载量居高不下。如此种种,使得贪吃蛇游戏成为国内外游戏史上传播最广泛的作品之一。二、二、开发工具的简介开发工具的简介2.12.1、Python3.2 IDLEPython3.2 IDLE 简介简介在本次毕业设计中,系统开发平台为 windows7(64bit),程序设计语言为Python 语言,程序运行环境为 Python3.2。Python 版本一般来说可以分为两大类:Python2

    15、+和 Python3+。这两种版本上几乎相同,只是 Python2+是原始版本,拥有更完善的功能,而 Python3+是比较新的版本,语言和语法更完善,更简洁,函数库也更庞大,因此,这二者可以说各有作用,适用于不同的程序设计。IDLE 是由 Python 软件包自带的集成开发环境。用户可以使用它来方便地创建、运行、测试和调试 Python 程序。IDLE 是 Python 的标准发行版,原始功能由 Guido van Rossum 亲自编写,经过其他人补充完整。打开 IDLE 后,会出现一个增强的交互式解释器窗口。另外,还有一个基于Python 的编辑器、浏览器5基于 Python 的贪吃蛇游

    16、戏设计和调试器。点击顶部下拉菜单的虚线将移动菜单到它自己的永久窗口。IDLE 的调试器提供断点、步进和变量监控功能。IDLE 为开发人员提供了许多有用的功能,例如自动缩进,IDLE 很清楚python 的缩进语法(python 要求代码块缩进),会根据需要自动缩进;还有语法高亮,单词自动补充等等功能,借助这些功能,我们可以有效提高软件的开发效率。另外,IDLE 使用颜色区分语法来突出显示代码。Python 语言内置函数是紫色的,字符串为绿色,关键字为橙色,所有生成的结果都以蓝色显示,当然,这些颜色都是默认的,可以通过改变首选项来进行调整。2.22.2、PythonPython3.23.2 开发

    17、过程开发过程Python 是一种解释性语言,它不需要如 C 或 C+之类的被编译成二进制代码,它可以直接从源代码运行程序。当我们运行 Python 文件程序的时候,文件源代码首先被 Python 解释器翻译成字节码,然后再交给Python 字节码虚拟机来解释这些字节码,最后有 Python 运行输出 Result,如图 2-4 原理图所示。图 2-1Python原理图三、三、需求分析需求分析3.13.1、可行性分析可行性分析可行性分析(The Feasibility Analysis)又称可行性研究,是在系统研究新系统的基础上发展起来的,从技术,经济,工程等方面来研究新系统的必要性和可能性。通

    18、过调查研究和分析比较,确保新系统开发成功。可行性研究的目的是用最小的代价在最短的时间内确定问题能否在最短的时间内得到解决。该系统的可行性分析包括以下三个方面。6基于 Python 的贪吃蛇游戏设计3.13.1、1.1.技术可行性技术可行性技术可行性主要分析现有的技术条件是否可以顺利完成开发工作,软硬件是否可以满足开发人员的需求等等。我们设计的贪吃蛇游戏是以 Python 语言作为这个系统的主要开发工具,使用 Python 语言中丰富的库函数和独特的 pygame,tkinter 等模块来完成构建地图的过程和演示算法。它同时具有了高级语言和低级语言的优点,是一种面向对象的编程语言。它保证了代码的

    19、模块化要求,代码的模块化改进非常有利于未来对新系统进行扩展和修改。总之,在现有技术和硬件条件下的系统设计和开发是符合要求的,因此本系统在技术上是可行的。3.13.1、2.2.经济可行性经济可行性本系统是一个小型的贪吃蛇单机游戏,系统的编写和运行对计算机软件和硬件的要求较低,可以在个人笔记本电脑上独立完成代码编写、系统测试和游戏运行等制作过程,对经济的要求较低,因此,本系统在经济上是可行的。3.13.1、3.3.运行可行性运行可行性本系统作为一个小型的贪吃蛇游戏,所消耗的资源是非常小的,无论是学校的电脑还是自己的笔记本电脑,在硬件和软件上都能够满足编写和运行的基本条件,因此,这个系统在运行上是可

    20、行。3.23.2、功能性分析功能性分析游戏是人们生活中不可缺少的一部分,在人们成长的过程中,游戏经常伴随着我们,它占据我们生活中的地位不可撼动。无论是玩具还是可以与小伙伴们一起玩的小游戏,它都能为我们带来美好的回忆。所以不管是什么样的游戏,只要满足人们内心的一些美好需求,它的市场就一定会非常好。3.23.2、1.1.简单性简单性贪吃蛇游戏是一款十分简单的小游戏,但其能带给人们的作用是非常大的。首先,它可以放松我们的身心,让我们摆脱繁重冗杂的生活,只有我们的身体和心灵都可以编的轻松愉悦,我们才能更好地融入新的工作和生活。当下很多人都面临着巨大的压力。在这样的时刻,贪吃蛇这简单的小游戏款游戏给了我

    21、们随时随地娱乐放松的机会。虽然现在市场上的贪吃蛇游戏的版本越来越多,但这款游戏的市场仍然很大,原因就在于它的简单性。对于那些整日奔波忙碌的工作人来说,他们显然不可能在大型游戏上花费大量时间,但小型游戏却恰好能够满足他们的娱乐的需求,并且,随着游戏进度的加快,其刺激性也变得越来越强。可以说,贪吃蛇这个游戏的优势不仅在于它简单易学,而且在于它运行平稳快速。但其缺点也主要在于其简单性。游戏本身太简单,无法比拟大型游戏的丰富度和趣味性,但这种小型游戏的主要目的是为那些需要一些小玩意儿来协调生活的人带来更多的精彩。7基于 Python 的贪吃蛇游戏设计3.23.2、2.2.趣味性趣味性人们可能都会有这样

    22、的疑问:这样一个小游戏,应该没啥好玩的吧!确实,不得不承认,相较于大型游戏来说,贪吃蛇游戏在趣味和丰富度上有所欠缺。但我们不能否认它的趣味性。忙碌一天的人们,花费大量的时间在大型游戏上是不切实际的,这个时候人们自然会想到像贪吃蛇这样的小游戏,不但不会占用很多的空闲时间,而且可以让身体和心灵得到充分的休养。那么,说了这么多,贪吃蛇的乐趣到底在哪儿呢?当人们开始玩这款游戏的时候,刚开始贪吃蛇的身体会比较短小,运动的空间相对来说比较大,但是随着贪吃蛇不断地吃到食物,身体慢慢变长,导致能够活动的空间越来越小,又不能触碰墙壁、障碍物和自己的身体,自然会使游戏的刺激性增加,再加上在本游戏设计中,功能性食物

    23、的加入,使的贪吃蛇生存的不稳定性增加,以及还有游戏中得分的增加,吸引着人们对分数产生追求,游戏的可玩性自然而然地也会随之增加。四、四、概要设计概要设计4.14.1、功能介绍功能介绍贪吃蛇游戏主要就是在屏幕区域内绘制出一条小蛇,并且在与蛇不重合的屏幕区域内随机出现一个食物,游戏者通过键盘操纵游戏小蛇上下左右移动来吃到食物,当食物成功被小蛇吃到后,会在另外的区域再重新刷新出食物,而小蛇由于吃到食物,身体会增长。在游戏中,小蛇如果撞到墙壁和障碍物或者交叉撞到自己的身体,则游戏结束。贪吃蛇游戏设计的关键点在于蛇的图形组建和蛇的运动轨迹绘制。使用一个小的矩形块(rect属性)代表蛇的身体的一部分。身体每

    24、增长一部分,添加一个新的矩形块。蛇的头由四部分代表。必须从蛇的头部开始移动,所以蛇不能反方向移动,也就是尾巴不能变成蛇头。如果你不按任何键,蛇就会以当前的方向向前移动。当玩家按下有效的箭头键时,蛇头按指定的方向移动,一次移动身体一部分。当玩家按下有效的箭头键时,首先要确定蛇头的位置,然后身体随着蛇头运动,实现图形就是蛇头从新的位置开始画一条蛇。蛇头按指定的方向移动,一次移动身体一部分。所以当按下有效的箭头键时,首先要确定蛇头的位置,然后身体的每一部分都随着前一部分的变化而变化,后一个覆盖前一个的位置,使贪吃蛇看起来好像是在到处移动。食物的出现和消失也是按照绘制矩形块并且覆盖矩形块来实现。8基于

    25、 Python 的贪吃蛇游戏设计4.24.2、概要设计图概要设计图通过对贪吃蛇的需求分析和功能设计,我们设计出游戏概要图如图 4-1 所示:图 4-1概要设计图4.24.2、1.1.画面设计画面设计1)游戏的界面构造主要包括游戏运行界面尺寸(bg_size)的定义,背景幕布(background)的覆盖,以及墙壁(wall)和障碍物(obstacle)的添加。其中墙壁是沿着界面的边缘四周依次排列,障碍物是在墙壁以内的位置随机生成;2)另外,在界面设计中还添加了开始界面、暂停界面和结束界面。开始界面时,界面上出现英文:操作提示和“点击任意键开始游戏”提示;暂停界面时,界面上出现“点击空格键继续游

    26、戏”的英文提示;结束界面时,会出现得分和历史记录显示,另外还添加了“重新开始”和“退出游戏”两个功能按钮。3)贪吃蛇的构造分为两部分,一个是蛇头,另一个是蛇的身体。蛇头是一个矩形块(rect),具有贪吃蛇的大部分功能,例如移动、变换方向、碰撞、吃食物等,游戏过程中整个界面只能存在一个蛇头;蛇的身体也是由一个小矩形块构成,与蛇头不同的是,身体的数量不限,随着贪吃蛇不断吃到食物,蛇的身体会逐渐增加,身体会随着蛇头的移动而移动,不具备蛇头所具有的功能。4)食物的构造也分为两部分。一部分为普通食物,会随机刷新在界面内,且不与其他物体重合,再与蛇头触碰之后会消失,并在其他区域重新随机生成;还有一部分是功

    27、能性食物,能使贪吃蛇具有某些非正常的能力。9基于 Python 的贪吃蛇游戏设计4.24.2、2.2.游戏过程游戏过程1)贪吃蛇必须从蛇的头部开始移动,所以蛇不能反方向移动,也就是尾巴不能变成蛇头。如果你不按任何键,蛇就会以当前的方向向前移动。当玩家按下有效的箭头键时,蛇头按指定的方向移动,一次移动身体一部分。所以当按下有效的箭头键时,首先要确定蛇头的位置,然后身体随着蛇头运动,实现图形就是蛇头从新的位置开始画一条蛇,此时,由于没有清屏,程序在不停地更新屏幕(flip),原来的蛇差了一个单元,看起来蛇的身体会多一部分,所以蛇的最后一部分被覆盖了背景颜色,使贪吃蛇看起来好像是在到处移动。2)碰撞

    28、检测包含三种情况。第一种是蛇头和障碍物的碰撞,在正常情况下蛇会死亡;蛇会第二种是蛇头和身体的碰撞,正常情况下蛇也会死亡;第三种是蛇头和食物的碰撞,蛇的身体会增长一个矩形块(rect)。4.24.2、3.3.游戏结束游戏结束当蛇头与四周的墙壁、随机刷新的障碍物和自己的身体发生碰撞时会死亡,这个时候,游戏进程停止,跳转到结束界面,音效停止。4.24.2、4.4.添加功能添加功能1)2)添加游戏背景音乐、吃普通食物音效、生成功能性食物音效、吃功功能性食物区别于普通食物的是它的生成速度为 20 秒/个,且它的能性食物音效以及死亡音效。对象(Surface)图片不同,当蛇头碰撞到功能性食物的时候,蛇会获

    29、得4 秒钟无敌状态的功能,在与障碍物和身体碰撞后不会触发碰撞检测,简单说,就是蛇不会死亡,游戏会继续进行下去。3)4)5)6)始。7)结束:显示最终得分和最高纪录;会出现“Restart”和“Finish”两个功能按钮。10在游戏设计中添加了很多常规功能:开始:游戏程序运行前,界面会出现提示,点击任意键开始游戏。记录分数:游戏运行过程,吃到食物会得分,功能性食物则会扣分,暂停/开始:在游戏过程中可以点击 Space 键来控制游戏的暂停和开得分会记录在界面左上角。基于 Python 的贪吃蛇游戏设计五、五、详细设计详细设计5.15.1、程序设计分析程序设计分析根据程序运行的过程设计程序设计流程图

    30、,如图 5-1 所示:图 5-1程序设计流程图5.25.2、主要函数及模块主要函数及模块5.25.2、1.1.主要模块主要模块表 5-1贪吃蛇主要模块模块pygamesysosmath11作用Python 内置模块,游戏设计模块系统相关的信息模块操作系统相关的调用和操作数学模块,进行数学计算基于 Python 的贪吃蛇游戏设计randomtimetraceback生成随机数时间模块,控制游戏帧频提供了print_exception、format_exception等输出异常栈等常用的工具函数hindersnake障碍物模块,包含障碍物属性贪吃蛇模块,包括 Snake 和 Body两大类,包含了

    31、各自的相关的属性supply食物模块,包括 Food 和 Invincible两大类,包含了各自的相关属性5.25.2、2.2.主要函数主要函数图 5-2贪吃蛇主要函数函数作用主函数,控制游戏的所有进程初始化函数绘制界面幕布将普通食物加入到数组中,方便进行碰撞检测Main()_init_()Paint_screen()Add_nomal_food()Add_invincible()将功能性食物加入到数组中,方便进行碰撞检测Add_obstacle()将生成的障碍物加入到数组中,方便进行碰撞检测Set_timer()Blit()Move()Event.get()12设置时间事件的长短绘制rect

    32、对象控制精灵移动get游戏中产生的事件基于 Python 的贪吃蛇游戏设计Spritecollide()动画精灵和数组各个对象之间的矩形冲突检测(碰撞检测)Randint()Reset()Image.load()Font()Mixer.Sound()Music.load()5.35.3、主要代码主要代码5.35.3、1.1.设计游戏界面设计游戏界面随机数生成函数重置Surface对象载入图片载入字体载入游戏音效载入背景音乐程序设计了三个界面:开始界面、主界面和结束界面,这里只给出主界面构建过程。主界面:#绘制屏幕函数,先将屏幕填充为 bg_color(在本设计中为黑色,或者填充 backgro

    33、und,但是需要加上位置坐标参数),然后在四周边界填充墙壁。#绘制界面幕布Paint_screen()#绘制功能性食物(如果 active 属性为 True)ifpower_food.active:screen.blit(power_food.image,power_food.rect)pygame.time.set_timer(CONTINUE_TIME,4*1000)#绘制普通食物(如果 active 属性为 True,否则重置 food)for each in nomal_foods:ifeach.active:screen.blit(each.image,each.rect)13基于

    34、Python 的贪吃蛇游戏设计else:each.Reset()#绘制障碍物for each in obstacles:ifeach.active:screen.blit(each.image,each.rect)else:each.Reset()#绘制贪吃蛇头screen.blit(me.image,me.rect)#绘制身体移动路径,第一节身体刷新到蛇头的位置,后一节会刷新到前一节的位置,然后删除最后一个。(这种方法的限制是移动速度受到身体尺寸和游戏帧频的影响)lastmove=headmoves0for body in bodies:body.move(lastmove)lastmove

    35、=body.moves0screen.blit(body.image,body.rect)headmoves.append(me.rect)delheadmoves0#绘制分数score_sign=score_font.render(YOUR SCORE:%s%str(score),True,BLUE)screen.blit(score_sign,(20,20)pygame.display.flip()14基于 Python 的贪吃蛇游戏设计5.35.3、2.2.构建贪吃蛇构建贪吃蛇构成贪吃蛇的代码主要由两部分,一部分是构建蛇头,另一部分是构建身体,大致如下。#构建贪吃蛇头部class Sna

    36、ke(pygame.sprite.Sprite):def _init_(self,bg_size):pygame.sprite.Sprite._init_(self)#载入头部图片self.o_image=pygame.image.load(images/head1.png).convert_alpha()self.image=self.o_imageself.rect=self.image.get_rect()self.width,self.height=bg_size0,bg_size1#控制蛇头刚开始时候的生成位置self.rect.left,self.rect.top=500,300#

    37、设置蛇头的速度self.speed=-9,0#用来控制蛇嘴的张闭self.update_mouth=0#用来控制蛇头图片的切换self.index=1#用来控制无敌时间的开始和结束self.noDie=True#更新蛇头图片函数defupdate_image(self):self.o_image=pygame.image.load(images/head+str(self.index)+.png).convert_alpha()15基于 Python 的贪吃蛇游戏设计#向上移动函数defmoveUp(self):self.image=pygame.transform.rotate(self.o

    38、_image,-90)#向下移动函数defmoveDown(self):self.image=pygame.transform.rotate(self.o_image,90)#向左移动函数defmoveLeft(self):self.image=self.o_image#向右移动函数defmoveRight(self):self.image=pygame.transform.flip(self.o_image,1,0)#贪吃蛇身体构建大体类似,区别之处是身体的移动函数构建,如下:#身体移动坐标数组self.moves=#设置身体的初始刷新位置,start 值取决于蛇头刷新位置self.rect

    39、0=startself.rect1=300fori in range(0,3):self.moves.append(start+(i*-9),300)#移动函数,控制身体的移动路径,第一节身体刷新到蛇头的位置,后一节会刷新到前一节的位置,删除最后一个。限制是移动速度受到身体尺寸和游戏帧频的影响。def move(self,xy):16基于 Python 的贪吃蛇游戏设计self.rect0=xy0self.rect1=xy1self.moves.append(xy)delself.moves05.35.3、3.3.构建食物构建食物构建食物的代码也有两部分,分别是普通食物和功能性食物,但是这两部

    40、分代码大致相同,因此只附上普通食物类的代码,代码如下。#食物类构建与贪吃蛇也叫相似,这里只列出区别之处:#控制食物的生成与消失,初始为设置为 Ture(如果是功能性食物,则active 属性初始设置为 False,然后利用时间事件控制功能性食物的刷新)self.active=True#在随机位置生成食物self.rect.left,self.rect.top=randint(20,self.width-30),randint(20,self.height-30)#重新生成食物(同理,若是功能性食物,则 active 属性设置为 False)def Reset(self):self.active

    41、=Trueself.rect.left,self.rect.top=randint(20,self.width-30),randint(20,self.height-30)5.35.3、4.4.碰撞检测碰撞检测程序的碰撞检测一共包含了如下四个部分:#控制食物刷新与身体不重合,如果出现重合,则食物重置(如果是食物预障碍物检测,则判断变量为 food_obstacles_alive)whilefood_bodies_alive:for food in foods:ifme.rect.colliderect(food.rect)or pygame.sprite.spritecollide 17基于

    42、Python 的贪吃蛇游戏设计(food,bodies,0)!=:food.kill()food.Reset()else:food_bodies_alive=0#检测蛇头是否与普通食物碰撞,如果发生碰撞,得分+10,播放“eat_sound”音效,身体增长snake_food_collision=pygame.sprite.spritecollide(me,nomal_foods,False,pygame.sprite.collide_mask)ifsnake_food_collision:for each in snake_food_collision:score+=10each.activ

    43、e=Falseeat_sound.play(0)bodies.append(snake.Body(503)#检测蛇头是否与功能性食物碰撞,如果发生碰撞,得分-2,播放“happy_eat_sound”音效,获得“无敌状态”。snake_invincible_collision=pygame.sprite.spritecollide(me,invincibles,False,pygame.sprite.collide_mask)ifsnake_invincible_collision:for each in snake_invincible_collision:score-=2each.acti

    44、ve=Falsehappy_eat_sound.play(0)me.noDie=Truepygame.time.set_timer(NODIE_TIME,3*1000)18基于 Python 的贪吃蛇游戏设计#检测蛇头是否与障碍物碰撞,如果发生碰撞,且没有“无敌状态”,则蛇会死亡,背景音乐停止,播放死亡音效,游戏结束。(如果蛇头与身体碰撞,则变量为 snake_bodies_collision)snake_obstacle_collision=pygame.sprite.spritecollide(me,obstacles,False,pygame.sprite.collide_mask)if

    45、snake_obstacle_collision and not me.noDie:me.speed=0pygame.mixer.music.stop()die_sound.play()snake_alive=-1六、六、测试与运行测试与运行6.16.1、运行程序运行程序1、首先打开 Python3.2 IDLE,运行“贪吃蛇”文件夹中的“main.py”文件,生成欢迎界面,如图 6-1 所示:图 6-1欢迎界面注释:如图所示,游戏欢迎界面上出现英文字幕提示“Welcome To Snake!Press Any Key To Continue!”以及主要的游戏操作简介。19基于 Python

    46、的贪吃蛇游戏设计2、点击键盘上除了 Esc 键之外的任意键,进入游戏运行界面,如图 6-2 所示:图 6-2运行界面注释:如图所示,界面上正常出现墙壁、障碍物、食物和贪吃蛇,以及左上角得分提示和 4 秒钟“无敌时间”的提示。3、点击键盘上的“UP”、“DOWN”、“LEFT”、“RIGHT”键,控制贪吃蛇上下左右移动,运行正常。4、点击空格键,游戏暂停,如图 6-3 所示:图 6-3暂停游戏20基于 Python 的贪吃蛇游戏设计5、移动贪吃蛇吃到功能性食物,获得你 4 秒“无敌状态”,如图 6-4 所示:图 6-4无敌状态6、贪吃蛇碰撞到障碍物、墙壁或者自己的身体,游戏结束,如图 6-5 所

    47、示:图 6-5游戏结束6.26.2、程序的调试和测试程序的调试和测试调试和测试程序的目的是检测和纠正潜在的错误。必须要经过仔细的调试和测试程序,以尽可能地减少错误,确保程序满足功能和性能要求,并达到原始的设计和使用要求,从而确保程序开发的质量。Python 程序的调试需要设置断点,需要首先在程序中导入调试模块 import21基于 Python 的贪吃蛇游戏设计pdb,然后再代码中适当的地方插入测试代码 pdb.set_trace(),最后需要执行调试代码 python-m pdbmain.py。本程序的主函数中插入了四行测试代码,执行后结果如图 6-6 所示:图 6-6调试结果注释:由调试结

    48、果图我们可以看出,只有程序代码的第 15 行出现无法识别ASCII 码的错误,经过检查,程序代码第 15 行为中文备注“#初始化”,对程序运行没有影响,因此,本程序经调试,可以正常运行。七、七、遇到的困难及解决过程遇到的困难及解决过程1、蛇头 image 的变换贪吃蛇的蛇头需要实现上下左右四个方向移动的功能,当贪吃蛇改变了方向了之后,其头部的图像也相应地需要发生适应其运动方向的变化,刚开始的时候,我采用了四张面向不同方向的蛇头图片,当蛇头方向发生改变的时候,利用指定函数对其 image 属性进行修改,但是,在运行的时候,由于其不是规则的 rect图形,在进行碰撞检测的时候会有视觉上的差异,看上

    49、去像是两者还没碰到就发生了碰撞检测,导致游戏体验比较差。解决过程:将原有的四张不同方向的蛇头图片换成两张不同表情的规则图形,并优化碰撞检测。2、surface 对象位置的刷新在刚开始的设计中,有很多对象的生成是采用 random 随机生成,在运行过程中无法控制各个 surface 对象的位置,导致有不同的 surface 对象出现重合的情况,使游戏无法正常进行下去。解决过程:对某些对象的刷新限定区域,对象与对象之间进行碰撞检测来限制刷新重合,对数量不单一的对象内部进行互相碰撞检测。22基于 Python 的贪吃蛇游戏设计3、身体的移动对于贪吃蛇身体的移动刚开始是一筹莫展的,因为贪吃蛇的蛇头和身

    50、体是不同的对象,要想让他们连接起来如同一个整体来移动其实并不是那么容易。起初我对蛇头和身体分别进行部分移动设计,然后再把他们两部分通过对速度和位置的强行限定来连接在一起,让后一部分完全模仿前一部分运动,但是这种设计最终并没有很好的实现。由于在对键盘事件的捕捉和设定中,只对蛇头进行了事件匹配,当蛇头转弯的时候身体会按照原有的方向移动,修改之后,却又出现身体与蛇头同时转弯的情况,没有实现身体随着蛇头一部分一部分转向的功能。解决过程:将蛇头和身体各部分看成一个整体进行设计,建立一个数组moves,将蛇头和身体各部分的移动坐标全部放进去,利用迭代的算法,让第一个对象移动一个速度(固定的坐标值,大小等于


    注意事项

    本文(基于Python的贪吃蛇游戏设计.pdf)为本站上传会员【鱼**】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表




    页脚通栏广告
    关于我们 - 网站声明 - 诚招英才 - 文档分销 - 便捷服务 - 联系我们 - 成长足迹

    Copyright ©2010-2024   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:4008-655-100    投诉/维权电话:4009-655-100   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-2024(领证中)    



    关注我们 :gzh.png  weibo.png  LOFTER.png