Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

301

08.04.2006, 17:46

:huhu:

Anonymous

unregistriert

302

08.04.2006, 17:56

In der Hauptschleife bei jedem Durchgang den Tastaturbuffer löschen und Ihn erst wieder freigeben wenn Taste X nicht mehr gedrückt ist. ;)

Sheddex

unregistriert

303

08.04.2006, 19:10

Ähm.. euch ist klar dass ich noch nie so etwas gemacht habe? Und außerdem hat das Spiel gar keine Schleife... Wäre also nett wenn es jemand näher erklären könnte ;)

[edit]: Meine aktuelle Lösung, die eben alles andere als toll ist...

C-/C++-Quelltext

1
2
3
4
for (int i=0; i<100; i++)
{
     if (GetAsyncKeyState (VK_RETURN)) getch ();
}


Nunja... Da werden dann alle übrigen "Returns" in ein getch () gestopft - Nur muss man danach eben eine andere Taste drücken um das letzte getch () "wegzukriegen"...

babelfish

Alter Hase

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

304

08.04.2006, 19:58

Vielleicht so

C-/C++-Quelltext

1
2
do{
}while(!GetAsyncKeyState (VK_RETURN));


Hab's nicht ausprobiert, wenn's nicht funzen sollte nicht schimpfen bitte :)

Sheddex

unregistriert

305

08.04.2006, 20:33

*Schimpf* ;) Ich weiß ehrlich gesagt nicht was ich damit soll...
Ich würde das schon gerne so machen wie Abrexxes das geschrieben hat... nur wie löscht man einen Tastaturbuffer?

babelfish

Alter Hase

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

306

08.04.2006, 21:15

Wieso weisst du nicht was du damit anfangen solltest?
Das ist eine Endlosschleife die nichts macht bis du die Enter Taste drückst,
dann musst du auch NUR die Enter-Taste drücken.

Aber mich interessiert das mit dem Tastatur-Buffer löschen auch mal.

Beispielprogramm:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    cout << "Bitte drücken sie die Enter Taste..." << endl; // Den Benutzer bitten eine Taste zu drücken :P


    do{  // Schleife starten...

    }while(!GetAsyncKeyState (VK_RETURN)); // Falls Enter NICHT gedrückt wurde -> Schleife fortfahren


    cout << "Danke sehr" << endl; // danken ;)


    Sleep(250); // Warten

    /*
    Wenn hier nicht gewartet wird, dann nützt die nächste Abfrage nichts,
    da die Enter-Taste ja schon gedrückt wäre...
    Wenn man sie aber bei der ersten Abfrage länger gedrückt hält,
    dann fährt das Programm schon nach der Wartezeit weiter -> Beenden.

Aber ich nutze sowieso lieber andere Abfragen  :P 
    */

    do{ 
    }while(!GetAsyncKeyState (VK_RETURN)); 

    return 0;
}

Sheddex

unregistriert

307

08.04.2006, 22:29

Schön, schön... so hab' ich das doch mehr oder weniger... das Problem ist nunmal, dass es von Menü zu Menü geht... nur wenn danach Text eingegeben werden soll eben nicht. Ich habe in deine Code eine Texteigabe eingebaut, und siehe da, es geht nicht ;)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream> 
#include <windows.h> 

using namespace std; 

int main() 
{ 
     char Text[10];
    
     cout << "Taste druecken" << endl;
    
     do {} while(!GetAsyncKeyState (VK_RETURN)); 
    
     cout << "Danke sehr" << endl;
    
     Sleep(250);
    
     cin.get (Text, 9);

     cout << "Es ging nicht, oder?" << endl;

     do {} while(!GetAsyncKeyState (VK_RETURN)); 

     return 0; 
}

dbGAMES

Treue Seele

Beiträge: 323

Wohnort: Frankfurt

Beruf: Student

  • Private Nachricht senden

308

09.04.2006, 06:04

lass das programm nach der eingabe nochmal schlafen!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
     char Text[10];
   
     cout << "Taste druecken" << endl;
   
     do {} while(!GetAsyncKeyState (VK_RETURN));
   
     cout << "Danke sehr" << endl;
   
     Sleep(250);
   
     cin.get (Text, 9);

     Sleep(250);

     cout << "Es ging nicht, oder?" << endl;

     do {} while(!GetAsyncKeyState (VK_RETURN));

     return 0;
} 

jetzt müsste die taste nicht mehr gedrückt sein. das kannst du ja auch sehr einfach in deine input funktion integrieren

Sheddex

unregistriert

309

09.04.2006, 10:09

Diese Lösung wird nie gehen... auch die dbGAMES Version nicht...

@Abrexxes und koschka: Ihr scheint es doch wohl zu wissen... also sagt auch mal was dazu ;)

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

310

09.04.2006, 11:13

Eine for Schelfe ist eine ZÄHLSCHLEIFE i etwa so:

C-/C++-Quelltext

1
2
3
4
5
// Summe der ersten 32 Quadratzahlen

for(unsigned i=0; i < 32; i++)
{
   erg+=i*i;
}


So etwas benutzt man NICHT für eine Spiel Scheife.
Sowas schon eher

C-/C++-Quelltext

1
2
3
4
while(!bQuit)
{
 //mach ma was

}


Im übrigen ist der Code von dbGame ganz ok, und dürfte auch funktionieren, brauchst natürlich die windows.h
Man braucht aber keine dowhile - while reicht ;).

Wenn du sowas verwenden würdest, würde immer "hallo" ausgegeben werden, solang i < 32

C-/C++-Quelltext

1
2
3
4
for(unsigned i=0; i < 32; i++)
 {
     printf("hallo");
}

Werbeanzeige