Frage von EGitarre, 25

Java Neuling - Wie Tastaturabfrage beenden/einschränken?

Hallo! Wir sollen in unserer Ausbildung nach einer Woche Java Seminar nun ein kleines Projekt machen mit Java, bei dem wir so ziemlich alles machen dürfen. Unsere Gruppe programmiert ein kleines Spiel, das klappt soweit auch super, gab zwar ein paar schwierigkeiten mit manchen befehlen am anfang, aber es läuft jetzt soweit.

Eine Sachen, die eher Schönheitsfehler als Bug ist, stört uns aber noch: Das Spiel wertet mit einem KeyListener Tastatureingaben aus, und entscheidet danach, wer gewinnt. Danach wird in der Mitte des Fensters auch angezeigt, wer gewonnen hat oder ob unendschieden ist, und dann kann man über 2 Buttons entweder nochmal spielen oder zurück ins Hauptmenü. Wenn jetzt aber die Spielrunde mit dieser Siegesnachricht eigentlich zuende ist, kann man immer noch andere Tasten drücken, wodurch das Ergebnis dann natürlich wieder anders ausfällt. Welche Möglichkeiten fallen euch ein, um das zu unterbinden? Kann man irgendwie den KeyListener/actionListener temporär deaktiveren (wenn ja, dann auch nur für bestimmte Tasten oder nur die komplette Tastatur?) oder kann man das anders verhindern, dass die Auswertung der Tasten immer weiter läuft?

Kann leider den Code nicht posten, da der sich nur auf dem Rechner in der Firma befindet....

Danke für alle Tipps

Expertenantwort
von KnusperPudding, Community-Experte für Java, 11

Das dürfte sich relativ leicht über eine Boolean-Variable steuern lassen, die ihr in eurem Spiel deklariert.

boolean keysEnabled;

zu spielbeginn setzt ihr die Variable auf true;

void gameStart() {
   keysEnabled = true;
}

ist das Spiel vorbei:

void gameOver() {
  keysEnabled = false;
}

in eurem Keylistener überprüft ihr ob die Variable wahr ist, um eure Aktion durch zu führen:

new Keylistener() {

  @Override
  public void keyPressed(KeyEvent e) {
     if (keysEnabled) {
        // hier deine Steuerung
     }
  }
}
Antwort
von Copyyy, 23

Setzt doch eine Variable, die ihr im listener abfragt und wenn sie einen bestimmten Wert hat, wird einfach nichts ausgeführt..

Antwort
von BottmSky, 14

Also Ich finde solche Spiele nicht passend wenn man sich was aussuchen darf.

Das liegt daran, dass man besonders bei solchen kleinen Spielen kaum etwas lernt.
Erstens ist die Vorgehensweise bei richtiger Spieleprogrammierung eine komplett andere als die die Ihr vmtl eingeschlagen seid (Gameloop mit vsync etc) und zweitens ist es an sich finde ich unpassend weil so ein Spiel meist nur etwas mathe kentnisse und etwas umgang mit klassen benötigt (kleines spiel).

Ich hätte soetwas wie z.B. ein Verwaltungssoftware für was auch immer oder sogar ein einfacher Chat (mit einem eigenen Protokoll) wo man halt auch sieht dass man zumindest etwas Ahnung von theoretischen Konzepten hat (wenn man bspweise die protokoll syntaxverifizierung mit Automaten implementiert)

Keine passende Antwort gefunden?

Fragen Sie die Community