Witajcie.
Uczę się C++ od jakiegoś czasu i jednym z zadań domowych znalezionych w książce jest do napisania gra w kółko i krzyżyk dla dwóch graczy.
I zrobiłem to zadanie jednak, pewnie na około i nie działa mi zakończenie gry tzn.
petla do...while
Ponieważ po sprawdzenie wygranej i jeśli ona zachodzi to zeruję zmienne a warunek ktory konczy pertle to ta_zmienna!=0
Tutaj jest kod:
#include <iostream>
using namespace std;
char tab[3][3]={'1','2','3','4','5','6','7','8','9'}; //inicjalizacja tablicy do planszy kolko i krzyzyk
int gracz1; //ruch fla gracza 1 - X
int gracz12; //ruch dla gracz 2 - O
void Rysowanie_planszy() //funkcja to wyswietlania sytuacji na planszy
{
cout << " " << tab[0][0] <<" | " << tab[0][1] <<" | " << tab[0][2] << " "<< endl;
cout << "---|---|---" << endl;
cout << " " << tab[1][0] <<" | " << tab[1][1] <<" | " << tab[1][2] << " "<< endl;
cout << "---|---|---" << endl;
cout << " " << tab[2][0] <<" | " << tab[2][1] <<" | " << tab[2][2] << " "<< endl;
cout << "Gracz nr 1 - X" << endl;
cout << "Gracz nr 2 - O" << endl;
}
void Sprawdzanie_wygranej_1() //funkcja do sprawdzania wygranej dla gracz nr 1 - X
{
if (tab[0][0]==tab[0][1] && tab[0][0]==tab[0][2] && tab[0][1]==tab[0][2] ||
tab[1][0]==tab[1][1] && tab[1][0]==tab[1][2] && tab[1][1]==tab[1][2] ||
tab[2][0]==tab[2][1] && tab[2][0]==tab[2][2] && tab[2][1]==tab[2][2] ||
tab[0][0]==tab[1][0] && tab[0][0]==tab[2][0] && tab[1][0]==tab[2][0] ||
tab[0][1]==tab[1][1] && tab[0][1]==tab[2][1] && tab[1][1]==tab[2][1] ||
tab[0][2]==tab[1][2] && tab[0][2]==tab[2][2] && tab[1][2]==tab[2][2] ||
tab[0][0]==tab[1][1] && tab[0][0]==tab[2][2] && tab[1][1]==tab[2][2] ||
tab[2][0]==tab[1][1] && tab[2][0]==tab[0][2] && tab[1][1]==tab[0][2])
{
cout << "Wygrywa gracz nr 1 - X" << endl;
gracz1=0;
gracz12=0;
}
}
void Sprawdzanie_wygranej_2() // funkcja do sprawdzania wygranej dla gracza nr 2 - O
{
if (tab[0][0]==tab[0][1] && tab[0][0]==tab[0][2] && tab[0][1]==tab[0][2] ||
tab[1][0]==tab[1][1] && tab[1][0]==tab[1][2] && tab[1][1]==tab[1][2] ||
tab[2][0]==tab[2][1] && tab[2][0]==tab[2][2] && tab[2][1]==tab[2][2] ||
tab[0][0]==tab[1][0] && tab[0][0]==tab[2][0] && tab[1][0]==tab[2][0] ||
tab[0][1]==tab[1][1] && tab[0][1]==tab[2][1] && tab[1][1]==tab[2][1] ||
tab[0][2]==tab[1][2] && tab[0][2]==tab[2][2] && tab[1][2]==tab[2][2] ||
tab[0][0]==tab[1][1] && tab[0][0]==tab[2][2] && tab[1][1]==tab[2][2] ||
tab[2][0]==tab[1][1] && tab[2][0]==tab[0][2] && tab[1][1]==tab[0][2])
{
cout << "Wygrywa gracz nr 2 - O" << endl;
gracz1=0;
gracz12=0;
}
}
int main()
{
Rysowanie_planszy();
cout << "Kolej gracza nr 1" << endl;
do //petla ktora sluzy do wczytywania znakow do odopowiedniego miejsca tablicy
{
cin >> gracz1;
switch(gracz1)
{
case 0:
gracz1=0;
break;
case 1:
tab[0][0]= 'X';
Rysowanie_planszy();
Sprawdzanie_wygranej_1();
cout << "Kolej gracza nr 2" << endl;
break;
case 2:
tab[0][1]= 'X';
Rysowanie_planszy();
Sprawdzanie_wygranej_1();
cout << "Kolej gracza nr 2" << endl;
break;
case 3:
tab[0][2]= 'X';
Rysowanie_planszy();
Sprawdzanie_wygranej_1();
cout << "Kolej gracza nr 2" << endl;
break;
case 4:
tab[1][0]= 'X';
Rysowanie_planszy();
Sprawdzanie_wygranej_1();
cout << "Kolej gracza nr 2" << endl;
break;
case 5:
tab[1][1]= 'X';
Rysowanie_planszy();
Sprawdzanie_wygranej_1();
cout << "Kolej gracza nr 2" << endl;
break;
case 6:
tab[1][2]= 'X';
Rysowanie_planszy();
Sprawdzanie_wygranej_1();
cout << "Kolej gracza nr 2" << endl;
break;
case 7:
tab[2][0]= 'X';
Rysowanie_planszy();
Sprawdzanie_wygranej_1();
cout << "Kolej gracza nr 2" << endl;
break;
case 8:
tab[2][1]= 'X';
Rysowanie_planszy();
Sprawdzanie_wygranej_1();
cout << "Kolej gracza nr 2" << endl;
break;
case 9:
tab[2][2]= 'X';
Rysowanie_planszy();
Sprawdzanie_wygranej_1();
cout << "Kolej gracza nr 2" << endl;
break;
default :
cout << "YYY";
}
// to samo co wyzej dla gracz nr 2
cin >> gracz12;
switch(gracz12)
{
case 0:
gracz1=0;
break;
case 1:
tab[0][0]= 'O';
Rysowanie_planszy();
Sprawdzanie_wygranej_2();
cout << "Kolej gracza nr 1" << endl;
break;
case 2:
tab[0][1]= 'O';
Rysowanie_planszy();
Sprawdzanie_wygranej_2();
cout << "Kolej gracza nr 1" << endl;
break;
case 3:
tab[0][2]= 'O';
Rysowanie_planszy();
Sprawdzanie_wygranej_2();
cout << "Kolej gracza nr 1" << endl;
break;
case 4:
tab[1][0]= 'O';
Rysowanie_planszy();
Sprawdzanie_wygranej_2();
cout << "Kolej gracza nr 1" << endl;
break;
case 5:
tab[1][1]= 'O';
Rysowanie_planszy();
Sprawdzanie_wygranej_2();
cout << "Kolej gracza nr 1" << endl;
break;
case 6:
tab[1][2]= 'O';
Rysowanie_planszy();
Sprawdzanie_wygranej_2();
cout << "Kolej gracza nr 1" << endl;
break;
case 7:
tab[2][0]= 'O';
Rysowanie_planszy();
Sprawdzanie_wygranej_2();
cout << "Kolej gracza nr 1" << endl;
break;
case 8:
tab[2][1]= 'O';
Rysowanie_planszy();
Sprawdzanie_wygranej_2();
cout << "Kolej gracza nr 1" << endl;
break;
case 9:
tab[2][2]= 'O';
Rysowanie_planszy();
Sprawdzanie_wygranej_2();
cout << "Kolej gracza nr 1" << endl;
break;
default :
cout << "YYY";
}
}while (gracz1 != 0); // warunek ktory konczy gre
return 0;
}
I tak wiem, że nie ma czegoś takiego jak sprawdzenie czy miejsce, w ktorym chcemy postawic kolko lub krzyzyk nie jest zajęte. Proszę o także o uwagi dotyczące kodu, tylko konstruktywnie :D (co mnie nie zabije to mnie wzmocni)
Z góry dziękuję za pomoc :)