Witam. Piszę grę kółko i krzyżyk. Mam problem pojawiający się przy wykonywaniu funkcji odpowiedzialnej za ruch komputera. Program kończy się błędem 0xC00000005, sprawdzałem poprzez wstawianie cout'ów gdzie wywala program i wydaje mi się, że przed samym returnem. Nie wiem gdzie leży dokładnie błąd, jakieś sugestie? Poniżej kod wspomnianej funkcji oraz pliku nagłówkowego. Dodam, że reszta funkcji działa poprawnie - sprawdzane przy grze multiplayer.
funkcja:
RuchSI SI::wez_najlepszy_ruch(Plansza &plansza, int gracz)
{
int ow = plansza.sprawdz_wygrana();
if(ow == gracz_si) {
return RuchSI(10);
} else if (ow == gracz_czl) {
return RuchSI(-10);
}else if (ow == WAR_REMIS) {
return RuchSI(0);
}
vector<RuchSI> ruchy;
for(int y = 0; y<plansza.wez_wymiar(); y++ ){
for(int x = 0; x<plansza.wez_wymiar(); x++){
if (plansza.wez_wartosc(x, y) == WAR_BRAK){
RuchSI ruch;
ruch.x = x;
ruch.y = y;
plansza.ustaw_wartosc(x, y, gracz);
if (gracz == gracz_si) {
ruch.wynik = wez_najlepszy_ruch(plansza, gracz_czl).wynik;
} else {
ruch.wynik = wez_najlepszy_ruch(plansza, gracz_si).wynik;
}
ruchy.push_back(ruch);
plansza.ustaw_wartosc(x,y, WAR_BRAK);
}
}
}
int najlepszyRuch = 0;
if (gracz == gracz_si){
int najlepszyWynik1 = -1000000;
for (size_t i = 0; i<ruchy.size(); i++){
if(ruchy[i].wynik > najlepszyWynik1 ) {
najlepszyRuch = i;
najlepszyWynik1 = ruchy[i].wynik;
}
}
} else {
int najlepszyWynik2 = 1000000;
for (size_t i = 0; i<ruchy.size(); i++){
if(ruchy[i].wynik < najlepszyWynik2 ) {
najlepszyRuch = i;
najlepszyWynik2 = ruchy[i].wynik;
}
}
}
return ruchy[najlepszyRuch];
}
SI.h
struct RuchSI{
RuchSI() {};
RuchSI(int Wynik) : wynik(Wynik) {}
int x;
int y;
int wynik;
};
class SI{
public:
void inicjuj(int graczSI);
void wykonaj_ruch(Plansza &plansza);
private:
RuchSI wez_najlepszy_ruch(Plansza &plansza, int gracz);
int gracz_si;
int gracz_czl;
};