Olen aika pitkään koittanut ettiä netistä apuja tähän, ja kattonu kirjat läpi, mutta ei tunnu löytyvän. Eli mitenkä tekisin pelistäni reaaliaikaisen, kun tällä hetkellä kaikki botit ja muut tekevät toimintonsa, kun pelaaja painaa nappia. Olen käyttänyt getch(); aliohjelmaa (conio.h). Haluaisin tehdä sellaisen siitä, että jos pelaaja ei sekuntiin paina nappia niin ohjelma skippaa merkin nappauksen. Käytän Dev C++ ja Win32-peliä teen.
LOOPPI { 1. BOTTI TOIMINNOT 2. PELAAJAN VALINTA }
tälläinen looppi on nyt kyseessä, eli ensin kaikki botit tekevät juttunsa, sitten pelaajalla on sekunti aikaa tehdä jotain, jonka jälkeen looppi alkaa alusta. Joten pelaaja voi istua ja katsoa kun botit liikkuvat sekunnin välein, tai pelata itse samalla. Jos pelaajalla menee yli sekunti vastata ohjelmalle kun odotetaan pelaajan ratkaisua, pelaaja tavallaan menettää yhden heittovuoron.
Nyt sinä osaava, autathan ?
if (kbhit()) { // painettiin jotain nappia }
kbhit()
myös löytyy conio.h:sta.
Resiina kirjoitti:
if (kbhit()) { // painettiin jotain nappia }
kbhit()
myös löytyy conio.h:sta.
Voi siis s****na mikä vastaus, no mutta, ei vaan ihan oikeille jäljille se johdatti. Mutta sain muutaman hakutuloksen käydä läpi googlessa, että opin tota käyttämään (MÄHÄN OLEN ALOITTELIJA)! Löysin kyllä lopulta aika hyvän ohjeen ja tein siitä tällaisen:
#include <conio.h> #include <iostream> #include <windows.h> using namespace std; int main() { char otto; while(1) { cout<<"Ping? Pong!\n"; Sleep(1000); if(kbhit()) { otto = getch(); if (otto == 'q') break; cout<<"Painoit: "<<otto<<endl; } } return EXIT_SUCCESS; }
Täytyy sitten muistaa:
Wikipedia kirjoitti:
conio.h is a header file used in old MS-DOS compilers to create TUI interfaces, however, it is not part of the C programming language, the C standard library, ISO C or by POSIX.
Sleep blockkaa ohjelman. Mitäs jos tehtäis jotenski tällei, ei takuita toimimisesta halutulla tavalla kuitenkaan:
char nappi; int aika; while(1) { aika = GetTickCount(); // windows.h:sta, laskeskellaan millisekunteja while(GetTickCount() < (aika + 1000)) { if(kbhit()) { nappi = getch(); // nyt tehdään jotain sillä käyttäjän painalluksella } } cout << "Liikutetaan bottia"; }
Deffi, tuo Sleep on kyllä paljon parempi, nimittäin tuo sinun systeemisi vie turhaan prosessoriaikaa. CPU:n käyttöaste olisi sillä 100 %:n luokkaa, kun taas Sleepillä toteutettua lähellä nollaa.
Niin siis tai edes joku sleep siellä, vaikka loopissa kymmenen Sleep(100):aa, kun tässä ei nyt ole väliä sillä tuleeko tuo "Painoit .." -juttu "heti" painaessa vai pienellä viiveellä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.