Python+Pygame打地鼠游戏
文章介绍了如何用Python和Pygame库实现一个简单的打地鼠游戏。首先,定义了地鼠(Mole)和锤子(Hammer)两个游戏精灵类。地鼠类包含两种状态:被击中与未被击中,通过切换图片来表现状态变化。锤子类也有两种状态:未锤下与已锤下,锤下后会迅速恢复原状。接着,文章简要描述了游戏初始化的步骤,包括屏幕设置和素材加载。最后,鼓励读者自行尝试编写游戏主循环和界面。整体内容简洁明了,适合初学者参考。
·
打地鼠的游戏规则相信大家都知道,这里就不多介绍了,反正就是不停地拿锤子打洞里钻出来的地鼠呗~
首先,让我们确定一下游戏中有哪些元素。打地鼠打地鼠,地鼠当然得有啦,那我们就写个地鼠的游戏精灵类呗:
'''地鼠'''
class Mole(pygame.sprite.Sprite):
def __init__(self, image_paths, position, **kwargs):
pygame.sprite.Sprite.__init__(self)
self.images = [pygame.transform.scale(pygame.image.load(image_paths[0]), (101, 103)),
pygame.transform.scale(pygame.image.load(image_paths[-1]), (101, 103))]
self.image = self.images[0]
self.rect = self.image.get_rect()
self.mask = pygame.mask.from_surface(self.image)
self.setPosition(position)
self.is_hammer = False
'''设置位置'''
def setPosition(self, pos):
self.rect.left, self.rect.top = pos
'''设置被击中'''
def setBeHammered(self):
self.is_hammer = True
'''显示在屏幕上'''
def draw(self, screen):
if self.is_hammer: self.image = self.images[1]
screen.blit(self.image, self.rect)
'''重置'''
def reset(self):
self.image = self.images[0]
self.is_hammer = False
显然,地鼠有被锤子击中和未被锤子击中这两种状态,所以需要加载两张图,当地鼠被击中时从未被击中的地鼠状态图切换到被击中后的地鼠状态图(我找的图可能不太像地鼠,请各位老哥见谅)。然后我们再来定义一下锤子这个游戏精灵类,和地鼠类似,锤子也有未锤下去和已锤下去两种状态,只不过锤下去之后需要迅速恢复回未锤下去的状态,具体而言,代码实现如下:
class Hammer(pygame.sprite.Sprite):
def __init__(self, image_paths, position, **kwargs):
pygame.sprite.Sprite.__init__(self)
self.images = [pygame.image.load(image_paths[0]), pygame.image.load(image_paths[1])]
self.image = self.images[0]
self.rect = self.image.get_rect()
self.mask = pygame.mask.from_surface(self.images[1])
self.rect.left, self.rect.top = position
# 用于显示锤击时的特效
self.hammer_count = 0
self.hammer_last_time = 4
self.is_hammering = False
'''设置位置'''
def setPosition(self, pos):
self.rect.centerx, self.rect.centery = pos
'''设置hammering'''
def setHammering(self):
self.is_hammering = True
'''显示在屏幕上'''
def draw(self, screen):
if self.is_hammering:
self.image = self.images[1]
self.hammer_count += 1
if self.hammer_count > self.hammer_last_time:
self.is_hammering = False
self.hammer_count = 0
else:
self.image = self.images[0]
screen.blit(self.image, self.rect)
OK,定义完游戏精灵之后,我们就可以开始写主程序啦。首先自然是游戏初始化:
'''游戏初始化'''
def initGame():
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode(cfg.SCREENSIZE)
pygame.display.set_caption('Whac A Mole-微信公众号:Charles的皮卡丘')
return screen
然后加载必要的游戏素材和定义必要的游戏变量、游戏主循环、界面、开始结束界面(就不在文章里赘述一遍了)快去自己尝试一下吧!!
更多推荐
所有评论(0)