Witam, jestem tutaj nowy i próbuję napisać prostą grę, kółko i krzyżyk. Może z grubsza zasady dla jasności: Gramy na planszy 9x9 i warunkiem zwycięstwa jest postawienie 5ciu takich samych znaczków w górę, dół, lub na skosy. Nie wszystko jest jeszcze zrobione ale nie chcę iść dalej niczym nie uporam się z niniejszym problemem, otóż po stworzeniu "szkicu" gry zacząłem dodawać warunki zwycięstwa (konkretnie pierwszy). Chciałem dodać warunek który będzie nam sprawdzał czy mamy pięć takich samych symboli w jednym wierszu. Jeżeli tak, metoda GameOver() zwraca true i gra się kończy, lecz jeżeli warunek nie zostanie spełniony zwraca ona false i gramy dalej. Problem polega na tym, że warunek zwraca poprawne wartości tylko jeżeli postawimy krzyżyk lub kółko w polach 1,2,3,4,5. Jeżeli wprowadzimy np 2,3,4,5,6 metoda ciągle będzie zwracać false, dopóki nie pojawi się kompletny ciąg 1,2,3,4,5. Proszę o wyrozumiałość, gdyż jestem na początku swojej drogi z C++. Oto kod i bardzo proszę o pomoc. Pozdrawiam
#include <iostream>
#include <string>
#include <ios>
using namespace std;
#define SIZE 9
enum Figure { o, x };
class Point
{
public:
char element = '\0';
Point(char c)
{
this->element = c;
}
Point()
{
this->element = '\0';
}
};
class Place
{
public:
Point place[SIZE*SIZE+1];
Place()
{
}
void MakeStep(int i, Figure f)
{
place[i] = (f == Figure::o ? 'O' : 'X'); // zmienna1 != zmienna2 ? true : false;
}
bool GameOver()
{
// Sprawdzamy wiersze
for (int i = 1; i <= SIZE*SIZE; i=+SIZE)
{
if ((place[i].element == 'O') && (place[i + 1].element == 'O') && (place[i + 2].element =='O') && (place[i + 3].element == 'O') && (place[i + 4].element == 'O'))
{
cout << "Wygral Gracz: O";
return true;
}
else if ((place[i].element == 'X') && (place[i + 1].element == 'X') && (place[i + 2].element == 'X') && (place[i + 3].element == 'X') && (place[i + 4].element == 'X'))
{
cout << "Wygral Gracz: X";
return true;
}
else return false;
}
return false;
}
void ShowPlace()
{
system("cls");
for (int i = 1; i <= SIZE*SIZE; i++)
{
cout << " " << place[i].element << " ";
if (i % SIZE) cout << "|";
else if (i != SIZE*SIZE)
{
string poprzeczka = "+---";
cout << "\n---";
for (int i = 0; i < SIZE - 1; i++)
{
cout << poprzeczka;
}
cout << "\n";
}
else cout << endl;
}
}
void FillPlace()
{
for (int i = 0; i <= SIZE*SIZE + 1; i++)
{
place[i].element = '0';
}
}
};
void main()
{
Place *place = new Place();
place->FillPlace();
int i = 0;
place->ShowPlace();
while (!place->GameOver())
{
int a;
cin >> a;
place->MakeStep(a, i % 2 == 0 ? Figure::o : Figure::x);
place->ShowPlace();
i++;
}
cin.get();
cin.get();
};
fasadin