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


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:
returnFalse
x_prev=self.rect.left
y_prev=self.rect.top
self.rect.left+=self.speed[0]
self.rect.top+=self.speed[1]
is_collide=pygame.sprite.spritecollide(self,wall_sprites,False)
【AI科技大本营|玩出花儿了!一文教你用 Python 制作吃豆人游戏! | 附代码,Python】ifgate_spritesisnotNone:
ifnotis_collide:
is_collide=pygame.sprite.spritecollide(self,gate_sprites,False)
ifis_collide:
self.rect.left=x_prev
self.rect.top=y_prev
returnFalse
returnTrue
'''生成随机的方向'''
defrandomDirection(self):
returnrandom.choice([[-0.5,0],[0.5,0],[0,0.5],[0,-0.5]])
2、游戏关卡定义:
在这里设置好了关卡一 。 关卡的定义必须包括墙的位置 , 不同关卡墙的位置和怪物的位置不同 。 更多关卡可以参照设置
对应代码如下:
importpygame
fromSpritesimport*
NUMLEVELS=1
'''关卡一'''
classLevel1:
def__init__(self):
self.info='level1'
'''创建墙'''
defsetupWalls(self,wall_color):
self.wall_sprites=pygame.sprite.Group
wall_positions=[[0,0,6,600],
[0,0,600,6],
[0,600,606,6],
[600,0,6,606],
[300,0,6,66],
[60,60,186,6],
[360,60,186,6],
[60,120,66,6],
[60,120,6,126],
[180,120,246,6],
[300,120,6,66],
[480,120,66,6],
[540,120,6,126],
[120,180,126,6],
[120,180,6,126],
[360,180,126,6],
[480,180,6,126],
[180,240,6,126],
[180,360,246,6],
[420,240,6,126],
[240,240,42,6],
[324,240,42,6],
[240,240,6,66],
[240,300,126,6],
[360,240,6,66],
[0,300,66,6],
[540,300,66,6],
[60,360,66,6],
[60,360,6,186],
[480,360,66,6],
[540,360,6,186],
[120,420,366,6],
[120,420,6,66],
[480,420,6,66],
[180,480,246,6],
[300,480,6,66],
[120,540,126,6],
[360,540,126,6]]
forwall_positioninwall_positions:
wall=Wall(*wall_position,wall_color)
self.wall_sprites.add(wall)
returnself.wall_sprites
'''创建门'''
defsetupGate(self,gate_color):
self.gate_sprites=pygame.sprite.Group
self.gate_sprites.add(Wall(282,242,42,2,gate_color))
returnself.gate_sprites
'''创建角色'''
defsetupPlayers(self,hero_image_path,ghost_images_path):
self.hero_sprites=pygame.sprite.Group
self.ghost_sprites=pygame.sprite.Group
self.hero_sprites.add(Player(287,439,hero_image_path))
foreachinghost_images_path:
role_name=each.split('/')[-1].split('.')[0]
ifrole_name=='Blinky':
player=Player(287,199,each)
player.is_move=True
player.tracks=[[0,-0.5,4],[0.5,0,9],[0,0.5,11],[0.5,0,3],[0,0.5,7],[-0.5,0,11],[0,0.5,3],
[0.5,0,15],[0,-0.5,15],[0.5,0,3],[0,-0.5,11],[-0.5,0,3],[0,-0.5,11],[-0.5,0,3],
[0,-0.5,3],[-0.5,0,7],[0,-0.5,3],[0.5,0,15],[0,0.5,15],[-0.5,0,3],[0,0.5,3],


推荐阅读