| Autor |
Nachricht |
uncannysnake
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.02.2012
Beiträge: 33
|
uncannysnake Mitglied
18:50:12 30.07.2012 Titel: |
Pfeiltastendruck (ASCII-code) erkennung |
Zitieren |
hallo,
weiß jemand von euch, wie ein programm das drücken einer pfeiltaste erkennt?
also mit kbhit(), aber da die pfeiltasten anscheinend keinen ascii-code haben,
hab ich keine ahnung, wie ich das vergleichen kann.
durch das drücken der pfeiltaste soll eine aktion ausgeführt werden,
falls ihr fragt wozu ich es brauche.
MFG
uncannysnake |
|
|
|
 |
C++ Forumbot
Forumbot
Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 17119
|
C++ Forumbot Forumbot
18:55:06 30.07.2012 Titel: |
|
Zitieren |
|
 |
DirkB
Unregistrierter
|
DirkB Unregistrierter
20:44:13 30.07.2012 Titel: |
|
Zitieren |
Die Pfeiltasten (Cursor-Tasten) sowie die anderen Funktionstasten liefern zwei Zeichencodes.
Über den ersten kannst du erkennen, dass es eine Funktinstaste ist. Über den zweiten kannst du dann die Taste auswerten.
Genaue Werte weiß ich jetzt nicht mehr. Ist schon laaaange her. |
|
|
|
 |
DasC
Unregistrierter
|
DasC Unregistrierter
20:52:59 30.07.2012 Titel: |
|
Zitieren |
Gleich kommt der SeppJ und heult wegen deinem Deutsch, pass auf. |
|
|
|
 |
7xCore
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.07.2011
Beiträge: 438
|
7xCore Mitglied
22:38:09 30.07.2012 Titel: |
|
Zitieren |
|
 |
Sone
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.05.2012
Beiträge: 3192
|
Sone Mitglied
00:21:15 31.07.2012 Titel: |
|
Zitieren |
| DasC schrieb: | | Gleich kommt der SeppJ und heult wegen deinem Deutsch, pass auf. |
Maul.
| Zitat: | | Die Pfeiltasten (Cursor-Tasten) sowie die anderen Funktionstasten liefern zwei Zeichencodes. |
In der WinAPI vielleicht.
Und wo wir schon dabei sind, diese Funktion duerfte es tun:
| C++: | bool pressed(int code)
{
return GetKeyState( code ) >> ( sizeof ( GetKeyState(0) ) * 8 - 1);
} | |
Die Pfeiltastencodes sind
VK_LEFT
VK_RIGHT
VK_UP
VK_DOWN
Bedeutung duerfte vom Kontext her erkenntlich sein.
Vergiss nicht, dass das bei jedem Pruefen durch diese Funktion der Status abgefragt wird, wenn eine Taste also gedrueckt ist, wird diese Funktion bei entsprechendem Parameter solange true zurueck geben, bis die Taste wieder losgelassen wird. Also nicht, dass deine Schlange in Lichtgeschwindigkeit nach links fliegt, wenn du das drueckst
| Zitat: | | durch das drücken der pfeiltaste soll eine aktion ausgeführt werden, |
Wirklich? Oder einfach nur aus Spass abfragen? |
_________________ You want to do X, and you think Y is the best way of doing so. Instead of asking about X, you ask about Y. | Der C++-Standard Draft: "Note: this is an early draft. It’s known to be incomplet and incorrekt [...]"
Zuletzt bearbeitet von Sone am 00:22:21 31.07.2012, insgesamt 1-mal bearbeitet |
|
 |
uncannysnake
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.02.2012
Beiträge: 33
|
uncannysnake Mitglied
16:32:57 05.08.2012 Titel: |
|
Zitieren |
Vielen Dank 7xCore, es hat geklappt
An Sone: dieser c++ code bringt mir leider überhaupt nichts ,
aber trotzdem danke.
EDIT:
so nebenbei:
das wird kein snake spiel, sondern ein einarmiger bandit
(snake wäre ja auch wirklich zu klassisch )
MFG
uncannysnake |
Zuletzt bearbeitet von uncannysnake am 17:27:24 05.08.2012, insgesamt 1-mal bearbeitet |
|
 |
Sone
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.05.2012
Beiträge: 3192
|
Sone Mitglied
19:10:38 05.08.2012 Titel: |
|
Zitieren |
| uncannysnake schrieb: |
An Sone: dieser c++ code bringt mir leider überhaupt nichts  |
Verstehst du nicht, wie du ihn anwenden sollst/wie er funktioniert? Eine einfachere Version ist die:
| C++: | bool pressed(int code)
{
return GetKeyState( code ) >> 15;
} | | |
_________________ You want to do X, and you think Y is the best way of doing so. Instead of asking about X, you ask about Y. | Der C++-Standard Draft: "Note: this is an early draft. It’s known to be incomplet and incorrekt [...]"
Zuletzt bearbeitet von Sone am 19:10:44 05.08.2012, insgesamt 1-mal bearbeitet |
|
 |
b.b.
Unregistrierter
|
b.b. Unregistrierter
20:43:50 05.08.2012 Titel: |
Pfeiltasten - Tastendruck erkennen mal anders |
Zitieren |
| C++: | 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <stdio.h>
#include <conio.h>
typedef void (*pFunc) (void);
unsigned char read_key ( void )
{
int c = _getch();
if ( c == 0 || c == 224 )
return _getch();
return c;
}
void f1 (void ) // 0, 59
{
puts("F1");
}
void f2 (void ) // 0, 60
{
puts("F2");
}
void up (void ) // 224, 72
{
puts("up");
}
void right (void) // 224, 77
{
puts("right");
}
void down (void) // 224, 80
{
puts("down");
}
void left ( void ) // 224, 75
{
puts("left");
}
void not_implemented_yet (void)
{
puts("Not implemented yet.");
}
void bye(void)
{
puts("Thanks for trying, bye!");
}
int main(void)
{
int index;
pFunc pfarr[256];
for (index=0; index<256; index++)
pfarr[index]=not_implemented_yet;
pfarr[59] = f1;
pfarr[60] = f2;
pfarr[72] = up;
pfarr[77] = right;
pfarr[80] = down;
pfarr[75] = left;
pfarr[0] = not_implemented_yet;
pfarr[27] = bye;
puts("Welcome to BB's arrow keys function pointer example!" );
puts("Press Esc to quit." );
while(27 != index)
pfarr [index=read_key()]();
return 0;
} | | |
|
|
|
 |
TastenDrücker
Unregistrierter
|
TastenDrücker Unregistrierter
12:56:47 06.08.2012 Titel: |
|
Zitieren |
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <windows>
#include <iostream>
using namespace std;
int main()
{
while(1)
{
Sleep(1); // Damit die CPU nicht so viel arbeiten muss
// Bei alten PC führt der Code sonst zu 100% CPU Auslastung
if ( GetAsyncKeystate(65) == -32767 )
{
cout<<"you have press a "<<endl;
}
}
} | |
Wenn die Taste a ( 65 )gedrückt wurde dann gibt GetAsyncKeyState den Wert -32767 zurük.
google Suchbegriff: msdn GetAsyncKeyState
Da findest du mehr Infos zu der Funktion.
cpp]
#include <windows>
#include <conio> // getch(); ist aus der C-Library
#include <iostream>
using namespace std;
int main()
{
int key;
while(1)
{
key = getch();
if ( key == 65) // Bin mir nicht sicher ob getch(); hier 65 zurückgibt.
// Hab auch gerade kb das zu testen.^^
{
cout<<"you have press a "<<endl;
}
}
}
[/cpp] |
|
|
|
 |