Witam mam taki problem i nie mam już pomysłu jak go rozwiązać.
Gra to kółko i krzyżyk i do jej zakończenia potrzebuję zrobić walidację danych tak aby użytkownik nie mógł wyjść poza zakres tablicy, wprowadzić litery, czy trafić na już zajęte miejsca. Pozostało mi do zrobienia sprawdzanie czy użytkownik nie wprowadził litery co mniej więcej już działa lecz przechodzą a nie powinny dane typu "1a", "3b" itd. Próbowałem to też robić na char lecz tam też występuje problem przy wprowadzaniu danych typu "1a" i jest to czytane jako 1 na wierszu, a litera "a" na kolumnie a nie powinno tak być ponieważ dane są wprowadzane ciągiem np. 0 0 1 0 0 1 1 1 0 2, a gdy wprowadzę np. 0 0a 1 0 0 1 1 1 0 2 to nie zgadza sie ilość danych ponieważ 0a jest traktowane jako wprowadzenie dwóch danych. Oto cały kod.
#include<iostream>
using namespace std;
bool remis(char table[3][3], int size);
bool wygrana(char table[3][3], int size, char znak);
int main()
{
char plansza[3][3] = {'\0'};
char znak = 'O';
int wiersz, kolumna;
do {
bool flag;
do{
cout<<"tutej"<<endl;
flag = false;
if(!(cin>>wiersz)) {
flag = true;
cin.clear();
cin.sync();
}
if(!(cin>>kolumna)) {
flag = true;
cin.clear();
cin.sync();
}
cout<<wiersz<<" "<<kolumna<<endl;
}while((plansza[wiersz][kolumna] != '\0') || (wiersz > 2) || (kolumna > 2) || flag);
cout<<"tutej2"<<endl;
plansza[wiersz][kolumna] = znak;
if(wygrana(plansza, 3, znak)) {
break;
}
if(znak == 'O') {
znak = 'X';
} else {
znak = 'O';
}
}while(remis(plansza, 3) == false);
if(remis(plansza, 3)){
cout<<0;
} else if(wygrana(plansza, 3, znak) && (znak == 'O')) {
cout<<1;
} else {
cout<<-1;
}
return 0;
}
bool remis(char table[3][3], int size) {
int ile = 0;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
if(table[i][j] != '\0') {
ile++;
}
}
}
if(ile == size*size) {
return true;
}
return false;
}
bool wygrana(char table[3][3], int size, char znak){
for(int i = 0; i < 3; i++) {
if((table[i][0] == znak) && (table[i][1] == znak) && (table[i][2] == znak)) {
return true;
}
}
for(int j = 0; j < 3; j++) {
if((table[0][j] == znak) && (table[1][j] == znak) && (table[2][j] == znak)) {
return true;
}
}
if((table[0][0] == znak) && (table[1][1] == znak) && (table[2][2] == znak)) {
return true;
}
if((table[0][2] == znak) && (table[1][1] == znak) && (table[2][0] == znak)) {
return true;
}
return false;
}