Hej, no więc postanowiłem zmodyfikować moje TicTacToe, żeby nie było już tylko dla dwóch graczy, ale żeby była też opcja pogrania z komputerem. Założenie było takie, że komputer ma losowo wybierać (nie używałem tu schematów blokowych) pola, ale priorytetem dla niego ma być blokada/dokończenie linii. Problem w tym, że czasem się gubi i użytkownik może wpisać swój znak np. 2 razy pod rząd. Oto kod funkcji:
void vsComputer()
{
char mark;
int player;
do
{
DrawBoard();
player=(player%2)?1:2; //THIS LOOP SWITCH PLAYERS
if(player==1)
{
char mark='X';
int choice;
cout<<"Your turn. Enter the number: ";
do {
fnClear();
cin>>choice;
if(choice>9 || cin.fail() || choice<1 || c_Square[choice] == 'O' || c_Square[choice] == 'X') cout<<"Error. Try again: ";
} while(choice>9 || cin.fail() || choice<1 || c_Square[choice] == 'O' || c_Square[choice] == 'X');
if (choice == 1 && c_Square[1] == '1') c_Square[1] = mark;
else if (choice == 2 && c_Square[2] == '2') c_Square[2] = mark;
else if (choice == 3 && c_Square[3] == '3') c_Square[3] = mark;
else if (choice == 4 && c_Square[4] == '4') c_Square[4] = mark;
else if (choice == 5 && c_Square[5] == '5') c_Square[5] = mark;
else if (choice == 6 && c_Square[6] == '6') c_Square[6] = mark;
else if (choice == 7 && c_Square[7] == '7') c_Square[7] = mark;
else if (choice == 8 && c_Square[8] == '8') c_Square[8] = mark;
else if (choice == 9 && c_Square[9] == '9') c_Square[9] = mark;
}
if(player==2)
{
char mark='O';
int choice;
do {
choice=Random();
} while(choice>9 || cin.fail() || choice<1 || c_Square[choice] == 'O' || c_Square[choice] == 'X');
//BLOCK PLAYER'S STREAK
if((c_Square[1]=='X' && c_Square[2]=='X') || (c_Square[7]=='X' && c_Square[5]=='X') || (c_Square[6]=='X' && c_Square[9]=='X') && c_Square[3]==3) c_Square[3]=mark;
else if((c_Square[3]=='X' && c_Square[2]=='X') || (c_Square[7]=='X' && c_Square[4]=='X') || (c_Square[5]=='X' && c_Square[9]=='X') && c_Square[1]==1) c_Square[1]=mark;
else if((c_Square[1]=='X' && c_Square[3]=='X') || (c_Square[8]=='X' && c_Square[5]=='X') && c_Square[2]==2) c_Square[2]=mark;
else if((c_Square[3]=='X' && c_Square[9]=='X') || (c_Square[4]=='X' && c_Square[5]=='X') && c_Square[6]==6) c_Square[6]=mark;
else if((c_Square[8]=='X' && c_Square[2]=='X') || (c_Square[1]=='X' && c_Square[9]=='X') || (c_Square[3]=='X' && c_Square[7]=='X') || (c_Square[4]=='X' && c_Square[6]=='X') && c_Square[5]==5) c_Square[5]=mark;
else if((c_Square[1]=='X' && c_Square[7]=='X') || (c_Square[5]=='X' && c_Square[6]=='X') && c_Square[4]==4) c_Square[4]=mark;
else if((c_Square[1]=='X' && c_Square[4]=='X') || (c_Square[5]=='X' && c_Square[3]=='X') || (c_Square[8]=='X' && c_Square[9]=='X') && c_Square[7]==7) c_Square[7]=mark;
else if((c_Square[5]=='X' && c_Square[2]=='X') || (c_Square[7]=='X' && c_Square[9]=='X') && c_Square[8]==8) c_Square[8]=mark;
else if((c_Square[7]=='X' && c_Square[8]=='X') || (c_Square[1]=='X' && c_Square[5]=='X') || (c_Square[3]=='X' && c_Square[6]=='X') && c_Square[9]==9) c_Square[9]=mark;
//COMPLETE COMPUTER'S STREAK
else if((c_Square[1]=='O' && c_Square[2]=='O') || (c_Square[7]=='O' && c_Square[5]=='O') || (c_Square[6]=='O' && c_Square[9]=='O') && c_Square[3]==3) c_Square[3]=mark;
else if((c_Square[3]=='O' && c_Square[2]=='O') || (c_Square[7]=='O' && c_Square[4]=='O') || (c_Square[5]=='O' && c_Square[9]=='O') && c_Square[1]==1) c_Square[1]=mark;
else if((c_Square[1]=='O' && c_Square[3]=='O') || (c_Square[8]=='O' && c_Square[5]=='O') && c_Square[2]==2) c_Square[2]=mark;
else if((c_Square[3]=='O' && c_Square[9]=='O') || (c_Square[4]=='O' && c_Square[5]=='O') && c_Square[6]==6) c_Square[6]=mark;
else if((c_Square[8]=='O' && c_Square[2]=='O') || (c_Square[1]=='O' && c_Square[9]=='O') || (c_Square[3]=='O' && c_Square[7]=='O') || (c_Square[4]=='O' && c_Square[6]=='O') && c_Square[5]==5) c_Square[5]=mark;
else if((c_Square[1]=='O' && c_Square[7]=='O') || (c_Square[5]=='O' && c_Square[6]=='O') && c_Square[4]==4) c_Square[4]=mark;
else if((c_Square[1]=='O' && c_Square[4]=='O') || (c_Square[5]=='O' && c_Square[3]=='O') || (c_Square[8]=='O' && c_Square[9]=='O') && c_Square[7]==7) c_Square[7]=mark;
else if((c_Square[5]=='O' && c_Square[2]=='O') || (c_Square[7]=='O' && c_Square[9]=='O') && c_Square[8]==8) c_Square[8]=mark;
else if((c_Square[7]=='O' && c_Square[8]=='O') || (c_Square[1]=='O' && c_Square[5]=='O') || (c_Square[3]=='O' && c_Square[6]=='O') && c_Square[9]==9) c_Square[9]=mark;
else if (choice == 1 && c_Square[1] == '1') c_Square[1] = mark;
else if (choice == 2 && c_Square[2] == '2') c_Square[2] = mark;
else if (choice == 3 && c_Square[3] == '3') c_Square[3] = mark;
else if (choice == 4 && c_Square[4] == '4') c_Square[4] = mark;
else if (choice == 5 && c_Square[5] == '5') c_Square[5] = mark;
else if (choice == 6 && c_Square[6] == '6') c_Square[6] = mark;
else if (choice == 7 && c_Square[7] == '7') c_Square[7] = mark;
else if (choice == 8 && c_Square[8] == '8') c_Square[8] = mark;
else if (choice == 9 && c_Square[9] == '9') c_Square[9] = mark;
}
player++;
} while(CheckWin()==-1);
DrawBoard();
Winner(player);
}
Edit: Wrzucam zdjęcie.