Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Vectorit jotenkin sekaisin

mika132 [27.02.2011 13:05:53]

#

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.

Chiman [27.02.2011 13:28:29]

#

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?

mika132 [27.02.2011 13:30:44]

#

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));

Spongi [27.02.2011 15:14:26]

#

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
{
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta