シンプルな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
}