AI科技大本营|玩出花儿了!一文教你用 Python 制作吃豆人游戏! | 附代码,Python

_本文原题为:Python玩出花儿了!一文教你用Python制作吃豆人游戏!|附代码
AI科技大本营|玩出花儿了!一文教你用 Python 制作吃豆人游戏! | 附代码,Python
文章图片
作者|李秋键
责编|Carol
封图|CSDN下载自视觉中国
近几年来Python语言得到了快速发展 , 而Pygame作为Python开发应用和游戏必备的库更是展现了Python的优越性 。
而今天我们就将借助Pygame建立吃豆人游戏 。
AI科技大本营|玩出花儿了!一文教你用 Python 制作吃豆人游戏! | 附代码,Python
文章图片
吃豆人是电子游戏历史上的经典街机游戏 , 由Namco公司的岩谷彻设计并由MidwayGames在1980年发行 。 Pac-Man被认为是80年代最经典的街机游戏之一 , 游戏的主角小精灵的形象甚至被作为一种大众文化符号 , 或是此产业的代表形象 。
而Pygame模块是跨平台Python模块 , 专为电子游戏设计 , 包含图像、声音 。 建立在SDL基础上 , 允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚 。
最终游戏效果如下可见:
AI科技大本营|玩出花儿了!一文教你用 Python 制作吃豆人游戏! | 附代码,Python
文章图片
一、实验前的准备
首先我们使用的python版本是3.6.5所用到的模块是pygame模块 , 用来创建游戏框架 。 Random模块用来随机生成方向 。
素材准备
首先我们将图片放到images目录下 , 背景音乐放到sounds目录下 。
如下图可见:
AI科技大本营|玩出花儿了!一文教你用 Python 制作吃豆人游戏! | 附代码,Python
文章图片
游戏搭建
1、定义一些精灵:
整体的类变量定义包括墙类 , 通过pygame的图片填充作为墙类的加载;同理还包括食物类和角色 。 而怪物的随机运动使用random产生随机运动方向 。
其对应的代码如下:
importrandom
importpygame
'''墙类'''
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_rect
self.rect.left=x
self.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_rect
self.rect.left=x
self.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).convert
self.image=self.base_image.copy
self.rect=self.image.get_rect
self.rect.left=x
self.rect.top=y
self.prev_x=x
self.prev_y=y
self.base_speed=[30,30]
self.speed=[0,0]
self.is_move=False
self.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.copy
elifdirection[1]<0:
self.image=pygame.transform.rotate(self.base_image,90)