Eli annan tekoälyni arvot vectoreille ja käytän niitä kisassa. Kuitenkin tämän hetken koodi jää jumiin. Jumittaa pelin.. mitään ei tapahdu.
Debuggasin koodin tulostamalla konsoliin ja semenee kyllä oikein läpi mutta silti peli jää jumiin.
std::vector<Racer::RacersInRace>::iterator kisaa = RacerRace.begin(); while(kisaa != Game::RacerRace.end()){ kisaa->x_jana = (kisaa->x + std::cos(kisaa->kulma) * kisaa->Ajotaito); kisaa->y_jana = (kisaa->y - std::sin(kisaa->kulma) * kisaa->Ajotaito); kisaa->x_jana2 = (kisaa->x + std::cos(kisaa->kulma) * kisaa->Hermot); kisaa->y_jana2 = (kisaa->y - std::sin(kisaa->kulma) * kisaa->Hermot); std::vector<Tracks::TracksBlock>::iterator seinaa = Seinat.begin(); cout <<"kisaa" << endl; while(seinaa != Game::Seinat.end()){ if (kisaa->x_jana >= seinaa->seinan_x && kisaa->x_jana <= seinaa->seinan_x + seinaa->seinan_leveys) { if (kisaa->y_jana >= seinaa->seinan_y && kisaa->y_jana <= seinaa->seinan_y + seinaa->seinan_korkeus) { kisaa->Jarruta=true; } } if (kisaa->x_jana >= seinaa->seinan_x+seinaa->poisx && kisaa->x_jana <= seinaa->seinan_x + seinaa->seinan_leveys+50) { if (kisaa->y_jana >= seinaa->seinan_y+seinaa->poisy && kisaa->y_jana <= seinaa->seinan_y + seinaa->seinan_korkeus+50) { kisaa->Jarruta=false; } } cout <<"seinaa" << endl; seinaa++; } std::vector<Tracks::AIpoint>::iterator aii= aipoint.begin(); while(aii != Game::aipoint.end()){ if (kisaa->x_jana2 >= aii->seinan_x && kisaa->x_jana2 <= aii->seinan_x + aii->seinan_leveys) { if (kisaa->y_jana2 >= aii->seinan_y && kisaa->y_jana2 <= aii->seinan_y + aii->seinan_korkeus) { if (aii->OikeeVasen == 1) { kisaa->kulma = Racer::KaannaAutoaVasemmalle(kisaa->kulma); } if (aii->OikeeVasen == 2) { kisaa->kulma = Racer::KaannaAutoaOikealle(kisaa->kulma); } } } cout <<"aii "<< endl; aii++; } if (TimeLeftSpeed() == 0) { if (kisaa->Jarruta == true) { if (kisaa->nopeus >= 0.3) { kisaa->nopeus-=0.8; } if (kisaa->nopeus <= 0.2999999) { kisaa->nopeus=0.3; } } else { if (kisaa->nopeus >= 3) { kisaa->nopeus=3; } else { kisaa->nopeus+=0.5; } } } cout <<"ajo" << endl; kisaa->x+=std::cos(kisaa->kulma) * kisaa->nopeus; kisaa->y-=std::sin(kisaa->kulma) * kisaa->nopeus; kisaa++; }
olisiko mitään vinkkejä?
Mitään jumittumiseen liittyvää ei näy juuri tuossa. Oletko jotenkin selvittänyt, mihin ohjelma oikeasti jumittuu? Jos et ole, selvitä se heti äläkä arvuuttele muilta. Jos ohjelma ei jumitu tuohon, se varmaankin jumittuu johonkin muualle, joten kannattaa tutkia muutkin osat ohjelmasta.
Lisäksi voisit kirjoittaa ohjelman paljon selvemmin käyttämällä järkevästi funktioita.
Kirjoita tekoälyn toiminta funktioon.
// Tee funktio YHDEN AUTON tekoälyä varten. void tekoaly(Auto& a) { // Täällä siis lasketaan, mitä TÄMÄ YKSI AUTO tekee. }
Kutsu sitten kyseistä funktiota jokaiselle autolle.
// Tässä käydään läpi kaikki tietokoneen ohjaamat autot. for (std::vector<Auto>::iterator i = autot.begin(); i != autot.end(); ++i) { // Tässä kutsutaan sitä funktiota YHDELLE AUTOLLE. tekoaly(*i); }
C++:n standardikirjaston avulla tuo funktion kutsuminen onnistuu vielä helpommin:
#include <algorithm> // Tässä kutsutaan funktiota jokaiselle autolle. std::for_each(autot.begin(), autot.end(), tekoaly);
mika132 kirjoitti:
Eli annan tekoälyni arvot vectoreille ja käytän niitä kisassa. Kuitenkin tämän hetken koodi jää jumiin. Jumittaa pelin.. mitään ei tapahdu.
Debuggasin koodin tulostamalla konsoliin ja semenee kyllä oikein läpi mutta silti peli jää jumiin.
olisiko mitään vinkkejä?
Debuggaa oikeassa debuggerissa ja steppaat koodia niin huomaat missä se jää jumiin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.