0
class Gunner {

    public $health;
    public $attack;

    function __construct($health, $attack) {
        $this->health = $health;
        $this->attack = $attack;
    }
}

$player = array();
$player[] = new Gunner(100, 20);
$player[] = new Gunner(100, 20);
$player[] = new Gunner(100, 20);

$enemy = array();
$enemy[] = new Gunner(100, 20);
$enemy[] = new Gunner(100, 20);

両方の配列に「エンティティ」/オブジェクトがある限り、while ループを実行したいと考えています。それ、どうやったら出来るの?$player[0] が戦うように (別名 rand(1,20) を実行)、すべてのエンティティと戦い、0 になるまで反対のヘルスから削除します。0 以下の場合は、配列からのエンティティ (オブジェクト)。

while ループまたは配列からの削除がどのように見えるかはわかりません。

while ((count($attacker) > 0) && (count($defender) > 0))
{
    $attacker_attack = rand(1, 25);

    $defender[0]->health -= $attacker_attack;

    if (!$defender[0]->IsAlive()) {
        unset($defender[0]);
        array_values($defender);
    }

    $defender_attack = rand(1, 20);

    $attacker[0]->health -= $defender_attack;

    if (!$attacker[0]->IsAlive()) {
        unset($attacker[0]);
        array_values($attacker);
    }
}
4

1 に答える 1

2

このような意味ですか(デモ)?

class Gunner
{
    public $health;
    public $attack;

    public function __construct($health, $attack)
    {
        $this->health = $health;
        $this->attack = $attack;
    }
}

$attacker = array
(
    new Gunner(100, 20),
    new Gunner(100, 20),
    new Gunner(100, 20),
);

$defender = array
(
    new Gunner(100, 30),
    new Gunner(100, 30),
);

while ((count($attacker) > 0) && (count($defender) > 0)) // fight till death!
{
    $defender[0]->health -= $attacker[0]->attack;

    if ($defender[0]->health <= 0) // defender dead?
    {
        unset($defender[0]); $defender = array_values($defender);
    }

    if (count($defender) > 0) // are any def alive for counter-attack?
    {
        $attacker[0]->health -= $defender[0]->attack;

        if ($attacker[0]->health <= 0) // attacker dead?
        {
            unset($attacker[0]); $attacker = array_values($attacker);
        }
    }
}

print_r($attacker);
print_r($defender);

PS:あなたの最後のコメントを反映するようにコードを更新しました、ターンがどのようにプレイされるべきかはちょっと不明確です。

于 2012-05-13T10:25:34.743 に答える