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

denjo

Treue Seele

  • »denjo« ist der Autor dieses Themas

Beiträge: 163

Wohnort: BLB

  • Private Nachricht senden

1

04.03.2007, 16:46

Switch-Case Konstrukt mit ENTER

Hi,

ich habe mal eine Frage zu einem Switch-Case Konstrukt, indem man die ENTER-Taste vorbringt.

Hier ein Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
switch (name)
{
   case ('ENTER'):
   {
       MachDas ();
   }
}


Jetzt meine Frage:

Ist es möglich die ENTER-Taste so in das case einzubinden, oder funktioniert das nicht?

Ich bin dankbar für jede Antwort!

mfg denjo

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

2

04.03.2007, 17:00

Prinzipiell schon, aber es kommt auf den Datentyp der Taste an, der abgefragt werden soll.

denjo

Treue Seele

  • »denjo« ist der Autor dieses Themas

Beiträge: 163

Wohnort: BLB

  • Private Nachricht senden

3

04.03.2007, 17:11

Aso...wie könnte man das dann machen?

Sheddex

unregistriert

4

04.03.2007, 17:40

Ist das Ganze in der Konsole?

5

04.03.2007, 17:48

Es können nur integrale datentypen in einer switch-case Kontruktion platzfinden.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

denjo

Treue Seele

  • »denjo« ist der Autor dieses Themas

Beiträge: 163

Wohnort: BLB

  • Private Nachricht senden

6

04.03.2007, 19:26

@DragonFlame:

Ja, ich hatte vor es in der Konsole vorzubringen!

@Deviloper:

Was sind "integrale Datentypen"?

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

7

04.03.2007, 19:46

integrale Datentypen sind Ganzzahl-Datentypen, also char, short, int, long, ...
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

Sheddex

unregistriert

8

04.03.2007, 19:53

Vielleicht kennst du ja GetAsyncKeyState aus der WINAPI. Damit kann man eine Taste abfragen die gerade gedrückt ist.

Wenn du die Funktion jetzt allerdings in der Konsole benutzt wird sie wahrscheinlich nicht funktionieren, da du genau dann drücken müsstest wenn das Programm an dieser Stelle ist (In der Konsole programmiert man ja in der Regel linear und hat keinen Loop).

Setze deshalb ein _getch() davor, _getch() wartet bis irgend eine Taste gedrückt wurde. Wenn direkt danach GetAsyncKeyState folgt wird es auch ausgewertet:

C-/C++-Quelltext

1
2
3
4
_getch(); //aus conio.h


if (GetAsyncKeyState(VK_RETURN)) //aus windows.h

 //Die Taste wurde gedrückt


Wenn du das jetzt mit switch machen möchtest kommst du wahrscheinlich um eine eigene Funktion nicht herum:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
enum KEY
{
   KEY_RETURN,
   KEY_ESCAPE
};

KEY Input(void)
{
   _getch();

   if (GetAsyncKeyState(VK_RETURN)) return KEY_RETURN;
   if (GetAsyncKeyState(KEY_ESCAPE)) return KEY_ESCAPE;
}


So wird das dann verwendet:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
switch(Input())
{
   case KEY_RETURN:
   {
      //Enter wurde gedrückt

   } break;

   default: break;
}


Man kann hie sicher noch das ein oder andere verbessern, funktionieren tut es aber auf jedenfall. Vielleicht weiß ja jemand noch eine schönere Lösung bei der man selbst nicht so viel schreiben muss...

Falls du mehr Tasten brauchst suche mal in der MSDN nach "Virtual Key Codes".

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

04.03.2007, 20:22

ich denke damit gehts auch.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
while(!_kbhit());

switch(tolower(_getch()))
{
    case 'a':
        // ...

        break;

    case '\n':
        //...

}

denjo

Treue Seele

  • »denjo« ist der Autor dieses Themas

Beiträge: 163

Wohnort: BLB

  • Private Nachricht senden

10

04.03.2007, 20:22

@big_muff:

Danke für deine Antwort!


@DragonFlame:

Danke auch dir, das hat mir weitergeholfen...probiere es dann aus!
thx

mfg denjo

Werbeanzeige