こんにちは、StackOverflowです。おそらく、私のpygameプログラム「TableWars」でのユニットのスポーンの問題から私を覚えているでしょう。ゲームの範囲を、ターン制のゲームではなく、リアルタイム戦略に変更することにしました。私はゲームをトップのFlashゲーム「AgeofWar」に沿ってプレイしたいと思っています。スポーンユニット、ゲームのHUD、さらには基本ヘルスなど、ほとんどすべてがゲームで機能します。残念ながら、ユニットが敵や敵の基地を攻撃する能力を実装する方法を理解できないようです。ユニット自体で行われている概念は次のとおりです。
- ユニットはチームのベースの周りのキーを押すとスポーンします:クラス
K_1
からスプライトをスポーンしますRed_Infantry
- ユニットは、スポーンされると
Group
クラスに追加されます。Group
チームごとに1つずつ、合計2つあります。 - ユニットは、敵の基地に近い地点に到達するまで、
move_ip
コールを介して移動し、そこで停止します。def update
これが私がさまざまなユニットのために戦闘を行う方法です:
- ユニットは、攻撃範囲内の敵を見つけるたびに停止します。ユニットが異なれば攻撃範囲も異なります
- その後、ユニットは1秒間隔で攻撃します。
- ユニットが敵ユニットの体力を0に下げることに成功した場合、敵は死亡し、他のユニットは続行する可能性があります
- このサイクルは、ユニットが敵の基地に到達するまで繰り返され、敵の基地に1秒間隔で攻撃します。ユニットの1つは、ベースに通常の3倍のダメージを与えることができます。
これが私のコードのサンプルで、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
メインループには、各ユニットをスポーンする機能のみが含まれています。