AIのキー入力

例えばぷよぷよの対戦。
AIもプレイヤーと同じキー入力をします。
キー入力は、


class Input {
/**
    Onならtrueを返す
*/

    bool isLeft();
    bool isRight();
    bool isUp();
    bool isDown();
}

class AI : public Input;
class Player : public Input;


{
    Input 1P, 2P;

    if (1P->isLeft()) {
    }
    if (1P->isRight()) {
    }
    if (1P->isUp()) {
    }
    if (1P->isDown()) {
    }
}

という感じのインターフェースを使います。
AIでは、次のぷよをどこにどう落とすかを計算してスタックに積みます。


// 左に3セル、右方向に2回転
out.push(moveLeft);
out.push(moveLeft);
out.push(moveLeft);
out.push(rotateRight);
out.push(rotateRight);

bool Player::isLeft() { return keyboard.isKeyPush(moveLeft); }
bool AI::isLeft() { return out.front()==moveLeft; }

あとは上のインターフェースでスタックの要素をpopしていくだけです。

対戦モードによって組み合わせを変えます。


1P = new AI;        // AI
1P = new Player;    // プレイヤー
2P = new AI;        // AI
2P = new Player;    // プレイヤー


要素が無くなったらあとは下を押されてる状態にして、落下させてもいいですね。
(初心者ステージではOffにしたり)