你好,堆栈溢出。你可能还记得我在我的 pygame 程序“Table Wars”中的单位生成问题。我决定将我的游戏范围改为即时战略而非回合制游戏。我希望这款游戏能够像顶级 Flash 游戏:“战争时代”那样玩。游戏中的几乎所有东西都可以正常工作:生成单位、游戏的 HUD,甚至是基础生命值。不幸的是,我似乎无法弄清楚如何实现单位攻击敌人或敌人基地的能力。以下是单位本身的概念:
- 该单位在团队基地周围的按键上
K_1
生成:从Red_Infantry
类中生成一个精灵 - 该单位在生成时被添加到一个
Group
类中。有两个Group
s,每个团队一个。 - 该单位通过 a
move_ip
内的呼叫移动,def update
直到它到达靠近敌人基地的一个点,然后停止。
以下是我希望不同单位的战斗方式:
- 单位在其攻击范围内发现敌人时停止。不同的单位有不同的攻击范围
- 然后该单位以一秒的间隔进行攻击。
- 如果该单位成功将敌方单位的生命值降至 0,则敌方死亡,另一方可以继续
- 这个循环一直重复,直到单位到达敌方基地,然后它将每隔一秒攻击敌方基地。其中一个单位将能够对基地造成三倍的正常伤害。
这是我的代码示例,显示了Red_Infantry
该类:
class Red_Infantry(pygame.sprite.Sprite):
def __init__(self, screen):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image('Soldier_red.png', -1)
self.rect.move_ip(random.randint(75, 100), random.randint(275, 325))
self.selected = 0
self.area = screen.get_rect()
self.health = 100 #Soldiers are have mediocre toughness.
self.attack_damage = 25 #The amount of damage it deals
self.range = 20 #The attack range of the unit.
self.update()
def update(self):
self.rect.move_ip(1, 0)
if self.rect.right >= 725: #This position is close to the enemy base...
self.rect.right = 725 #...where it will then stop
if self.health <= 0:
self.kill() #a simple code that kills the sprite if his health reaches 0
主循环仅包含生成每个单位的能力。