C - vykreslovanie polickovej mapy

Programovacie jazyky, rady, poradňa...
Jacobs322
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 232
Registrovaný: 25 máj 2013, 12:10

C - vykreslovanie polickovej mapy

Príspevok od používateľa Jacobs322 »

Ahoj, chcel by som sa opytat ako sa da synchronizovat vstup od uzivatela.

Priklad, program vyzve uzivatela aby zadal cislo a on tam napise nejake pismena alebo sa pomyli, tak mi to zozerie dalsi scanf() alebo gets() a ulozi sa ten omyl.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C - synchronizacia vstupu

Príspevok od používateľa harrison314 »

scanf vracia pocet parametrov, ktore nacitalo , napriklad chces nacitat cislo

Kód: Vybrať všetko

while(scanf("%i",&pocet) != 1)
{
  printf("Zadaj tam to cislo poriadne!");
}
Jacobs322
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 232
Registrovaný: 25 máj 2013, 12:10

Re: C - synchronizacia vstupu

Príspevok od používateľa Jacobs322 »

No len ked sa uzivatel pokusi do int vlozit string tak aplikacia zamrzne.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C - synchronizacia vstupu

Príspevok od používateľa harrison314 »

to sa mi nejak nezda, hod sem celi kod
Jacobs322
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 232
Registrovaný: 25 máj 2013, 12:10

Re: C - synchronizacia vstupu

Príspevok od používateľa Jacobs322 »

Prepac, to zamrznutie bola zaciatocnicka chyba, len je tu iny problem.
Tu je cela funkcia

Kód: Vybrať všetko

void Menu()
{

    int choice = 0;

    printf("   1. Start game \n   2. Credits \n   3. Exit \n");
    do{
    scanf(" %d", &choice);
    if(choice != 1 && choice != 2 && choice != 3)
    {
        printf("Plese enter number 1,2 or 3. \n");
    }
    if(choice == 2)
    {
        credits();
    }
    if(choice == 3)
    {
        exit(0);
    }
    }while(choice == 2 || (choice != 1 && choice != 2 && choice != 3));

    return;
}
Ked program zisti ze uzivatel zadal iny charakter nez cisla 1,2 alebo 3. Tak zacne dookola pisat Plese enter number 1,2 or 3. No podla toho ako som to napisal by to malo dat moznost znovu zadat cislo...
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C - synchronizacia vstupu

Príspevok od používateľa harrison314 »

Skus toto, momentalne nemam po ruke ziaden C kompilator, tak tam mozno budu syntakticke cyby.

Kód: Vybrať všetko

void Menu()
{
 for(;;)
 {
 printf("   1. Start game \n   2. Credits \n   3. Exit \n");
 char choice='\0';
 while(choice<'1' || choice>'3') scanf("%c",&choice);
 if(choice=='1') return;
 if(choice=='2') credits();
 if(choice=='3') exit(0);
 }
}

Jacobs322
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 232
Registrovaný: 25 máj 2013, 12:10

Re: C - synchronizacia vstupu

Príspevok od používateľa Jacobs322 »

Toto funguje presne tak ako som to planoval ja, vdaka.

Len este sa chcem spytat na jednu vec lebo nerad mam v kode nieco comu nechapem.

Co to znamena ked si char choice deklaroval ako '\0' ?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C - synchronizacia vstupu

Príspevok od používateľa harrison314 »

Jacobs322 napísal:Co to znamena ked si char choice deklaroval ako '\0' ?
Aby v nej nebolo '1','2', alebo '3', aj keby ju deklarujem ako 'z' tak je to ok
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: C - synchronizacia vstupu

Príspevok od používateľa Fabo »

Null termination = prazdny char array. V podstate to iste ako "" ale explicitne.
Jacobs322
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 232
Registrovaný: 25 máj 2013, 12:10

Re: C - synchronizacia vstupu

Príspevok od používateľa Jacobs322 »

Fabo napísal:Null termination = prazdny char array. V podstate to iste ako "" ale explicitne.
Vdaka :)

//autoeditácia príspevku (01 Sep 2014, 20:09)
Ahoj, programujem v C taku da sa povedat "hru", ucim sa na tom atd. a potreboval som nejako spravit mapku.
Sklada sa z 50x50 policiek a potrebujem nejako kazde kolo (ma to byt tahove) zistit na akom policku hrac je a podla toho sa hra nejako zachova. No cez if statement to nejde pretoze takych policok je tam asi 400 - 600. Takze sa chcem spytat ci by ste mi neporadili nejaky iny sposob ako to vykreslit a zaroven udrziavat hru aktualizovanu ?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C - vykreslovanie polickovej mapy

Príspevok od používateľa harrison314 »

Vies pouzivat v C datove struktury (struct) a viacrozmerne polia?
Na toto sa hodia.
tych 50x50 pociok, budes mat dvojrozmerne pole dacoho, a pozicia hraca bude urcena dvomi ntami ako sudranice, alebo priamo v tej strukture, to zalezi co to byt a ako to budes riesit.
Jacobs322
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 232
Registrovaný: 25 máj 2013, 12:10

Re: C - vykreslovanie polickovej mapy

Príspevok od používateľa Jacobs322 »

No, s datovymi strukturami som este nerobil, viacrozmerne polia ano.
Momentalne to mam tak ze mam urcene x,y ako polohu hraca v suradniciach a podla toho ako sa hrac pohne (S,V,J,Z) tak sa menia suradnice ale nepochopil som ako myslis ze to mam urobit cez d. strukturu a viacrozmerne pole ?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C - vykreslovanie polickovej mapy

Príspevok od používateľa harrison314 »

Tak sa nauc robit vlastne datove strukturi, v programovani je to velmi dolezite. Napr nebudes mat dve premnne x a y ale budes mat strukturu Point, co ma x a y.

U teba spravne riesnie zalezi od celkovej funkcionality, dal si k tomu malo info (aspon sa mi zda, aj ked dnes mi to nemysli).
Jacobs322
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 232
Registrovaný: 25 máj 2013, 12:10

Re: C - vykreslovanie polickovej mapy

Príspevok od používateľa Jacobs322 »

No vlastne predstav si mirezku 50x50 policok. Hrac sa pohybuje smermi hore, dolu, doprava a dolava. Su tam rozne oblasti ako pust, lesy a tak dalej na kazdom policku moze byt hocico. A hra musi zistit na ktorom policku si takze sa to vlastne musi udrziavat aktualizovane sposobom if((x == ? && y == ?) || (x == ? && y == ?) ) a takto je tam tych argumentov neskutocne vela a program vzdy zacne blbnut ked sa spusti tato funkcia. Tak potrebujem vymisliet nejaky sposob ktory by nebol tak narocny a hra by stale vedela kde hrac je/ na akom type policka sa nachadza.
xadman
Medium Star
Medium Star
Príspevky: 305
Registrovaný: 09 mar 2011, 17:02

Re: C - vykreslovanie polickovej mapy

Príspevok od používateľa xadman »

mapa bude 2 rozmerné pole, ktoré bude mať v sebe symboly, napr. pre stron bude 'S', pre volné políčko napr '.'
a keď hráč stlačí šípku, tak predtým len skontroluj, či je políčko voľné atd

štruktúra hráča bude obsahovať x, y, poprípade iné údaje.
Napísať odpoveď