Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Pelin luokkasuunnittelua

Createman [11.12.2004 21:15:52]

#

Olen tässä tekemässä ensimmäistä isompaa projektiani C++:lla ja tähän asti olen koodaillut C:llä. Eli peliä teen C++-kielellä ja rajapintana on OpenGL. Peli on yläältä kuvattu räiskintä.

Tähän mennessä olen toteuttanut Blokki-luokan, josta luodaan mapissa käytetyt 3d-objektit (aluksi kuutiot). Ukko-luokkien ja Mappi-luokan luonti on vielä hieman vaiheessa.

Pahimmaksi ongelmaksi muodostuu nyt: missä luokassa kutsun blokkien ja ukkojen Piirra() metodeita? Myös ukkojen liikutus on hieman epäselvää. Mikä olisi paras tapa liikuttaa ukkoja? Mahdollisesti antaa ukolle Liiku() käsky, joka saa parametreikseen koordinaatit joihin liikutaan? Vai kenties kutsua ukon Liiku() metodia ilman parametrejä; ukko voisi itse testata onko tiettyjä näppäimiä painettu, ja liikkua sen mukaan.

Metabolix [11.12.2004 22:53:04]

#

Oletettavasti tästä tulee reaaliaikainen peli, joten:
Aloita tekemällä pieni ikuisesti toistettava silmukka, jossa

  1. Käsittelet viestit ja luet näppäimistön
  2. Liikutat kaikkea
  3. Piirrät kaiken
  4. Otat aikaa, kauanko kierrokseen kului. Tämä aika annetaan seuraavalla kerralla 2. kohdan parametriksi, jotta liikemäärä saadaan suhteutettua aikaan.

Yhteensä siis vain muutama funktiokutsu. Lisäksi tässä vaiheessa voi jo huomioida madollisesti Pausen, Menun ja muut tällaiset.

Jokaisen objektin erillinen Piirra-metodi ei tule onnistumaan helpolla.

Oma ratkaisuni on sellainen, että pelin pohjana toimii kaksi luokkaa: TMaailma ja TOpenGL (tai TDirectX, jos se on valittuna).

TMaailma sisältää tason 2D-taulukkona tileistä (struct TMaailmaPala), linkitetyn listan objekteista (start positoinit yms, class TObjekti) ja taulukon pelaajista (class TPelaaja). Metodeihin kuuluvat mm. Aika, joka suoritetaan joka kerta (ks. yllä). Tämän sisältä kutsutaan jokaisen pelaajan ja objektin vastaavaa metodia. Jokainen TPelaaja sisältää listan näppäimistä (Oikea, Vasen, Ampu, Vaihto jne.), ja tämä lista päivitetään vastaamaan painettuja näppäimiä asetuksista valittujen näppäinten mukaan. TPelaajan Aika-metodi selvittää, miten pelaajan liikettä pitää muuttaa (eteen/taakse, käännökset), ja sen jälkeen TPelaajaa liikutetaan oikea määrä oikeaan suuntaan (muista huomioida aika) ja tarkistetaan, ettei se törmää mihinkään.

TOpenGL sisältää ikkunan luomisen ja käsittelyn, näppäimistön lukemisen 256-alkioiseen taulukkoon ja piirtämisen. Piirtämisessä piirretään ensin tilet pelaajan ympäriltä ikkunan kokoiselle alueelle, sen jälkeen erikoisobjektit ja pelaajat ja lopuksi kaikki ammukset.

Vastaus

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

Tietoa sivustosta