Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Merkin nappaus ajastuksella

hyprE [23.11.2007 19:24:44]

#

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 ?

Resiina [23.11.2007 22:04:30]

#

if (kbhit())
{
    // painettiin jotain nappia
}

kbhit() myös löytyy conio.h:sta.

hyprE [24.11.2007 04:19:54]

#

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;
}

Legu [24.11.2007 11:40:51]

#

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.

Deffi [24.11.2007 14:59:17]

#

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";
}

Legu [24.11.2007 15:06:08]

#

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ä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta