Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: class player

vehkis91 [28.04.2008 18:47:39]

#

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

Puhveli [28.04.2008 20:37:06]

#

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ä. :|

Gaxx [28.04.2008 23:22:35]

#

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!

vehkis91 [29.04.2008 18:08:34]

#

kiitos tuosta on paljon hyötyä, olen parannellut jo paljon minun player luokkaa.

Vastaus

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

Tietoa sivustosta