1

シンプルなscore4ゲームを作りました。プロジェクトだったので、CLI IO システムを作りました。

フルレでアップグレードしたいので、IO インターフェイス全体 (移動の選択、ボード ショー) をクラス内の仮想関数の束にしました。そこで、iostream を使ってそれらの機能を実装するだけの CLI インターフェイスを作成しました。このインターフェイスを次のように初期化します。

IOInterface *ii = new IOConsoleInterface();

ここで、ゲームの wxWidgets インターフェイスを作成し、-gui スイッチを使用して実行したいと考えています。簡単にフレームを作ったのですが、最終的にピースを接続したいので、GUI を初期化すると無限ループに入り、Score4 ゲーム ループに戻りません。

ゲーム ループは ii 関数を呼び出すので、wxWidgets のコントロールは必要ありません。ただそこにいて、ゲームループによって命令されたことを実行したいだけです。

前もって感謝します

編集: Score4 は wx アプリケーションではありませんでした。それにいくつかの wxGUI クラスを適用したいだけです。

Edit2: ゲーム ループ コード:

「ii」は InputInterface で、移動や再プレイの応答などの情報を取得するオブジェクトです。

「oi」は OutpuInterface で、ボードを描画し、プレイヤーに自分の番であることを伝えるオブジェクトです。

void Mechanics::gameLoop(){

bool newGame = true;
int gameCounter = 0;

while(newGame){

    short choice = 0;
    short turn;
    gameCounter++;

    currentPlayer = decideStart(gameCounter);
    board.clear();
    oi->refreshTable(board, p1,p2); 


    for (turn = 1; turn <= ROWS*COLS; turn++){

        oi->playerPrompt(currentPlayer);

        do{
            if (currentPlayer->isAI == 0)
                choice = ii->getPlayersMove(currentPlayer);
            else{
                GameInstance gi = exportGameInstance();
                choice = currentPlayer->chooseMove(gi);     // AI's movement
            }

        } while (!(board.checkMoveValidity(choice)));   //breaks when move is valid--> when condition is >0

        board.move(choice,currentPlayer);

        oi->moveAnimation(choice,currentPlayer);

        oi->refreshTable(board, p1,p2); 

        if (board.winConditionCheck(currentPlayer))
            break;

        changeCurrentPlayer();
    }

    if (turn > ROWS*COLS)       //draw
        oi->draw_conclusion();
    else
        oi->win_loss_conclusion(true,currentPlayer);


    newGame = ii->newGamePrompt();
}

    delete ii;
    delete oi;
                    // GAME ENDS HERE

}

4

1 に答える 1

0

GUI アプリケーションでイベント ループを実行する必要がありますが、それを回避する (合理的な) 方法はありません。そのため、 eg を使用してイベント ループに入ることなく wxWidgets を初期化できますがwxEntryStart()、後で実行する必要があります。

コンソールと GUI の両方のインターフェイスが必要な場合は、両方のケースでイベント ループを実行するのが最善です。ただし、前者の場合は独自のイベント ループを実行し、後者の場合は wx を実行します。

于 2013-11-14T22:11:00.100 に答える