Portál AbcLinuxu, 12. května 2025 11:35

Dotaz: jak v C zkontrolovat zda byla stisknuta klavesa, ale na stisk necekat?

22.2.2010 20:37 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
jak v C zkontrolovat zda byla stisknuta klavesa, ale na stisk necekat?
Přečteno: 659×
Odpovědět | Admin
Dobry den, pokousim se o vytvoreni jednoduche verze hry tenis pro prikazovou radku. Mam problem se ctenim klavesnice. Potreboval bych, aby hra bezela nezavisle na klavesnici a v cyklu (kazdych X casovych_jednotek ) vykonavala urcite funkce a pouze v pripade stisku nekolika definovanych klaves doslo v vykonani specialni funkce, ktera obslouzi pozadavky uzivatele. v soucasne dobe hra vypada asi takto:
int main(void){
 init();
 while ( (znak = getch() ) != 'q' ) {
  funkce1(data, znak);
  funkce2(data, znak);
  sleep();
 }

return 0;}
potreboval bych getch nahradit (asi) oprimalne prerusim od klavesnice(ale pouze pro par klaves, ktere pro hru potrebuju), aby hra bezela ve smycce a pouze pri stisku urcite klavesy se ukoncila/vykonala_jinou_akci, ale bohuzel nevim jak se zeptat strycka googla, resp co vlastne hledat..

diky za kazdou radu honza
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

AraxoN avatar 22.2.2010 20:49 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: jak v C zkontrolovat zda byla stisknuta klavesa, ale na stisk necekat?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Myslím, že to čo hľadáš, sa volá "ncurses.h".
AraxoN avatar 22.2.2010 20:50 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: jak v C zkontrolovat zda byla stisknuta klavesa, ale na stisk necekat?
Vlastne, volá sa to "ncurses", include súbor je "curses.h". :-D (dvakrát meraj a raz rež)
Fuky avatar 22.2.2010 22:23 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: jak v C zkontrolovat zda byla stisknuta klavesa, ale na stisk necekat?
Příloha:

A kdyby Tě zajímala jednoduchá ukázka jak s ncurses pracovat tak mrkni na Tetris v příloze. ;-)

23.2.2010 08:35 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
Rozbalit Rozbalit vše Re: jak v C zkontrolovat zda byla stisknuta klavesa, ale na stisk necekat?
diky ncurses sem nasel a pouzivam na kresleni, hezka to vec :) jen sem nikde nenasel jak to udelat neblokovane, dekuju za pomoc :) jdu se stydet do kouta
pavlix avatar 5.3.2010 17:59 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: jak v C zkontrolovat zda byla stisknuta klavesa, ale na stisk necekat?
Zdar johne... jedna věc je nečekání na znak konce řádku, druhá věc je neblokující vstup (pokud uživatel nic nenapsal, dělám něco jiného).

Na to stačí při inicializaci ncurses použít možnosti cbreak/nocbreak (čekání na konec řádku), echo/noecho (vypisování vstupu), nodelay,halfdelay,timeout (neblokující, o zlomek vteřiny zpožděný neblokující, blokující pouze na zadaný timeout).

Viz třeba "man nodelay".
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
4.3.2010 21:58 drachir
Rozbalit Rozbalit vše Re: jak v C zkontrolovat zda byla stisknuta klavesa, ale na stisk necekat?
Odpovědět | | Sbalit | Link | Blokovat | Admin
WINDOW *cosi;
initscr();
clear();
noecho();
cosi=newwin(80,80,0,0);
keypad(cosi,TRUE);
refresh();
int c=-1;
while (c==-1)
{
refresh();
c=wgetch(cosi);
}
clrtoeol();
refresh();
endwin();

printf("%d",c);

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.