Python Pygame如何实现打砖块游戏
Python Pygame如何实现打砖块游戏
本文小编为大家详细介绍“PythonPygame如何实现打砖块游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“PythonPygame如何实现打砖块游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
开发工具
Python版本:3.6.4
相关模块:
pygame模块;
以及一些Python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
效果展示
在cmd窗口运行Game18.py文件即可。
效果如下:
视频链接
原理简介
游戏规则(摘自维基百科):
打砖块是一种电子游戏。屏幕上部有若干层砖块,一个球在屏幕上方的砖块和墙壁、屏幕下方的移动短板和两侧墙壁之间来回弹,当球碰到砖块时,球会反弹,而砖块会消失。玩家要控制萤幕下方的板子,让“球”通过撞击消去所有的“砖块”,球碰到萤幕底边就会消失,所有的球消失则游戏失败。把砖块全部消去就可以破关。
板子操作方式:按“→”向右,按“←”向左。
逐步实现:
游戏实现起来其实非常简单。首先,我们根据游戏规则定义3个游戏精灵类,分别是:
板子类;
球类;
砖块类。
先定义游戏精灵的好处是方便后续游戏精灵类之间的碰撞检测以及游戏精灵的操作管理等。具体而言,对于板子类,其应当具有根据玩家操作而移动等功能,其代码实现如下:
'''板子'''classPaddle(pygame.sprite.Sprite):def__init__(self,x,y,width,height,SCREENWIDTH,SCREENHEIGHT,**kwargs):pygame.sprite.Sprite.__init__(self)self.init_state=[x,y,width,height]self.rect=pygame.Rect(x,y,width,height)self.base_speed=10self.SCREENWIDTH=SCREENWIDTHself.SCREENHEIGHT=SCREENHEIGHT'''移动板子'''defmove(self,direction):ifdirection=='left':self.rect.left=max(0,self.rect.left-self.base_speed)elifdirection=='right':self.rect.right=min(self.SCREENWIDTH,self.rect.right+self.base_speed)else:raiseValueError('Paddle.move.directionunsupport<%s>...'%direction)returnTrue'''绑定到屏幕上'''defdraw(self,screen,color):pygame.draw.rect(screen,color,self.rect)returnTrue'''重置'''defreset(self):self.rect=pygame.Rect(self.init_state[0],self.init_state[1],self.init_state[2],self.init_state[3])returnTrue
对于球类,则由电脑控制其移动方式(比如撞到墙自动换方向等),其代码实现如下:
'''球'''classBall(pygame.sprite.Sprite):def__init__(self,x,y,radius,SCREENWIDTH,SCREENHEIGHT,**kwargs):pygame.sprite.Sprite.__init__(self)self.init_state=[x,y,radius*2,radius*2]self.rect=pygame.Rect(x,y,radius*2,radius*2)self.base_speed=[5,5]self.direction=[random.choice([1,-1]),-1]self.radius=radiusself.SCREENWIDTH=SCREENWIDTHself.SCREENHEIGHT=SCREENHEIGHT'''移动球'''defmove(self):self.rect.left+=self.direction[0]*self.base_speed[0]self.rect.top+=self.direction[1]*self.base_speed[1]ifself.rect.left<=0:self.rect.left=0self.direction[0]=-self.direction[0]elifself.rect.right>=self.SCREENWIDTH:self.rect.right=self.SCREENWIDTHself.direction[0]=-self.direction[0]ifself.rect.top<=0:self.rect.top=0self.direction[1]=-self.direction[1]elifself.rect.bottom>=self.SCREENHEIGHT:returnFalsereturnTrue'''改变运动速度和方向(与拍相撞时)'''defchange(self):self.base_speed=[random.choice([4,5,6]),random.choice([4,5,6])]self.direction=[random.choice([1,-1]),-1]returnTrue'''绑定到屏幕上'''defdraw(self,screen,color):pygame.draw.circle(screen,color,(self.rect.left+self.radius,self.rect.top+self.radius),self.radius)returnTrue'''重置'''defreset(self):self.rect=pygame.Rect(self.init_state[0],self.init_state[1],self.init_state[2],self.init_state[3])returnTrue
对于砖块类,则比较简单,其代码实现如下:
'''砖块'''classBrick(pygame.sprite.Sprite):def__init__(self,x,y,width,height,**kwargs):pygame.sprite.Sprite.__init__(self)self.init_state=[x,y,width,height]self.rect=pygame.Rect(x,y,width,height)'''绑定到屏幕上'''defdraw(self,screen,color):pygame.draw.rect(screen,color,self.rect)returnTrue'''重置'''defreset(self):self.rect=pygame.Rect(self.init_state[0],self.init_state[1],self.init_state[2],self.init_state[3])returnTrue
然后和以前一样,多弄几个关卡,每个关卡地图都用一个.level文件来设计定义,例如这样:
其中B代表砖块所在的位置。
OK,接下来可以考虑实现游戏主循环了。基本的逻辑就是:
即每关结束判断一下是过关了还是GG了,过关了就进入下一关,否则就直接进入结束界面。当然最后一关是个例外,因为结束之后肯定要进入结束界面。具体而言,主逻辑代码实现如下:
defrun(self):whileTrue:self.__startInterface()foridx,levelpathinenumerate(self.cfg.LEVELPATHS):state=self.__runLevel(levelpath)ifidx==len(self.cfg.LEVELPATHS)-1:breakifstate=='win':self.__nextLevel()else:breakifstate=='fail':self.__endInterface(False)else:self.__endInterface(True)
读到这里,这篇“PythonPygame如何实现打砖块游戏”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
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如何判断...