Eli vectorini ovat jotenkin "seonneet" koska kun koitan muuttaa yden vectorin arvoa niin se muuttaakin kaikkia, muta ei kaikkia sitten toisesta muuttujasta.. Eikös oli yksinkertaisesti selitetty? =)
Eli aloitan nyt kertomalla koodin:
std::vector<Racer::RacersInRace>::iterator kisaa = RacerRace.begin(); while(kisaa != Game::RacerRace.end()){ std::vector<Tracks::CheckPoint>::iterator cheeck = Checkpoints.begin(); while(cheeck != Game::Checkpoints.end()){ if (cheeck->jarjestys == kisaa->ai_checkpointti) { if (kisaa->x >= cheeck->x && kisaa->x <= cheeck->x + cheeck->leveys) { if (kisaa->y >= cheeck->y && kisaa->y <= cheeck->y + cheeck->korkeus) { if (kisaa->maaili_viiva == true) { kisaa->ai_checkpointti=1; if (oma_kuski_mennyt[kisaa->Kierros] == false) { kuinka_mones[kisaa->Kierros]++; } if (kisaa->ai_checkpointti >= 5) { kisaa->ai_checkpointti=1; } cout <<"----------------------" <<endl <<endl; //kisaa->ai_checkpointti=1; kisaa->Kierros++; kisaa->maaili_viiva=false; } else { kisaa->ai_checkpointti = cheeck->jarjestys + 1; } } } if (TimeLeftSecondsRace() == 0) { if (cheeck->maali == true) { kisaa->maaili_viiva = true; } } } cheeck++; } kisaa++; }
Eli cheeck on checkpoint jota radoillani on.. tarkistan tarkkaan mielestäni, että jos auto kisaa-> ja kisaa->y jota tarkistetaan on tietyissä pisteissä tehdään tiettyjä toimintoja kuten lisätään kierros jnejne..
tällä hetkellä käy kuitenkin niin, että maaliviivalle tultaessa vain yhdelle kuskille lisätään kierros, mutta kaikille kuskeille ai_checkpoint muuttuu ykköseen jolloin järjestelmä ei laske omaa sijoitusta kuin ykkösenä olevasta eli sijoitus on aina kaksi.
Sitten jos kysytte miksi kisaa->maali_viiva on ajastimen takana niin syy on siinä, että jostain syystä en saanut sitä muulla tavalla toimimaan, vaikka se toimii oman pelaajan ajaessa ilman ajastinta, mutta AI kuskeilla ei. Mutta se ei nyt ole ongelma.
mika132 kirjoitti:
Sitten jos kysytte miksi kisaa->maali_viiva on ajastimen takana
Koodissasi ei ole tuon nimistä muuttujaa.
Mikä idea on virheellisillä kirjoitusmuodoilla, kuten cheeck ja maaili?
Anteeksi..
Pistän sitten tämän vectori luonninkin tänne:
class RacersInRace { public: float x; float y; std::string name; float Ajotaito; float Hermot; bool Jarruta; float x_jana; float y_jana; double kulma; float nopeus; float y_jana2; float x_jana2; bool HataJarruta; float y_jana3; float x_jana3; bool tormaa; bool tormaa_autoon; int autona; int osallistunut; int seuranta; float lahjakkuus; int Kierros; int ai_checkpointti; int Time; int checktime; bool maaili_viiva; public: RacersInRace(std::string name, float x, float y, float Ajotaito, float Hermot, bool Jarruta, float x_jana, float y_jana, double kulma, float nopeus, float y_jana2, float x_jana2, bool HataJarruta, float y_jana3, float x_jana3, bool tormaa, bool tormaa_autoon, int autona, int osallistunut, int seuranta, float lahjakkuus, int Kierros, int ai_checkpointti, int Time, int checktime, bool maaili_viiva){ this->name = name; this->x = x; this->y = y; this->Ajotaito = Ajotaito; this->Hermot = Hermot; this->Jarruta = Jarruta; this->x_jana = x_jana; this->y_jana = y_jana; this->kulma = kulma; this->nopeus=nopeus; this->y_jana2=y_jana2; this->x_jana2=x_jana2; this->HataJarruta=HataJarruta; this->y_jana3=y_jana3; this->x_jana3=x_jana3; this->tormaa=tormaa; this->tormaa_autoon=tormaa_autoon; this->autona=autona; this->osallistunut=osallistunut; this->seuranta=seuranta; this->lahjakkuus=lahjakkuus; this->Kierros=Kierros; this->ai_checkpointti=ai_checkpointti; this->Time=Time; this->checktime=checktime; this->maaili_viiva=maaili_viiva; } };
ja tässä ne luodaan:
Game::RacerRace.push_back(Racer::RacersInRace("Kari Leppänen", 80, 350, 140, 120, false, 0, 0, 1.60, 0, 0, 0, false, 0, 0, false, false, 2, 1, 1, 0.2, 1, 1, 0, 0, false)); Game::RacerRace.push_back(Racer::RacersInRace("Markus Holmstrom", 120, 350, 100, 60, false, 0, 0, 1.60, 0, 0, 0, false, 0, 0, false, false, 3, 1, 1, 1, 1, 1, 0, 0, false));
Oletko koskaan miettinyt saisiko koodiasi mitenkään selkeämmäksi? Koita esimerkiksi päättää käytätkö suomea vai englantia. Ja jos muuttujalle tulee vahingossa väärä nimi, niin miksi ihmeessä et korjaa sitä? Lisäksi rakenteiden käyttö voisi selkeyttää huomattavasti. En ymmärrä mihin ihmeeseen tarvitset kaikki nuo muuttujat, ja miksi ne kaikki pitää antaa parametreina.
Itse tekisin vaikka tähän tyyyliin:
struct DrivingStyle { // ajotaito, hermot, lahjakkuus jne. float skill; float nerves; }; Racer::Racer(std::string name, const Vec2 &pos, const Vec2 &line1, const vec2 &line2, const vec2 &line3, const DrivingStyle &drivingStyle, float angle) : pos_(pos), // x, y line1_(line1), line2_(line2), line3_(line3), // x_jana, y_jana, x_jana2, y_jana2, x_jana3, y_jana3 drivingStyle_(drivingStyle), // ajotyyli angle_(angle), // kulma collision_(false), // tormaa, tormaa_autoon currentCheckPoint_(0), // ai_checkpointti, Kierros speed_(0.0f), // speed brake_(false) // Jarruta { }
Aihe on jo aika vanha, joten et voi enää vastata siihen.