早爆娱闻 玩出花儿了!一文教你用 Python 制作吃豆人游戏!| 附代,Python


早爆娱闻 玩出花儿了!一文教你用 Python 制作吃豆人游戏!| 附代,Python
文章图片
早爆娱闻 玩出花儿了!一文教你用 Python 制作吃豆人游戏!| 附代,Python
文章图片
作者|李秋键
责编|Carol
封图|CSDN下载自视觉中国
近几年来Python语言得到了快速发展 , 而Pygame作为Python开发应用和游戏必备的库更是展现了Python的优越性 。
而今天我们就将借助Pygame建立吃豆人游戏 。
早爆娱闻 玩出花儿了!一文教你用 Python 制作吃豆人游戏!| 附代,Python
文章图片
吃豆人是电子游戏历史上的经典街机游戏 , 由Namco公司的岩谷彻设计并由MidwayGames在1980年发行
。 Pac-Man被认为是80年代最经典的街机游戏之一 , 游戏的主角小精灵的形象甚至被作为一种大众文化符号 , 或是此产业的代表形象 。
而Pygame模块是跨平台Python模块 , 专为电子游戏设计 , 包含图像、声音 。 建立在SDL基础上 , 允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚 。
最终游戏效果如下可见:
【早爆娱闻 玩出花儿了!一文教你用 Python 制作吃豆人游戏!| 附代,Python】
早爆娱闻 玩出花儿了!一文教你用 Python 制作吃豆人游戏!| 附代,Python
文章图片
早爆娱闻 玩出花儿了!一文教你用 Python 制作吃豆人游戏!| 附代,Python
文章图片
一、实验前的准备
首先我们使用的python版本是3.6.5所用到的模块是pygame模块 , 用来创建游戏框架 。 Random模块用来随机生成方向 。
早爆娱闻 玩出花儿了!一文教你用 Python 制作吃豆人游戏!| 附代,Python
文章图片
素材准备
首先我们将图片放到images目录下 , 背景音乐放到sounds目录下 。
如下图可见:
早爆娱闻 玩出花儿了!一文教你用 Python 制作吃豆人游戏!| 附代,Python
文章图片
早爆娱闻 玩出花儿了!一文教你用 Python 制作吃豆人游戏!| 附代,Python
文章图片
游戏搭建
1、定义一些精灵:
整体的类变量定义包括墙类 , 通过pygame的图片填充作为墙类的加载;同理还包括食物类和角色 。 而怪物的随机运动使用random产生随机运动方向 。
其对应的代码如下:
importrandomimportpygame'''墙类'''classWall(pygame.sprite.Sprite):def__init__(self,x,y,width,height,color,**kwargs):pygame.sprite.Sprite.__init__(self)self.image=pygame.Surface([width,height])self.image.fill(color)self.rect=self.image.get_rectself.rect.left=xself.rect.top=y'''食物类'''classFood(pygame.sprite.Sprite):def__init__(self,x,y,width,height,color,bg_color,**kwargs):pygame.sprite.Sprite.__init__(self)self.image=pygame.Surface([width,height])self.image.fill(bg_color)self.image.set_colorkey(bg_color)pygame.draw.ellipse(self.image,color,[0,0,width,height])self.rect=self.image.get_rectself.rect.left=xself.rect.top=y'''角色类'''classPlayer(pygame.sprite.Sprite):def__init__(self,x,y,role_image_path):pygame.sprite.Sprite.__init__(self)self.role_name=role_image_path.split('/')[-1].split('.')[0]self.base_image=pygame.image.load(role_image_path).convertself.image=self.base_image.copyself.rect=self.image.get_rectself.rect.left=xself.rect.top=yself.prev_x=xself.prev_y=yself.base_speed=[30,30]self.speed=[0,0]self.is_move=Falseself.tracks=self.tracks_loc=[0,0]'''改变速度方向'''defchangeSpeed(self,direction):ifdirection[0]<0:self.image=pygame.transform.flip(self.base_image,True,False)elifdirection[0]>0:self.image=self.base_image.copyelifdirection[1]<0:self.image=pygame.transform.rotate(self.base_image,90)elifdirection[1]>0:self.image=pygame.transform.rotate(self.base_image,-90)self.speed=[direction[0]*self.base_speed[0],direction[1]*self.base_speed[1]]returnself.speed'''更新角色位置'''defupdate(self,wall_sprites,gate_sprites):ifnotself.is_move:returnFalsex_prev=self.rect.lefty_prev=self.rect.topself.rect.left+=self.speed[0]self.rect.top+=self.speed[1]is_collide=pygame.sprite.spritecollide(self,wall_sprites,False)ifgate_spritesisnotNone:ifnotis_collide:is_collide=pygame.sprite.spritecollide(self,gate_sprites,False)ifis_collide:self.rect.left=x_prevself.rect.top=y_prevreturnFalsereturnTrue'''生成随机的方向'''defrandomDirection(self):returnrandom.choice([[-0.5,0],[0.5,0],[0,0.5],[0,-0.5]])