これは私の最初の投稿ですが、私はしばらくスタックオーバーフローをストーカーしました。私はティックタックトウボードを表すBoard
クラスを作るという課題を持っています。私はまた、ファイルからティックタックのつま先の動きを読み込んでボードに再生するReader
クラスを作成する必要があります(代わりに...知っているプレイヤー...実際にゲームをプレイしています)。リーダークラスのゲームボード:正しくブール値を返す
ゲームボードが
array[row][column]
00 01 02
10 11 12
20 21 22
likeso 2D配列として設定されている割り当てのための要件は、.txtファイルからBoard
オブジェクトに値を読み込み、ゲームをプレイするためにReader
クラスのブール機能が欲しいです。しかし、ファイルが二度同じ動きを再生しようとすると、それはfalse
を返す必要があります。oは以来01で再生することはできませんので
game.txt
01
11
12
01
がfalse
を返す必要があります:たとえば(ノタのベーネ最初の動きは、x常にあります) xはそこから始まった。
ゲームが終了してもファイル内に「再生」がある場合は、false
も返す必要があります。たとえば:
game2.txt
00
10
11
12
22
02
oはx
が既に獲得しているにもかかわらず02
を再生しようとします。これはまたfalse
を返します(何とか勝った場合も同じです)。
今、私は正しく返すものは得られません。コードは、このリンクである(私が知っている、私が知っている...ない最高の共有方法が、私は初心者だと私はそれを受け入れることを積み重ね取得する方法を見つけ出すことができませんでした):
bool Reader::readGameFile(string fileName)
{
ifstream inputFile;
int row, column;
bool flagVar = true;
inputFile.open(fileName);
if (inputFile)
{
while(inputFile >> row >> column) //keep looping until the file runs out of input
{
if (board.checkOneBlank(row, column))
{
if(board.gameState() == X_WON)
flagVar = false;
if(board.gameState() == O_WON)
flagVar = false;
if(board.gameState() == UNFINISHED)
flagVar = true;
board.makeMove(row, column, playerTurn);
if(playerTurn == 'x')
{
playerTurn = 'o';
}
else
{
playerTurn = 'x';
}
}
}
}
if(flagVar)
return true;
else if(flagVar == false)
return false;
else if (board.gameState() == DRAW)
return true;
else
return true;
inputFile.close();
}
Board
クラスには次の機能があります。
bool makeMove(int, int char); // which calls checkOneBlank and will record a move to the board if it is blank
void print(); // which prints the board
bool checkOneBlank(int, int); // checks to see if a value is blank
bool checkState(char); // checks to see if there are any horizontal, vertical, or diagonal wins
bool checkAllBlanks(); // checks to see if there are any blanks left on the board and counts them. if there are more than 0 then it returns false (used to check for a draw)
Game game(); // checks to see if the game has an x winner, an o winner, a draw, or is unfinished. is an enumerated data type due to the specifications of the project
これらの機能はすべてテスト済みです。彼らは期待どおりに動作します。
上記の機能を正しく動作させるための助けに感謝します。これは私を夢中にさせている。ありがとう!
編集:bool値が正しく返されるようにする方法を知りたいと思います。私の質問は、これらのループを機能させる方法です。プレイヤーがまだ遊んでいても、whileループをファイルの最後まで実行する必要があります。それはプロジェクトの仕様です。
ゲームが完了していなくても、ゲームが完了していない場合は、プレーヤーを変更する必要があります(今はやっています)。前にファイルを閉じる必要があります!機能から戻る。また、単にflagVarを返すこともできます(実行結果は現在のコードと同じになります) –
@AndrewKashpur '〜ifstream'がファイルを閉じます。 'ifstream inputFile(filename)'はすべてが必要です。 – Caleth