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如何实现打砖块游戏”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。

发布于 2022-03-17 21:18:20
收藏
分享
海报
0 条评论
37
上一篇:C++inline函数的特性是什么 下一篇:SpringBoot如何实现发送邮件、发送微信公众号推送功能
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码