• 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

Cloud VPS
+2 głosów
413 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ź 1,027 wizyt
pytanie zadane 13 maja 2015 w C i C++ przez VeNeSky Początkujący (350 p.)
0 głosów
1 odpowiedź 188 wizyt
0 głosów
3 odpowiedzi 619 wizyt

93,483 zapytań

142,417 odpowiedzi

322,763 komentarzy

62,895 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

Kursy INF.02 i INF.03
...