基于Python的PyGame库实现的贪吃蛇小游戏
1 项目介绍
1.1 简介
键盘上下左右控制蛇的前进方向,每吃到一个食物,蛇的长度增加一个单位,并生成一个新的食物,得分scores加一;当蛇撞到边界或自己时,游戏结束。时间time随蛇的步子增加,每走一步time加一。游戏结束后,按下空格键重新开始游戏,按下回车键结束游戏,退出。全程有音乐,退出后音乐也停止。
1.2 开发环境
- 开发语言:Python,pyCharm,pygame
2 方案
2.1 模块
-
pygame
-
sys
-
random
-
pyglet
2.2 数据
-
蛇类和食物类
-
初始化窗口为600*600
-
像素块为25*25
-
蛇和食物都是正方形的结点
2.3 接口
-
蛇的身体设置为列表,初始化蛇有5节身体,依次递增
-
食物为小正方形,随机生成,一次一个
-
字体显示为函数控制
2.4 类
-
蛇类:初始化了各种有关蛇的属性。一开始初始化方向为向右,初始化蛇身为长度为五的列表。接着在蛇头处添加结点。再删除最后一个结点,判断是否死亡
-
食物类:初始化食物小方块,随机设置食物位置,如果蛇吃到了食物,则抹掉了该食物,重新设置食物
-
字体:设置字体,并且可以在窗口中显示
2.5 流程
-
先绘制窗口,设置窗口名字为“Snake Game”,设置时钟
-
初始化分数scores和time为0,是否死亡属性为false
-
初始化蛇类与食物类
-
当正常运行时,如果检测到键盘上下左右输入了,则改变蛇前进方向
-
如果碰到四周或者自己的身体,则死亡
-
死亡后如果按空格键,则重新开始
-
如果按回车键,则结束进程,游戏结束
3 关键技术
3.1 蛇身设为一个列表
python
self.body = []
for x in range(5):
self.addnode()
3.2 音乐的播放
python
pygame.init()
pygame.mixer.init()
sound = pygame.mixer.Sound("music.wav")
sound.play()
3.3 蛇增长的函数
python
def addnode(self):
left, top = (0, 0)
if self.body:
left, top = (self.body[0].left, self.body[0].top)
node = pygame.Rect(left, top, 25, 25)
if self.dirction == pygame.K_LEFT:
node.left -= 25
elif self.dirction == pygame.K_RIGHT:
node.left += 25
elif self.dirction == pygame.K_UP:
node.top -= 25
elif self.dirction == pygame.K_DOWN:
node.top += 25
self.body.insert(0, node)
3.4 改变方向但是左右上下不能被逆向更改
python
def chdirection(self, head):
LR = [pygame.K_LEFT, pygame.K_RIGHT]
UD = [pygame.K_UP, pygame.K_DOWN]
if head in LR + UD:
if (head in LR) and (self.dirction in LR):
return
if (head in UD) and (self.dirction in UD):
return
self.dirction = head
4 结果和效果
5 总结和不足
这次贪吃蛇的实现对我来说有很大收获,python虽然是一门陌生的语言,但是却与之前学习过的c和c++有很大的相似性,学习起来也就轻松了很多。但是python也确实是一门新的语言,有些规则与c,c++毕竟是不一样的,还是有难度的。而且python的运行环境与vs不一样,运行所需要的库也不一样,这些不一样就造成了python的难度。虽然有些难度,但是学习起来的时候,能把所有的问题挨个解决的感觉也还是很好的。
编程过程中有很多的问题,例如,文字的内容无法直接判断得出,我是一个个的测试,最后找到了最佳位置。加音乐的问题,我修改了好久的bug,一开始使用的pygame.mixer一直都显示有问题,无法打开mp3等,后来请教了老师,老师表示不要用mp3格式。但是我修改了格式,还是显示打不开文件。然后我上网换了另一种方法,运用系统的os来播放音乐,但是os是调用了系统自身的软件,打开了音乐播放器,而且当我游戏结束的时候无法正常关闭音乐。后来又找到了pyglet的模块,尝试使用,问题出现在只能播放音乐或者游戏,二者不能兼得,播放了音乐,游戏就卡住;开始游戏就无法正常播放音乐。最后找到了的方法是换音乐,用了一个纯wav格式的音乐,再次使用pygame的方法,这才成功。最后的教训在于不能直接改后缀名,要么就用正规的软件修改,要么就使用纯正的格式。
在这一次的编写小游戏的过程中,我上网查阅了很多资料,绝大部分是英文的,这让我明白了英文在计算机领域的重要性。并且我认识到了我的不足,在编程过程方面我还有很多不足之处的,以后的道路任重道远,要不断充实自己,丰富自己,感谢老师和同学对我的帮助,通过这次学习,我学习到了很多知识,以及深刻了解到自学和英语的重要性。
参考文献
- 基于.NET平台的ETF终端设计与实现(吉林大学·刘健)
- 主题爬虫关键技术研究(哈尔滨工程大学·黄正德)
- 深度可定制的工具化爬虫系统的设计与实现(北京邮电大学·李笑语)
- 主题爬虫关键技术研究(哈尔滨工程大学·黄正德)
- 基于SSH框架的电子宠物系统设计与实现(吉林大学·王丽丽)
- 基于网络爬虫的电影集成搜索系统设计与实现(江西农业大学·江沛)
- 轻量级分布式虚假信息爬虫的设计与实现(辽宁大学·韩昱)
- 豆玩手机游戏平台的设计与实现(吉林大学·李天明)
- 基于.NET平台的ETF终端设计与实现(吉林大学·刘健)
- 基于B/S架构的酷跑社区系统的设计与实现(内蒙古大学·张晓乐)
- 基于Android平台的手机游戏的设计与开发(云南大学·秦成)
- 基于Android平台的手机游戏的设计与开发(云南大学·秦成)
- 基于Android平台的手机游戏的设计与开发(云南大学·秦成)
- 基于Android平台的象棋游戏设计与开发(吉林大学·阿若娜)
- 基于Cocos2d-JS引擎的手机网页游戏设计与实现(武汉邮电科学研究院·赵甜)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕业设计驿站 ,原文地址:https://m.bishedaima.com/yuanma/35227.html