Python程序设计基础项目化教程 课件 项目十二 制作2048小游戏_第1页
Python程序设计基础项目化教程 课件 项目十二 制作2048小游戏_第2页
Python程序设计基础项目化教程 课件 项目十二 制作2048小游戏_第3页
Python程序设计基础项目化教程 课件 项目十二 制作2048小游戏_第4页
Python程序设计基础项目化教程 课件 项目十二 制作2048小游戏_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《Python语言程序设计》项目十二制作2048小游戏Contents了解游戏规则了解设计思路掌握游戏实现游戏介绍PART01《2048》[1]是一款比较流行的数字游戏,最早于2014年3月20日发行。原版2048首先在GitHub上发布,原作者是GabrieleCirulli,后被移植到各个平台。这款游戏是基于《1024》和《小3传奇》的玩法开发而成的新型数字游戏。2014年GabrieleCirulli利用周末的时间写2048这个游戏的程序,仅仅只是好玩而已。他想用一种不同的视觉展现效果和更快速的动画来创造属于自己的游戏版本。每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方乱数出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。不断的叠加最终拼凑出2048这个数字就算成功。游戏背景游戏规则1游戏开始时方格内会出现1个为“2”的数字玩家只需要上下左右其中一个方向移动出现的数字数字向滑动的方向靠拢随机出现一个新的数字“2”或“4”游戏规则游戏规则2相同的数字相撞时会叠加靠拢(例如2和2相撞靠拢会叠加为4)不断的叠加碰撞,最终拼凑出2048为成功游戏规则游戏规则3如果上下左右四个方向均不可移动(棋盘填满数字)挑战失败,GameOver!如果出现数字2048挑战成功,WINNER!(这里以128为例)游戏规则设计思路PART02背景棋盘2048的棋盘是一个4*4的网格网格内置数字头部左侧添加分数统计头部右侧添加操作指示设计思路数字矩阵–右移相同数字叠加计算(2+2=4)出现新的数字“2”或“4”

所得分数累加计算设计思路数字矩阵–左移相同数字叠加计算(2+2=4)出现新的数字“2”或“4”

所得分数累加计算设计思路数字矩阵–上移相同数字叠加计算(2+2=4)出现新的数字“2”或“4”

所得分数累加计算设计思路数字矩阵–下移相同数字叠加计算(2+2=4)出现新的数字“2”或“4”

所得分数累加计算设计思路胜利条件当出现2048这个数字则游戏胜利并结束游戏,WINNER!(这里以128为例)失败条件四个方向均不可移动(棋盘填满数字),GameOver!设计思路源码分析PART03Pygame最初是由PeteShinner编写的,该项目于2000年10月启动,六个月后,pygame版本1.0发布。pygame是一个利用SDL(SimpleDirectMediaLayer)写就的游戏库。SDL是一个用于控制多媒体的跨平台C库,与DirectX相当,它已被用于数百种商业和开源游戏。PeteShinner对Python和SDL两个项目的简洁与优雅印象深刻,他决定将Python和SDL结合起来,组建一个真正利用Python的项目,目标是让做简单的事情变得容易,让困难的事情变简单。Pygame加载游戏中所需的模块:这个是标准的东西资源处理类:定义一些类来处理最基本的资源,这些资源将加载图像和声音,以及连接和断开网络,加载保存游戏文件以及用户可能拥有的任何其他资源。游戏对象类:定义游戏对象的类。任何其他游戏功能:定义其他必要的功能,例如记分板。初始化游戏:包括pygame对象本身,背景,游戏对象(初始化类的实例)以及可能想要添加的任何其他一些代码。

主循环:将任何输入处理(即,观察用户按键/鼠标按钮),更新游戏对象的代码,最后更新屏幕。游戏代码的组成部分

#绘制游戏界面,第一个参数是屏幕,第二个参数颜色

#第三个参数rect大小,第四个默认参数

defdrawSurface(cls,screen,matrix,score):#设置游戏界面的颜色字体

pygame.draw.rect(screen,(255,255,255),Title_Rect)font1=pygame.font.SysFont('simsun',48)font2=pygame.font.SysFont(None,32)#font.render第一个参数是文本内容,第二个参数是否抗锯齿,第三个参数字体颜色

screen.blit(font1.render('Score:',True,(255,127,0)),(20,25))screen.blit(font1.render('%s'%score,True,(255,127,0)),(170,25))screen.blit(font2.render('up',True,(255,127,0)),(360,20))screen.blit(font2.render('leftdownright',True,(255,127,0)),(300,50))a,b=matrix.shape#按照行列画方块

foriinrange(a):forjinrange(b):cls.drawBlock(screen,i,j,Block_Color[matrix[i][j]],matrix[i][j])背景网格源码分析whileTrue:#定义事件

foreventinpygame.event.get():#退出事件

ifevent.type==pygame.QUIT:pygame.quit()sys.exit(0)#按下按键

elifevent.type==pygame.KEYDOWN:if(event.key==K_RIGHT)or(event.key==K_LEFT)or(event.key==K_UP)or(event.key==K_DOWN):#创建各种动作类的对象,上下左右以及其他

actionObject=GameInit.keyDownPressed(event.key,matrix)matrix,score=actionObject.handleData()#处理数据,获得新矩阵与分数

currentscore+=scoreGameInit.drawSurface(screen,matrix,currentscore)ifmatrix.min()!=0ormatrix.max()==16:GameInit.gameOver(matrix)#游戏结束

else:passpygame.display.update()按键监听源码分析#左移,继承基础类的属性和方法,提供一种处理数据的方法,handleData()classLeftAction(UpdateNew):#继承自父类的属性进行初始化。而且是用父类的初始化方法来初始化继承的属性。

def__init__(self,matrix):super(LeftAction,self).__init__(matrix)defhandleData(self):matrix=self.matrix.copy()#获得一份矩阵的复制

newmatrix=self.toSequence(matrix)returnnewmatrix,self.score#上移,同左移+转置classUpAction(UpdateNew):def__init__(self,matrix):super(UpAction,self).__init__(matrix)defhandleData(self):matrix=self.matrix.copy().T#转置

newmatrix=self.toSequence(matrix)returnnewmatrix.T,self.score移动事件源码分析

#去除矩阵中每一行前面与中间的0元素,获得矩阵中0元素位置

#合并元素后返回添加一个2或4元素后的矩阵

deftoSequence(self,matrix):lastmatrix=matrix.copy()m,n=matrix.shape#获得矩阵的行,列

#对于m行,去除前面和中间的0后合并

foriinrange(m):newList=self.removeZero(list(matrix[i]))matrix[i]=newList#添加所有0元素的行列号

forkinrange(Size-1,Size-newList.count(0)-1,-1):#添加所有有0的行号列号

self.zerolist.append((i,k))#矩阵中有最小值0且移动后的矩阵不同,才可以添加0位置处添加随机数

ifmatrix.min()==0and(matrix!=lastmatrix).any():GameInit.initData(matrix,self.zerolist)returnmatrix数字矩阵合并源码分析

defgameOver(matrix):ifmatrix.max()!=2048:print('您获得了胜利,游戏结束')returnTrueelse:testmatrix=matrix.copy()a,b=testmatrix.shapeforiinrange(a):forjinrange(b-1):iftestmatrix[i][j]==testmatrix[i][j+1]:#如果每行存在相邻两个数相同,则游戏没有结束

print('游戏没有结束')returnFalse

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论