//executes move if it is valid. Returns false and does not update Alex_Ayerdi otherwise
//Makes computer make its move and returns the computer's move in row, and col
bool Alex_Ayerdi::play_square(int &row, int &col){
	int blackplayer = 1;
	int whiteplayer = -1;

	if (row == 0 && col == 0)
	{
		setPlayer(blackplayer);
	}
	else
	{
		if (player == blackplayer)
			play_square(row, col, whiteplayer);
		if (player == whiteplayer)
			play_square(row, col, blackplayer);
	}

	//generate your own move
	if(full_board())
	{
		row = -1;
		col = -1;
		return false;
	}
	else 
	{
		cout << toString() << "..." << endl;
		vector<int> cell;
		this->reset_tries();
		if (!has_valid_move(player))
		{
			cout << "Alex_Ayerdi must pass." << endl;
			row = -1;
			col = -1;
			return false;
		}
		else 
		{
			int alphaStart = -INFINITY;
			int betaStart = INFINITY;

			//generate move
			make_minimax_alphabeta_cpu_move(this, player, cell, alphaStart, betaStart);
			//play move
			if (!play_square(cell[0], cell[1], player))
			{
				row = -1;
				col = -1;
				return false;
			}
			
			//pass to opposing player
			row = cell[0];
			col = cell[1];
		}
			
		cout << toString();
	}

	return true;
}
示例#2
0
int main(int argc, char *argv[]){
	char board[6][7];
	int i, j;
	char player;
	for(i=0; i<6; i++){
		for(j=0; j<7; j++){
			board[i][j]=' ';
		}
	}
	print_board(board);
	while(1){
		if(i%2 == 0){
			player=player2;
		}else{
			player=player1;
		}
		full_board(board);
		play(board, player);
		print_board(board);
		win(board, player);
		i++;
	}
	return 1;
}