#include <allegro.h> #include <stdio.h> int valikko(int kohta) { BITMAP *valikko_tausta; PALETTE paletti; valikko_tausta=load_bitmap("valikko.bmp" , paletti); set_palette(paletti); blit(valikko_tausta,screen,0,0,0,0,valikko_tausta->w,valikko_tausta->h); RGB sininen = { 80, 93, 103 }; set_color(256,&sininen); text_mode(-1); textout(screen, font, "This is demo version of HohdeCarRacer.", 10, 10, 10); textout(screen, font, "The full version of the game will come soon.", 10, 22, 10); textout(screen, font, "Press number P to play.", 10, 34, 10); textout(screen, font, "Press number P and ESC to quit", 10, 46, 10); while(! key[KEY_P]) kohta = 2; return kohta; } int alku(int kohta) { BITMAP *valikko_tausta; PALETTE paletti; valikko_tausta=load_bitmap("valikko.bmp" , paletti); set_palette(paletti); blit(valikko_tausta,screen,0,0,0,0,valikko_tausta->w,valikko_tausta->h); RGB sininen = { 80, 93, 103 }; set_color(256,&sininen); text_mode(-1); textout(screen, font, "Try to drive at the road!", 10, 10, 10); textout(screen, font, "To turn left press \17", 10, 22, 10); textout(screen, font, "Press number P and ESC to quit", 10, 46, 10); while(! key[KEY_P]) kohta = 3; return kohta; } int peli(int c) { } int loppu(int d) { } int main() { // Alustetaan Allegro, asetetaan grafiikkatila ja näppäimet allegro_init(); set_gfx_mode(GFX_SAFE, 800, 600, 0, 0); install_keyboard(); // Valitaan kohta int kohta; kohta = 1; valinta: switch ( kohta ){ case 1: valikko(kohta); break; case 2: alku(kohta); break; case 3: peli(kohta); break; case 4: loppu(kohta); default: break; } goto valinta; // Odotetaan ESC-napin painallusta ja suljetaan ohjelma while(! key[KEY_ESC]) poll_keyboard(); allegro_exit(); return 0; } END_OF_MAIN();
Elikkä, ongelma on, etten pääse tuohon case 2 kohtaan. Mitenkä tuo pitäisi tehdä? Haluan siis case 1 jälkeen suoritettavan valikko()-funktion jälkeen tuohon case 2:teen. Toivottavasti joku ymmärsi :p
aika selvä ongelma, 'kohta' ei ole globaali muuttuja, etkä ole määritellyt että arvo palautettaisiin siihen.
switch(kohta) { case 1: kohta = valikko(); // valikko() ei tee mitään tuolla muuttujalla // lisäksi asetetaan paluuarvo 'kohta' muuttujaan, muuten sen arvo pysyy kokoajan ykkösenä break; case 2: kohta = alku() // sama juttu tälle break; // jne ... }
lisäksi ellen ihan väärin lukenut koodia niin voit laittaa noihin funktioihin ( valikko() ja alku() ) tohon 'return kohta;' tilalle return 2; ja return 3; ja se ei tarvitse tuota kohtaa argumenttina, elikkä:
int valikko() // sitä int kohta ei siis tarvita :) { // .... // kohta = 2; // tuo on turha return 2; }
ja kooditagit ja sisennykset on kivoja ;)
"Press number P to play.", <- Mikä vitun NUMBER P? Ehkä kirjain P ois parempi tai jotai..
Mjooh.. tässä on taas sitä ilmiötä ettei oikein olla perillä siitä mitä ollaan tekemässä. Suosittelisin perusrakenteiden hallitsemista ennen pelin tekoon ryhtymistä.
No mä joskus pari vuotta sitten opettelin c++:n ja jääny sen jälkeen kokonaan pois, että kai siinä kertauksen paikka olisi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.