Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: ncurses ja liikkuminen

Sivun loppuun

vehkis91 [03.05.2008 23:37:18]

#

miten saan merkin(#) liikkumaan?

Tuo minun tekemäni ei toimi, enkä tiedä syytä. Koodi kyllä varmaan
muutenkin päin honkia...


Tässä oma sohellukseni kokonaisuudessaan

#include <ncurses.h>
#include <iostream>
#include <ctype.h>



using namespace std;

int main(int argc, char** argv)
{
//Lopetus
 int done=0;

 int ch=0;

 int x=10;
 int y=10;

//alustetaan curses
 initscr();

//Näppis käyttöön
 keypad(stdscr, TRUE);

//poistetaan painalluksista puskuri
 raw();

//kaiutus pois
 noecho();

//kursori pois näkyvistä
 curs_set(0);

//Värit käyttöön
 start_color();

while(done==0)
{

 ch=getch();


//ohjataan "pelaajaa"

 switch(a)
 {
           case KEY_RIGHT:	//Oikalle
                x--;
                break;
           case KEY_LEFT:	//Vasemmalle
                x++;
                break;
           case KEY_UP:	//Ylös
                y--;
                break;
           case KEY_DOWN:	//Alas
                y++;
                break;
 }
           mvprintw(x,y,NULL,'#');
           refresh();


}



//Pois curses-tilasta
 endwin();

//Sammutetaan oikeaoppisesti
 return EXIT_SUCCESS;
}

tgunner [03.05.2008 23:57:24]

#

Mikä hemmetin muuttuja "a"? Mitä sä tutkit switchilläs?

edit. ja mikä ihmeen syntaksi tolla sun mvprintw-funktiollas on? Miks nulli kolmantena parametrinä?

hunajavohveli [04.05.2008 00:07:27]

#

En tunne ncursesia, mutta muuttujan a paikalle olet varmaan tarkoittanut muuttujaa ch. Lisäksi while-silmukka ei koskaan pääty, koska done-muuttujaa ei muuteta millään syötteellä.

vehkis91 [04.05.2008 00:48:04]

#

tarkoitan a:lla ch:ta. Ohjelma on vielä niin alussa,että en ole vielä laittanut siihen keskytystä.

Tutkin, mitä nappulaa painetaan.

Edit:

Muutin a:n ch:ksi ja tyypin chariksi. Tästä johtuen työntää virheilmoituksia:
h001.cpp: In function ‘int main(int, char**)’:
h001.cpp:49: warning: overflow in implicit constant conversion
h001.cpp:52: warning: overflow in implicit constant conversion
h001.cpp:55: warning: overflow in implicit constant conversion
h001.cpp:58: warning: overflow in implicit constant conversion
h001.cpp:62: error: invalid conversion from ‘char’ to ‘const char*’
h001.cpp:62: error: initializing argument 3 of ‘int mvprintw(int, int, const char*, ...)’

tgunner [04.05.2008 02:05:05]

#

getch palauttaa kokonaisluvun, joten ei kannata käyttää ch:n tyyppinä charria. Suurin osa varoituksista tulee siitä, ettei ch-muuttujaan mahdu noiden näppäinvakioiden arvoja (KEY_RIGHT, KEY_LEFT,...). Viimeinen errori tulee jo aiemmin mainitsemastani asiasta.

Kokeilisit itsekin vähän miettiä, mitä teet. Tuntuu nimittäin, että olet haukkaamassa heti ohjelmointiharrastuksesi alussa liian isoja opeteltavia. Voisit ensiksi opiskella C:n perusteet ja sitten siirtyä lisäkirjastoihin. Nuokin varoitukset ovat todella loogisia pääteltäviksi...

vehkis91 [04.05.2008 10:22:31]

#

Osaan c++ perusteet hyvin, jotan en ala c:tä opetteleen, mutt kiitos vinkeistä.

hunajavohveli [04.05.2008 10:37:00]

#

vehkis91 kirjoitti:

Osaan c++ perusteet hyvin, jotan en ala c:tä opetteleen, mutt kiitos vinkeistä.

C on osa C++:aa, joten jollet osaa C:tä, et osaa C++:n perusteita. Siitä asiasta voi tietysti olla eri mieltä, pitäisikö C opetella ensin kokonaan ja vasta sen jälkeen siirtyä C++:aan, vaiko opetella samaan aikaan sekä C:n että C++:n ominaisuuksia. Itse olen edellisen kannalla, mutta jos olet jo sisäistänyt esim. luokkien idean, ehkäpä on järkevintä jatkaa näin.

vehkis91 [05.05.2008 08:05:12]

#

Sain toimimaan ton ukon liikutuksen...


Sivun alkuun

Vastaus

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

Tietoa sivustosta