Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Czy istnieje polecenie, które czeka aż wciśniesz klawisz przez dany czas?

Ostatnio zmodyfikowano 2016-12-09 09:51
Autor Wiadomość
DODO
Temat założony przez niniejszego użytkownika
Czy istnieje polecenie, które czeka aż wciśniesz klawisz przez dany czas?
» 2016-12-03 10:37:42
Witam.

Ostatnio napisałem prostą konsolową gierkę, gdzie sterujesz swoją postacią i masz złapać bota.
Działa to na zasadzie wprowadzenia znaku z klawiatury (w, s, a lub d). Program wtedy przesuwa twoją postać w danym kierunku oraz bota w losowym kierunku.
Ale zamiast "  nazwa_zmiennej=getch();  " chciałbym użyć polecenia które np. da ci sekundę na wciśnięcie klawisza.

Czy istnieje takie polecenie?
P-154431
Gibas11
» 2016-12-03 11:51:32
Pętla powtarzana przez sekundę z sprawdzaniem kbhit() powinna to ogarnąć. Pseudokod:
C/C++
Clock zegar;
while( zegar.getTime().seconds() < 1.f ) {
    if( kbhit() ) {
        przycisk = getch();
        break;
    }
}

//edit http://imgur.com/a/aENNy
P-154432
DODO
Temat założony przez niniejszego użytkownika
» 2016-12-03 12:07:18
Jakie są potrzebne biblioteki?
P-154433
Gibas11
» 2016-12-03 12:12:20
Do kbhit wystarczy plik nagłówkowy conio.h (jesteś na Windowsie, nie?) a do mierzenia czasu możesz użyć std::chrono z biblioteki standardowej.
P-154434
DODO
Temat założony przez niniejszego użytkownika
» 2016-12-03 12:14:07
Tak, jestem na windowsie. Dzięki!
P-154435
DODO
Temat założony przez niniejszego użytkownika
» 2016-12-07 12:39:32
"'Clock' was not declared in this scope"
P-154608
carlosmay
» 2016-12-07 13:54:28
"'Clock' was not declared in this scope"
Oczekujesz, że...
P-154612
czaffik
» 2016-12-07 14:02:17
To co napisał Gibas11 na temat biblioteki chrono też coś mi nie działa, albo źle patrze albo nie wiem, tak czy inaczej możesz se napisać własny zegar na podstawie tej biblioteki:

C/C++
#include <chrono>
using namespace std;

class Clock
{
public:
    Clock() { start = chrono::high_resolution_clock::now(); }
    ~Clock() { }
   
    float secondsElapsed()
    {
        auto stop = chrono::high_resolution_clock::now();
        return chrono::duration_cast < chrono::seconds >( stop - start ).count();
    }
    void reset() { start = chrono::high_resolution_clock::now(); }
   
private:
    chrono::time_point < chrono::high_resolution_clock > start;
};

Dotyczy tylko standardu c++11
P-154613
« 1 » 2
  Strona 1 z 2 Następna strona