Minulla on omat luokat vihollisille (class enemy) ja pelaajalle, (class player)
Mutta ne on toteutettu typerästi, joten jos pistän tänne pelaaja luokan, niin voitteko kertoa sille parannuksia?
Jos tässä on jotain turhaa ilmoittakaa to
ki sekin. :D
typedef class player { public: int Energy; //Energia int Lifes; //Elämät int state; //elossa vai kuollut int x,y; //Ukon sijainti void PlayerMove(); void AddPlayerPosition(int tx, int ty); int GetPlayerPosition(); void SeiniinTormays(); }; void player::SeiniinTormays() { if (x>799) { x=1; } else if (x<0) { x=799; } else if (y>599) { y=1; } else if (y<0) { y=599; } } void player::PlayerMove() { Uint8* nappi; nappi=SDL_GetKeyState(NULL); if (nappi[SDLK_UP]) //Ylös { y-=2; } if (nappi[SDLK_DOWN]) //alas { y+=2; } if (nappi[SDLK_RIGHT]) //oikealle { x+=2; } if (nappi[SDLK_LEFT]) //vasemmalle { x-=2; } } void player::AddPlayerPosition(int tx, int ty) { x=tx; y=ty; } int player::GetPlayerPosition() { return x,y; }
Hirveää sekakielistä sotkua. Lisäksi liian pitkä ja rumasti sisennetty. Tuskaa lukea kun on puolet kopioitu valmiista oppaista.
Jospa keskittyisit ajattelemaan itse. Jos menee kääntäjästä läpi niin ei siinä mitään parannettavaa ole. Ei käyttäjä siitä exestä näe onko koodi hyvin tai huonosti sisennetty tai onko luokka järkevästi toteutettu.
Joten kunhan itse pystyt elämään koodisi kans
sa, se on hyvä. :|
Kaikki riippuu tietenkin tottumuksista ja siitä, miten olet muun ohjelman suunnitellut toteuttavasi. Jos minun pitäisi tehdä samalla idealla toimiva luokka, toteuttaisin sen näin:
const int MAP_WIDTH = 800; const int MAP_HEIGHT = 600; class Player { public: int energy; // energia int lifes; // elämät bool state; // elossa vai kuollut // Rakentaja on tarpeen Player(const int& energy, const int& lifes, const int& x, const int& y, const int& speed); void move(); void setPosition(const int& tx, const int& ty); void getPosition(int& x, int& y) const; private: int x, y; // sijainti int speed; // nopeus Uint8* keyboard; // "näppäimistön" osoite }; Player::Player(const int& energy, const int& lifes, const int& x, const int& y, const int& speed) { // Alustetaan pelaaja annetuilla alkuarvoilla Player::energy = energy; Player::lifes = lifes; Player::state = true; Player::x = x; Player::y = y; Player::speed = speed; // Haetaan "näppäimistön" osoite. keyboard = SDL_GetKeyState(NULL); } void Player::move() { // Liikutetaan pelaajaa, jos mahdollista if(Player::keyboard[SDLK_LEFT] && Player::x - Player::speed >= 0) { Player::x -= speed; } if(Player::keyboard[SDLK_RIGHT] && Player::x + Player::speed < MAP_WIDTH) { Player::x += speed; } if(Player::keyboard[SDLK_UP] && Player::y - Player::speed >= 0) { Player::y -= speed; } if(Player::keyboard[SDLK_DOWN] && Player::y + Player::speed < MAP_HEIGHT) { Player::y += speed; } } void Player::setPosition(const int& x, const int& y) { Player::x = x; Player::y = y; } void Player::getPosition(int& x, int& y) const { // Palautetaan pelaajan sijainti viittauksiin x = Player::x; y = Player::y; }
On vähän mielipide kysymys, laittaako sellaiset muuttujat, joiden tietoa tarvitaan luokan ulkopuolella publikeiksi vai privaateiksi. Nyrkkisääntönä voit pitää sitä, että jos muuttujan tiedon käsittely luokan ulkopuolelta vaatii jotain "algoritmia", se määritellään privaatiksi ja tehdään sen käsittelylle omat metodit.
Suosittelen toteuttamaan törmäystarkistuksen luokan ulkopuolella!
kiitos tuosta on paljon hyötyä, olen parannellut jo paljon minun player luokkaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.