Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Problem mit Tastatureingaben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.05.2004, 20:10 Uhr
Lensflare



hallo.

ich habe angefangen tetris zu programmieren und es ist schon alles so gut wie fertig. nur eins kann ich nicht hinbekommen:

Damit der tetris-stein für einige zeit in der luft bleibt, bevor er wieder eine zeile weiter nach unten fällt, habe ich die funktion Sleep(1000); benutzt. eingebunden mit <windows.h>
Aber während der stein da wartet, will ich ihn ja auch steuern können, zB rechts, links, nach unten oder drehen. Für diese befehle habe ich getch(); benutzt, damit ich das ganze mit der tastatur steuern kann.

So, und nun wartet das programm jedes mal, bis ich was eingebe und in der zeit hängt der stein die ganze zeit in der luft. Erst wenn ich eine taste drücke, fällt er eine zeile runter und wartet wieder auf meine eingabe.

Ich will also das programm dazu bringen, dass es meine eingaben zwar auswertet, aber nicht auf sie wartet.

ich hoffe ihr versteht mein problem.
danke im voraus
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.05.2004, 20:33 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


unter windows gibt es da kbhit(), das prüft ob eine taste gedrückt wurde, wartet aber nicht darauf.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.05.2004, 22:54 Uhr
Lensflare



wie benutze ich kbhit() ?

hab folgendes ausprobiert:

C++:
int main(void)
{
  char c1;
  int z1 = 0;
  while(c1 != 'e')
  {
  printf("%i\n",z1);
  c1 = kbhit();
  Sleep(100);
  z1 += 1;
  }
  
  printf("Programm Ende...");
  getchar();
}



eigentlich müsste "Programm Ende" ausgegeben werde, nachdem ich die taste e gedrückt habe. Aber es reagiert auf keine taste.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.05.2004, 01:05 Uhr
theosoft



Hi,
ich meine nicht, dass es das müsste
Aber probier's doch mal so:

C++:
int main(void)
{
  char c1 = '0';;
  int z1 = 0;
  while(c1 != 'e')
  {
    printf("%i\n",z1);
    if(kbhit()) c1 = (char)getch();
    Sleep(100);
    z1 += 1;
  }

  printf("Programm Ende...");
  getchar();
}


Schönes Wochenende, Theo
--
ifS (immer fröhliches Schaffen)
theosoft
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.05.2004, 08:49 Uhr
Oliver
S2-Pixelgeneral


Wiese nimmst du nicht statt Sleep timeGetTime() under errechnest dann Differenz, dann kannst du sowas wie einen Timer programmieren.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.05.2004, 13:10 Uhr
Spacelord
Hoffnungsloser Fall


Sein Problem ist das getch() blockiert,da ist _kbhit() schon ok.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 16.05.2004 um 13:41 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.05.2004, 20:00 Uhr
Lensflare



danke @ theosoft,
ich weiss zwar nicht, wieso es so funktioniert wie du es vorgeschlagen hast, aber es funktioniert!
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.05.2004, 20:15 Uhr
Lensflare



@ Oliver:

timeGetTime() ist das eine methode, die momentane uhrzeit einzulesen?? Wollt ich auch schon immer wissen wie das geht
Also bitte erklären, ich bin noch ein noob.

gibt die funktion ein char array mit der zeit als text zurück oder wie geht das?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
16.05.2004, 22:03 Uhr
theosoft



@ Lensflare: Gern geschehen!
... du kannst dich ja mal informieren, über Funktionen, Übergabeparameter und Rückgabewerte.
getch() wartet auf eine Tastatureingabe; deshalb steht das Programm auch still.
kbhit() hat bool als Rückgabewert. Bei meinem Beispiel wird die Funktion getch() nur aufgerufen, wenn kbhit() true zurück gibt.

Das zusammen macht's dann so, wie du es wolltest.

Viel Erfolg, Theo
--
ifS (immer fröhliches Schaffen)
theosoft
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: