Exemple #1
0
int MovePlayer(BNTPlayer player, BNTField field, BNTBoard board)
{
	if (player == BNTPlayerNone)
	{
		printf("Could not make the move: error -1");
		return -1;
	}
	
	if (IsBoardFull(board))
	{
		printf("Could not make the move: error -2");
		return -2;
	}
	
	if (NextPlayer(board) != player)
	{
		printf("Could not make the move: error -3");
		return -3;
	}
	
	if (board[field.x][field.y] == BNTPlayerO || board[field.x][field.y] == BNTPlayerX)
	{
		printf("Could not make the move: error -4");
		return -4;
	}
	
	if (IsGameEnd(board))
	{
		printf("Could not make the move: error -5");
		return -5;
	}
	
	board[field.x][field.y] = player;
	return 1;
}
Exemple #2
0
int IsGameEnd(BNTBoard board)
{
	if (IsBoardFull(board))
	{
		return 1;
	}
	
	return WinningPlayer(board) != BNTPlayerNone;
}
Exemple #3
0
BNTPlayer NextPlayer(BNTBoard board)
{
	int countX = 0;
	int countO = 0;
	
	for (int i = 0; i < BOARD_SIZE; ++i)
	{
		for (int j = 0; j < BOARD_SIZE; ++j)
		{
			if (board[i][j] == BNTPlayerX)
			{
				++countX;
			}
			if (board[i][j] == BNTPlayerO)
			{
				++countO;
			}
		}
	}
	
	if (IsBoardFull(board))
	{
		return BNTPlayerNone;
	}
	
	if (IsGameEnd(board))
	{
		return BNTPlayerNone;
	}
	
	if (countX > countO)
	{
		return BNTPlayerO;
	}
	return BNTPlayerX;
}
Controller::Controller(Settings* settings)
{
	this->settings = settings;
	board = new Board(settings->columns, settings->rows);
	boardPanel = new BoardPanel();
	switch (settings->gameType)
	{
	case 1:
		playerA = new Human(settings->playerA, 'O');
		playerB = new Human(settings->playerB, 'X');
		break;
	case 2:
		playerA = new Human(settings->playerA, 'O');
		playerB = new Ai(settings->playerB, 'X', board);
		break;
	case 3:
		playerA = new Ai(settings->playerA, 'O', board);
		playerB = new Ai(settings->playerB, 'X', board);
		break;
	case 4:
		playerA = new Human(settings->playerA, 'O');
		playerB = new Remote(settings->playerB, 'X', true);
		break;
	case 5:
		playerA = new Ai(settings->playerA, 'O', board);
		playerB = new Remote(settings->playerB, 'X', true);
		break;
	default:
		break;
	}
	Player* currentPlayer = playerA;
	if (settings->startingPlayer == 1)
		currentPlayer = playerB;

	int xMove = 0, yMove = 0;
	bool draw = false;
	while (!CalculateWin(xMove, yMove))
	{
		if (currentPlayer == playerA)
			currentPlayer = playerB;
		else
			currentPlayer = playerA;

		do {
			system("cls");
			boardPanel->DrawField((*board));
			xMove = currentPlayer->GetMove();

		} while (!IsValideMove(xMove));

		yMove = board->SetSquare(xMove, currentPlayer->symbol);

		boardPanel->DrawLastMove(xMove, yMove);
		
		try{
			IsBoardFull();
		}
		catch (BoardFullException exception){
			std::cout << exception.errorMsg << std::endl;
			draw = true;
			break;
		}
	}
	if (!draw)
	{
		system("cls");
		boardPanel->DrawField((*board));
		PrintText("Player " + currentPlayer->name + " Wins!");
	}
	system("pause");
}