Eli mulla on semmonen ongelma etten tiedä miten saan tuota "matoa" liikutettua
sillee esim. et jos painan "d" niin se liikkuu oikealle kunnes painan vaikka "s" joka ohjaa madon alas. Sen tietenkin pitäisi lähteä alas siitä kohti mihin se ny sattuu jäämään.
Ja jos semmoseen viel et se tyhjentää edellisen kohan.
Tässä on tää sähläys:
#include <stdio.h> int main(void){ char a; int ylos(),alas(),vasen(),oikea(); system("cls"); printf("M A T O P E L I");sleep(500);system("cls"); do{ a=getch(); switch(a){ case 'w': ylos(); break; case 's': alas(); break; case 'a': vasen(); break; case 'd': oikea(); break; case 'q': exit(0); break; case 'Q': exit(0); break; } }while(a!='q'||'Q'); } alas(){ int i; do{ system("cls"); printf(".\n.\n.\n.\n"); i++; }while(i<4); } ylos(){ int i; do{ system("cls"); printf(".\n.\n.\n.\n"); i++; }while(i<4); } vasen(){ int i; do{ system("cls"); printf(". . . ."); i++; }while(i<4); } oikea(){ int i; do{ system("cls"); printf(". . . ."); i++; }while(i<4); }
Mod. lisäsi kooditagit
Kooditagien kanssa tuota olisi huomattavasti miellyttävämpää lukea..
Anyways, sinun pitäisi pitää ohjelman muistissa pelaajan sijainti ja kun liikutetaan niin päivitetään sijaintia. Sitten piirto tapahtuu aina senhetkisen sijainnin mukaan.
Tuo cls-viritys on vähän arveluttava. Kannattaa tutustua ..curses kirjastoihin, esim. pdcurses. cls ei kuitenkaan toimi kuin Win/DOS ympäristössä.
Sori sori!! :PP
Aloitetaan:
Nuo voisi korjata ensin ja sitten katsotaan lisää.
No en tiiä. Kyl mä noi kuvat saan siihen näytölle ku painan näppäimiä.
Pitäs vaa tietää mitä tehä siit.
gotoxy:lla sais laitettuu sen kuvan menemään, mutta eipä tuo windows.h tykkää... se heittää tyylii 1000 virhettä :PPP tyylii tämmöstä
263 C:\Dev-Cpp\include\windef.h syntax error at '##' token
263 C:\Dev-Cpp\include\windef.h syntax error before '{' token
Blaah menee yli ymmärryksen.
Hmm minulla tuo sinun antamasi koodi ei suostu kääntymään, ennen noita laittamiani korjauksia. Tämän jälkeen ohjelma kääntyy, mutta näytöllä ei näy mitään muuta kuin musta ruutu. Tällekin löytyy selitys, koska kutsut funktiota system("cls"); heti tuon tulostuksen jälkeen.
oon tallentanu ton .c
kuutso kirjoitti:
oon tallentanu ton .c
Niin minäkin, koska tuo oli aivan selvästi c:ä. Eikä tiedostopäätteellä ole mitään tekemistä noiden logiikka- ja muiden virheiden kanssa.
Grez ainakin mainitsi että pitäs pitää ohjelman muistissa pelaajan sijainti.
how this goes?
No ehkä jotekin tälleen. En nyt pääse testaamaan kun cls ja conio on jotain dos-juttuja..
#include <conio.h> #include <stdio.h> int main(void){ char a; int x=30, y=10, i; int suuntaX=1, suuntaY=0; int run=1; do { system("cls"); for (i=0;i<y;i++) printf("\n"); for (i=0;i<x;i++) printf(" "); printf("O"); sleep(500); if (kbhit()) { a = getch(); switch(a){ case 'w': //ylös suuntaX=0; suuntaY=-1; break; case 's': //alas suuntaX=0; suuntaY=1; break; case 'a': //vasen suuntaX=-1; suuntaY=0; break; case 'd': //oikea suuntaX=1; suuntaY=0; break; case 'q': //Pois case 'Q': run=0; break; } } x+=suuntaX; y+=suuntaY; if (x<0 || y<0 || x>79 || y>23) { system("cls"); printf("Game over"); run=0; } } while (run); }
Kyllä toi toimii.
Täytyy ny tarkkaa kattoo mitä oot tehny :P
Kokeilin tuota minäkin ja toimii kunhan kommentoin tuon conio.h includin pois.
Käytössä kun on Dev-Cpp + MinGW.
Mutta tuli vain mieleen että jos kommentoin tuon conio.h:n pois ja jäljelle ei jää kuin stdio.h, niin mistä kääntäjä löytää tuon funktion kbhit()??
Sitä kun en stdio.h tiedostosta löytänyt.
C:ssähän funktion esittelyä ei ole pakko edes olla, vaan kääntäjä arvaa aina, että se olisi int f()
, joten kbhit
toimii ilmankin includeja. Toisaalta voi olla, että stdio.h:ssa on lisää include-rivejä, jotka päätyvät jotenkin myös tuon esittelyyn.
Kannattaa joka tapauksessa pitää mielessä, että kyseessä ei ole standardifunktio, joten koodi toimii todennäköisesti vain Windowsissa. (Ilmeisesti nuo funktiot ovat MSVCRT:ssä eli Microsoft Visual C++ Run-Timessa.)
Metabolix kirjoitti:
C:ssähän funktion esittelyä ei ole pakko edes olla, vaan kääntäjä arvaa aina, että se olisi
int f()
, jotenkbhit
toimii ilmankin includeja. Toisaalta voi olla, että stdio.h:ssa on lisää include-rivejä, jotka päätyvät jotenkin myös tuon esittelyyn.
Tuota, tuota. Mikäs tarkoitus niillä includeilla sitten on jos niitä ei tarvita?
Tässä näiden C:n perusteiden kanssa painiessa olen ollut siinä ymmärryksessä että ne pitää laittaa sinne jotta kääntäjä osaa ymmärtää funktioiden kutsut ohjelmasta.
Ja tästä tuleekin mieleen...
On nimittäin käynyt niin että joskus kun tuo include on vahingossa jäänyt pois, niin olen saanut virheilmoituksen ja toisessa tapauksessa homma on pelittänyt ilman minkäänlaisia ongelmia.
Onko tuo ilmiö kääntäjästä riippuva vai mistä? Käytössä siis MinGW.
lainaus:
Kannattaa joka tapauksessa pitää mielessä, että kyseessä ei ole standardifunktio, joten koodi toimii todennäköisesti vain Windowsissa. (Ilmeisesti nuo funktiot ovat MSVCRT:ssä eli Microsoft Visual C++ Run-Timessa.)
No tuo MS VC on asennettu koneelle, eli olisiko osannut sieltä hakea?
Ville kirjoitti:
Tuota, tuota. Mikäs tarkoitus niillä includeilla sitten on jos niitä ei tarvita?
Kannattaa ihan ensiksi selvittää, mitä include tekee ja mitä esittelyt ovat.
ANSI C:ssä funktion esittelyn puuttuessa "esittelyksi" tulee aina automaattisesti sama:
int funktio();
Ehkä arvaat, että jos funktion paluuarvo on muu kuin int, lopputulos menee aika pahasti metsään. Lisäksi tällaiselle funktiolle on mahdollista antaa väärä määrä vääriä parametreja väärässä järjestyksessä ilman, että asiasta tulee mitään huomautusta, ja tällöinkin funktio toimii aika täydellisen väärin.
C99 onneksi poisti tämän ominaisuuden, eli siinä esittely on pakollinen. Sama koskee C++:aa.
En tiedä, missä tilanteissa olet saanut tuon toimimaan omituisesti, mutta voi olla, että jokin kääntäjäsi vaatii esittelyt (tai ehkä jopa käyttää C99-standardia). Lisäksi kannattaa muistaa, että monet standardikirjaston tiedostot sisällyttävät myös toisiaan, eli jos ohjelmassasi on yksi include, saatat saada (ympäristöstä riippuen) mukaan pari ylimääräistäkin tiedostoa, jolloin niiden puuttumista ei huomaa (paitsi sitten toisessa ympäristössä).
Aihe on jo aika vanha, joten et voi enää vastata siihen.