我不确定如何从我已经完成的工作开始:我无法让我的阵列工作,并且每次重新运行程序时我的图表重置也遇到了问题。它不会保存我的X和O,而是重新开始进入空白图表。任何提示都会有所帮助。感谢
/**
Lab 4 - Due 7/22/2010.
Convert Lab 3 to a class
1. Implement displayBoard to display Tic Tac Toe board.
2. Prompt User for a box on the board to select, i.e. a number between 1 and 9 with 1 being the upper left corner.
use cin.get(box) to get the box number and isdigit to verify it is a
number;
1 | 2 | 3
4 | 5 | 6
7 | 8 | 9
If the box is available put the appropriate X or O in there and switch players, i.e. X becomes O and vice versa.
If the box is NOT available warn the user and get another box until they select a valid open box.
3. After all spots have been select Display "Game Over!";
4. Write a main function to use the TicTacToe class and test all of the above functionality.
**/
#include <iostream>
#include <limits>
using namespace std;
class TicTacToe {
public:
void displayBoard();
void getMove();
void playGame();
private:
char board[9];
char player; // Switch after each move.
};
int main ()
{
TicTacToe ttt;
for (int i = 0; i < 9; i++) {
ttt.playGame();
}
}
void TicTacToe::playGame()
{
displayBoard();
getMove();
// Your implementation here...
}
void TicTacToe::displayBoard()
{
// Your implementation here...
bool firstMove = true;
if (firstMove == true)
{
for (int i = 0; i < 9; i++) {
board[i] = i + 1;
}
}
firstMove == false;
for (int i = 0; i < 9; i++)
{
if ( (i+1) % 3 == 0 )
{
cout << board[i] << endl;
}
else
{
cout << board[i] << " | ";
}
}
}
void TicTacToe::getMove()
{
if (player == 'X') {
player = 'O';
}
else {
player = 'X';
}
cout << player << " ";
cout << "Enter Box: ";
char c;
bool move;
move = true;
do {
cin.get(c);
cin.ignore(numeric_limits<int>::max(), '\n');
if (c > '9' || c < '0')
// error message
cout << "please enter a number 1-9" << endl;
int number = c - '0';
cout << "your number is " << number << endl;
// Your implementation here...
if (c == '1' && board[0] == '1') {
board[0] = player;
move = false;
}
else if(c == '2' && board[1] == '2')
{
board[1] = player;
move = false;
}
else if(c == '3' && board[2] == '3')
{
board[2] = player;
move = false;
}
else if(c == '4' && board[3] == '4')
{
board[3] = player;
move = false;
}
else if(c == '5' && board[4] == '5')
{
board[4] = player;
move = false;
}
else if(c == '6' && board[5] == '6')
{
board[5] = player;
move = false;
}
else if(c == '7' && board[6] == '7')
{
board[6] = player;
move = false;
}
else if(c == '8' && board[7] == '8')
{
board[7] = player;
move = false;
}
else if(c == '9' && board[8] == '9')
{
board[8] = player;
move = false;
}
} while (!move);
}
@Bunnit从你的建议我能够改变它。现在我唯一的问题是用X或O替换每个盒子它看起来不像我的if和else如果正在工作。
答案 0 :(得分:2)
您是否使用DisplayBoard功能显示您的主板?
bool firstMove = true;
if (firstMove == true)
{
for (int i = 0; i < 9; i++) {
board[i] = i + 1;
}
}
我不确定你到底想要实现什么,但是第一次移动将永远是真的,所以每次调用时你的电路板都会被重置。还有以下内容:
firstMove == false;
这一行没有效果,将firstMove设置为false使用firstMove = false;
虽然每次调用函数时firstMove设置为true仍然会调用上面的if语句,如果你只想设置firstMove在第一次调用DisplayBoard时,您可以使用静态变量:
static firstMove == true;
。
它看起来像你有混乱的字符与ints,在DisplayBoard中你设置每个板块等于它的相应数字(上面的for语句),但是当你在getMove函数中检查这个时你使用等价的字符:if (c == '1' && board[0] == '1')
。 1!= '1'。既然是作业,我会留给你查找ascii图表来找出它的相同之处。
答案 1 :(得分:0)
当程序结束时,操作系统将回收其所有内存,以便其他程序可以使用它。当程序结束时,变量和数组中的所有值都将丢失。
如果要在下次运行程序之前保持某种持久状态,则需要将变量/数组保存到某些存储介质(如文件或数据库)。稍后启动程序时,将从存储介质中加载这些变量/数组。
如果他们没有教您如何读/写文件,那么我怀疑他们希望您的游戏板在每次程序启动时都恢复到之前的状态。
答案 2 :(得分:0)
不是用数字填充电路板,而是用X和O,s覆盖,你应该以整数格式输入。这可能有助于覆盖问题。另外,我不知道你是否已经覆盖了2D阵列,但如果你使用它们,它将有助于你的编程和逻辑思维过程。