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.