怎么用Python编写一个宝石消消乐小游戏
怎么用Python编写一个宝石消消乐小游戏
本篇内容介绍了“怎么用Python编写一个宝石消消乐小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
开发工具
python版本:3.6.4
相关模块:
pygame;以及一些python自带的模块。
环境搭建
安装python并添加到环境变量,pip安装需要的相关模块即可。
原理简介
游戏规则:
玩家通过鼠标交换相邻的拼图,若交换后水平/竖直方向存在连续三个相同的拼图,则这些拼图消失,玩家得分,同时生成新的拼图以补充消失的部分,否则,交换失败,玩家不得分。玩家需要在规定时间内获取尽可能高的得分。
实现过程:
首先加载一些必要的游戏素材:
加载背景音乐:
pygame.mixer.init()pygame.mixer.music.load(os.path.join(ROOTDIR,"resources/audios/bg.mp3"))pygame.mixer.music.set_volume(0.6)pygame.mixer.music.play(-1)
加载音效:
sounds={}sounds['mismatch']=pygame.mixer.Sound(os.path.join(ROOTDIR,'resources/audios/badswap.wav'))sounds['match']=[]foriinrange(6):sounds['match'].append(pygame.mixer.Sound(os.path.join(ROOTDIR,'resources/audios/match%s.wav'%i)))
加载字体:
font=pygame.font.Font(os.path.join(ROOTDIR,'resources/font.TTF'),25)
图片加载:
gem_imgs=[]foriinrange(1,8):gem_imgs.append(os.path.join(ROOTDIR,'resources/images/gem%s.png'%i))
接着我们就要设置一下游戏的主循环吧
主要循环:
game=gemGame(screen,sounds,font,gem_imgs)whileTrue:score=game.start()flag=False
我给大家讲一下原理:
逻辑其实很简单,就是不断检测是否有鼠标点击事件发生,如果有,则判断鼠标点击时的位置是否在某拼图块的位置区域内,若在,则选中该拼图块,否则不选中。
当有第二块拼图块被选中时,则判断两个拼图块是否满足拼图交换的条件,若满足,则交换拼图块,并获得奖励,否则不交换并取消选这两个拼图块的选中状态。
最后肯定就是设置游戏的结束和退出啦:
游戏倒计时结束后,进入游戏结束界面,界面显示用户当前得分。同时,若用户键入R键则重新开始游戏,键入ESC键则退出游戏。
游戏结束后玩家选择重开或退出:源码如下
whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUITor(event.type==pygame.KEYUPandevent.key==pygame.K_ESCAPE):pygame.quit()sys.exit()elifevent.type==pygame.KEYUPandevent.key==pygame.K_r:flag=Trueifflag:breakscreen.fill((135,206,235))text0='Finalscore:%s'%scoretext1='Press<R>torestartthegame.'text2='Press<Esc>toquitthegame.'y=150foridx,textinenumerate([text0,text1,text2]):text_render=font.render(text,1,(85,65,0))rect=text_render.get_rect()ifidx==0:rect.left,rect.top=(212,y)elifidx==1:rect.left,rect.top=(122.5,y)else:rect.left,rect.top=(126.5,y)y+=100screen.blit(text_render,rect)pygame.display.update()game.reset()
上面就是一步一步来讲代码思路理清楚的讲解啦 下面我把源码放到下面:
importosimportpygamefromutilsimport*fromconfigimport*'''游戏主程序'''defmain():pygame.init()screen=pygame.display.set_mode((WIDTH,HEIGHT))pygame.display.set_caption('Gemgem-Python交流群:932574150)#加载背景音乐pygame.mixer.init()pygame.mixer.music.load(os.path.join(ROOTDIR,"resources/audios/bg.mp3"))pygame.mixer.music.set_volume(0.6)pygame.mixer.music.play(-1)#加载音效sounds={}sounds['mismatch']=pygame.mixer.Sound(os.path.join(ROOTDIR,'resources/audios/badswap.wav'))sounds['match']=[]foriinrange(6):sounds['match'].append(pygame.mixer.Sound(os.path.join(ROOTDIR,'resources/audios/match%s.wav'%i)))#加载字体font=pygame.font.Font(os.path.join(ROOTDIR,'resources/font.TTF'),25)#图片加载gem_imgs=[]foriinrange(1,8):gem_imgs.append(os.path.join(ROOTDIR,'resources/images/gem%s.png'%i))#主循环game=gemGame(screen,sounds,font,gem_imgs)whileTrue:score=game.start()flag=False#一轮游戏结束后玩家选择重玩或者退出whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUITor(event.type==pygame.KEYUPandevent.key==pygame.K_ESCAPE):pygame.quit()sys.exit()elifevent.type==pygame.KEYUPandevent.key==pygame.K_r:flag=Trueifflag:breakscreen.fill((135,206,235))text0='Finalscore:%s'%scoretext1='Press<R>torestartthegame.'text2='Press<Esc>toquitthegame.'y=150foridx,textinenumerate([text0,text1,text2]):text_render=font.render(text,1,(85,65,0))rect=text_render.get_rect()ifidx==0:rect.left,rect.top=(212,y)elifidx==1:rect.left,rect.top=(122.5,y)else:rect.left,rect.top=(126.5,y)y+=100screen.blit(text_render,rect)pygame.display.update()game.reset()'''test'''if__name__=='__main__':main()
“怎么用Python编写一个宝石消消乐小游戏”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...