• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

cin, który zaakceptuje nie naciśnięcie niczego i przyjmie to jak brak polecenia

Object Storage Arubacloud
+2 głosów
274 wizyt
pytanie zadane 3 listopada 2016 w C i C++ przez Adam Olesiak Gaduła (3,290 p.)
Cześć,

Piszę grę, w której jeździmy samochodem po oknie w konsoli. Gra jest oparta na wykonujących się po kolei klatkach. Jak zrobić to tak, aby program sprawdzał w każdej klatce, czy wciskamy którąś ze strzałek, odpowiednio reagował jak coś naciśniemy, ale nie zamrażał się jak nic nie naciśniemy - po prostu ma to potraktować jako brak przyspieszenia/spowolnienia/skrętu i jechać dalej dopóki się nie zatrzyma lub dopóki nie naciśniemy jakiejś ze strzałek w którejś z kolejnych klatek?

Coś w tym stylu, tylko poprawnie:

cin>>decyzja;

switch (decyzja){

case up:

case down:

case right:

case left:

case none:

}

Program nie może się zamrozić i czekać na odpowiedź, ma wykonać szybkie, jednorazowe sprawdzenie, czy nie jest naciskany przycisk i lecieć dalej.

Z góry dziękuję za pomoc

2 odpowiedzi

+4 głosów
odpowiedź 3 listopada 2016 przez Buby Pasjonat (19,590 p.)
wybrane 3 listopada 2016 przez Adam Olesiak
 
Najlepsza

Witaj!

Pierwsza na mysl przychodzi mi stara poczciwa biblioteka conio.h i funkcje kbhit() oraz getch(). Standardowe wprowadzanie danych konczy sie, gdy wprowadzony zostaje znak nowej linii [enter], natomiast funkcja getch() przechwytuje pojedyncze wcisniecie, kbhit() natomiast sprawdza, czy w buforze pozostal jakis kod znaku.

 

Przykladowa petla glowna twojego programu:

#include <conio.h>  //Pamietaj, aby dolaczyc niezbedna biblioteke

/* kod twojego programu */
/*... */


/* Petla glowna gry */
bool isDone = false;
while (!isDone) {
  if (kbhit()) { //jesli w buforze jest jakis znak
     char decision = getch(); //pobierz go i przypisz do zmiennej
     /* tutaj twoj switch z decyzjami  */
  } else {
    //tutaj kod odpowiadajacy za przewinieie klatki, bez akcji, tzn. gazu hamulca etc.
  }

}

 

komentarz 3 listopada 2016 przez Adam Olesiak Gaduła (3,290 p.)
Dokładnie o coś takiego mi chodziło, dzięki Panowie ;)
+2 głosów
odpowiedź 3 listopada 2016 przez Patrycjerz Mędrzec (192,320 p.)

Jeśli używasz Windowsa, skorzystaj z funkcji getch (pobranie znaku z klawiatury bez potwierdzenia enterem) oraz kbhit (sprawdzenie, czy nie jest naciśnięty jakikolwiek klawisz) z biblioteki conio.h.

komentarz 3 listopada 2016 przez Buby Pasjonat (19,590 p.)

Jak zawsze zbyt dlugo bawilem sie w redagowanie odpowiedzilaugh Ale grunt, ze rozwiazane w ten sam sposob cheeky

Podobne pytania

0 głosów
1 odpowiedź 931 wizyt
pytanie zadane 13 maja 2015 w C i C++ przez VeNeSky Początkujący (350 p.)
0 głosów
1 odpowiedź 127 wizyt
0 głosów
3 odpowiedzi 332 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...