【问题标题】:c++ tic tac toe using classesc++ tic tac toe using classes
【发布时间】:2016-03-26 19:42:51
【问题描述】:

我正在尝试使用类创建经典的井字游戏。我通过默认构造函数建立了我的数组,当我尝试从类中的另一个公共函数显示游戏板时,我得到了像这些'&♥'这样的随机符号。 (我知道我缺少功能,但我无法弄清楚这一步!)这是我的程序输出:OUTPUT 和程序:

class TicTacToe
{
	private:
		char board[3][3];
		char player;
		
	public:
		void getBoard();
		char changePlayer(char);
		void setPosition(int, int);
		TicTacToe();
};

int main ()
{
	bool endOfGame = false;
	int rows;
	int columns;
	int test;
	TicTacToe ttt;

	while (!endOfGame)
	{
		cout << "Please enter the row number: ";
		cin >> rows;
		cout << "Please enter the column number: ";
		cin >> columns;
		
		ttt.setPosition(rows, columns);
		ttt.getBoard();
	}



	return 0;
}


TicTacToe::TicTacToe()
{
	char board[3][3] = {'*','*','*',
						'*','*','*',
						'*','*','*',};
	player = 'x';
}

void TicTacToe::getBoard()
{			     
	for (int i = 0; i < 3; i++)
	{
		for (int c = 0; c < 3; c++)
		{
			cout << board[i][c];
		}
	cout << endl;
	}
}

char TicTacToe::changePlayer(char choice)
{
}

void TicTacToe::setPosition(int row, int column)
{
	if (player == 'x')
	{ board[row][column] = 'x'; }
	
	else
	{ board[row][column] = 'o'; }

}

【问题讨论】:

  • 除非我遗漏了什么,否则您永远不会初始化数组,因此它将指向您要解释为字符的垃圾数据。
  • 在main中,当我将ttt声明为tictactoe时,不会声明一个游戏板,使默认构造函数使其成为3x3数组吗?

标签: c++ arrays


【解决方案1】:

你永远不会初始化你的类成员数组。构造函数中的数组是本地对象。一个简单的解决方案是使用类内初始化程序并摆脱构造函数:

class TicTacToe
{
    private:
        char board[3][3] {'*','*','*','*','*','*','*','*','*'};
        char player {'x'};

    public:
        void getBoard();
        char changePlayer(char);
        void setPosition(int, int);
};

编辑,当你需要构造函数时使用初始化列表(c++11 起):

TicTacToe::TicTacToe()
    : board {'*', '*', '*', '*', '*', '*', '*', '*', '*'}
{}

【讨论】:

  • 唯一的问题是我的导师想要一个构造函数。如果我没有构造函数,她会严重扣分。
  • 很遗憾我们没有使用 c++11 :/dev-c++ 5.11
  • 查一下。这是一个常见问题,很容易在网上找到。最初我指出了一个可能很难发现的错误,但现在我想解决你的作业。
  • 那不是真的.. 经过数小时的谷歌搜索并试图解决后,我才来到这里。由于我们的课程使用的是 dev-c++,因此您的编辑对我的程序来说是微不足道的。 (您的代码仅适用于 c++11)
【解决方案2】:

解决方案:

TicTacToe::TicTacToe()
{
	for (int i = 0; i < 3; i++)
	{
		for (int c = 0; c < 3; c++)
		{
			board[i][c] = '*';
		}
	cout << endl;
	}
	
	player = 'x';
}

void TicTacToe::getBoard()
{	
	cout << "\n" << board[0][0] << " | " << board[0][1] << " | " << board[0][2];
	cout << "\n" << "---------";
	cout << "\n" << board[1][0] << " | " << board[1][1] << " | " << board[1][2];
	cout << "\n" << "---------";
	cout << "\n" << board[2][0] << " | " << board[2][1] << " | " << board[2][2];
	cout << endl << endl;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多