Witam, mam mały problem.. Napisałem prostą grę kółko i krzyżyk, której kod podaje niżej. Problem dotyczy tego, że po zakończeniu gry, wyświetla komunikat "wygrał gracz_1", ale gra się nie kończy, mimo iż zastosowałem po informacji o wygranej "break" .. Opisany problem jest w scoupie "void gra(...)"
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
void wypelnij_pole(vector<vector<char>> &do_wypelnienia)
{
int number_of_rows = 3;
int number_of_cols = 3;
for (int i = 0; i < number_of_rows; i++)
{
// dla każdego wiersza tworzymy nowy wektor
vector<char> v_row;
// wypełniamy stworzony wektor wartościami
for (int j = 0; j < number_of_cols; j++)
{
v_row.push_back('-');
}
// dodajemy nowy wiersz do głównego wektora
do_wypelnienia.push_back(v_row);
}
}
void wyswietl(vector<vector<char>>pole)
{
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 3; ++j)
{
cout << pole[i][j] << " ";
}
cout << endl;
}
}
void modyfikacja_planszy(vector<vector<char>>&plansza, int row, int cols, char znak)
{
plansza[row][cols] = znak;
}
bool czy_bylo(vector<vector<char>> plansza, int row, int cols)
{
if ((plansza[row-1][cols-1] == 'x')||(plansza[row-1][cols-1]=='o'))
{
return true;
}
else
{
return false;
}
}
bool czy_dopuscic(int row, int cols, vector<vector<char>> plansza)
{
if (cols>3)
{
return false;
}
else
{
if (row > 3)
{
return false;
}
else
{
if (czy_bylo(plansza, row, cols) == true)
{
return false;
}
}
}
return true;
}
void wprowadzenie_zmian(vector<vector<char>> &plansza, char znak)
{
int row, cols;
cout << "podaj numer wiersza: "; row; cin >> row;
cout << "podaj numer kolumny: "; cols; cin >> cols;
while (czy_dopuscic(row, cols,plansza) == false)
{
cout << "podales zle wzpolzedne! \n\n";
cout << "podaj numer wiersza: "; row; cin >> row;
cout << "podaj numer kolumny: "; cols; cin >> cols;
}
modyfikacja_planszy(plansza, row - 1, cols - 1, znak);
}
bool czy_wygral(vector<vector<char>>plansza,char znak)
{
int zmienna1 = 0, zmienna2=0;
for (int i = 0; i < 3; i++)
{
if ((plansza[i][0] == znak)&&(plansza[i][1]==znak) &&( plansza[i][2]==znak))
{
return true;
}
else
{
if ((plansza[0][i] == znak)&&(plansza[1][i] == znak) &&(plansza[2][i] == znak))
{
return true;
}
else
{
if (plansza[i][i] == znak)
{
zmienna1++;
}
else
{
if (plansza[2 - i][i] == znak)
{
zmienna2++;
}
}
}
}
}
if (zmienna1 == 3 || zmienna2 == 3)
{
return true;
}
return false;
}
void gra(vector<vector<char>> &plansza)
{
wyswietl(plansza);
char znak;
string gracz = " ";
for (int i = 0; i < 9; i++)
{
if (i % 2 == 0)
{
znak = 'x';
gracz = "gracz_1";
}
else
{
znak = 'o';
gracz = "gracz_2";
}
cout << "teraz " << gracz<<" wstawia znak: "<<znak<<endl;
wprowadzenie_zmian(plansza, znak);
system("cls");
if (czy_wygral(plansza, znak) == true)
{
wyswietl(plansza);
cout << "Wygral "<<gracz;
break;
}
wyswietl(plansza);
}
//cout << "REMIS!!!";
}
void menu(vector<vector<char>> &plansza)
{
int wybor;
cout << "MENU\n1-Nowa Gra\n0-Wyjscie ";
cin >> wybor;
system("cls");
do
{
switch (wybor)
{
case 1:
{
wypelnij_pole(plansza);
gra(plansza);
}
case 0:
{
break;
}
}
} while (wybor != 0);
}
int main()
{
vector<vector<char>> plansza;
menu(plansza);
system("pause");
}