Juu eli tuli vaan mieleen joitain pienempiä kyssäreitä..
Eli jos teet pelin ja ensinmäiseksi peliin tulee tietenkin valikko...Eli tulisiko tänä valikko tehä mainiin vai minne?
Sitten kun aloitetaan peli käytetäänkö siinä mahdollisesti goto käskyä? Tyyliin "goto peli" tämän jälkeen suoritetaan pelin koodi. Sitten jos pelistä mennään valikkoon takaisin tuleko siihen sitten goto valikko? Eli tarkoituksena olisi saada tietoon miten tämä kannataisis tehä mahdollisimman nopeasti, eli tarkoitan nopeasit sitä ettei pelin suoritustaso laskisi.
Jos kysymys on asetettu täydellä vakavuudella, juokse ihmeessä lähimpään kauppaan ostamaan mikä tahansa ohjelmointia käsittelevä kirja, tai voihan kirjastostakin löytää. Netistä löytää myös oivia tutoriaaleja. Tässä tapauksessa lopeta tämän viestin lukeminen tähän: .
Arvoisa herra Trolli! Voit tehdä menun suoraan mainiin, joskaan en suosittele sitä. Vaihtoehtoisesti voit tehdä sille oman .bas-tiedoston, jota sitten kutsut komennolla system("qbasic /run menu.bas") : system("cls")
Korostan tässä vaiheessa:
1. Teen peliä C++/SDL:Llä
2. Itse teen tämän goto:lla
3. Kertokaan parempia ideoita
4. Mitä minä olen ymmärtänyt .bas formaatti kuuluu QBasic:lle. Olenko oikeassa?
Goto on yleisesti ottaen huono ja epäselvä tapa koodata.
Valikon ja pelin välillä pomppimisen eri keinoja voi tutkailla vaikkapa lukemalla avoimen lähdekoodin pelien lähdekoodeja.
Suosittelen noudattamaan MakeGhon ensimmäisessä kappaleessaan antamaa neuvoa.
Itse lähtisin tekemään jonkin sortin tilakonetta. Tarkoittaen sitä, että ohjelmassa on tila-muuttuja ja main:ssa on kontrolleri, joka lukee ja käsittelee tätä muuttujaa ja toimii sen arvon mukaan. Jos "tila"-muuttujan arvo on esimerkiksi 2, kontrolleri voisi ohjata ohjelman valikkoon. Kun valikoista painetaan aloitusnappia, "tila" saa vaikka arvon 3. Tämä kertoo kontrollerille, että suoritetaan itse peliä. Jos ohjelma halutaan lopettaa, "tila" saa arvoksi vaikka -1, joka kertoo kontrollerille, että ohjelma halutaan lopettaa. Niinpä kontrolleri hoitaa tilanteen ja lopettaa ohjelman.
Eiköhän sen rakenteen pitäisi olla jotakuinkin muotoa void menu() { ... }, josta kutsutaan pelaa()-funktiota, kun halutaan pelata.
MakeGho kirjoitti:
Eiköhän sen rakenteen pitäisi olla jotakuinkin muotoa void menu() { ... }, josta kutsutaan pelaa()-funktiota, kun halutaan pelata.
Mielestäni tuo ei ole kuitenkaan aina järkevä tapa, vaikka monesti helpottaakin testausta ja on helppo omaksua. Mutta eiköhän se ole pääasia, että saa edes jotenkin toimimaan.. :)
Nail Eye kirjoitti:
Eli jos teet pelin ja ensinmäiseksi peliin tulee tietenkin valikko...Eli tulisiko tänä valikko tehä mainiin vai minne?
Nail Eye kirjoitti:
Sitten kun aloitetaan peli käytetäänkö siinä mahdollisesti goto käskyä? Tyyliin "goto peli" tämän jälkeen suoritetaan pelin koodi. Sitten jos pelistä mennään valikkoon takaisin tuleko siihen sitten goto valikko?
Ei käytetä. Ei taida olla tilanteita joissa goto:n käyttöä ei voisi kiertää muilla rakenteilla. Proseduraalisessa ohjelmoinnissa kutsutaan aliohjelmia ja niistä palataan. Eli "goto peli ja goto valikko" menisi niin, että valikosta kutsutaan pelialiohjelmaa ja kun sen suoritus loppuu, palataankin takaisin valikkoon (ks. vaihtoehto 1).
Tuli mieleen parikin tapaa toteuttaa asia. Esittelevät hyvinkin karkeasti toteutusideat.
Vaihtoehto 1:
// Esittelee yksinkertaisen valikon rungon. käynnistäValikko() { while (!poistu) { piirräValikko(); käsitteleSyötteet(); if (peli_käynnistetty) käynnistäPeli(); } } main() { . . . suoritaTarvittavatAlustukset(); // Suoritus jää käynnistäValikko-aliohjelmaan // kunnes sieltä on poistuttu. On koko ohjelman // aloitustila. käynnistäValikko(); vapautaMuistiJne(); . . . }
Vaihtoehto 2:
// Yksinkertainen pelirunko. Valitsee tilan // valikon ja pelin välillä. peli() { tila=valikko; while (peli_käynnissä) { if (tila==valikko) { // tähän valikon koodi } else { // tila==peli // tähän pelin koodi } } } main() { . . . alusta(); peli(); vapauta(); . . . }
Mä kyllä lähtisin ensiksi tekemään itse peliä, enkä valikkoja.
C++ kun kyseessä, niin itse ainakin lähtisin tuota toteuttamaan olio-ohjelmoinnin periaatteilla. Menu luokka tms. kehiin, jonka metodeja kutsutaan main:sta. Tuo tilakoneen tekeminen ei myöskään ole mielestäni lainkaan huono idea.
Aihe on jo aika vanha, joten et voi enää vastata siihen.