0

我正在制作一个非常基本的基于 Java 的 RPG 游戏,其中包含许多选项,我想制作它,以便当您能够输入时,如果您按“x”,它将自动退出游戏。我不想在每次用户进步时不断添加“if-then”语句。

我不想做的事情:(我必须这样做超过 50 次:库存、退出游戏、角色信息等等)

switch (choice1)
  {
     case "x":
        System.out.println("\nYou quit the game!");
        System.exit(0);
        break;  
     }    

我有什么:(不起作用)

import java.util.Scanner;
import java.awt.*;
import java.awt.event.*;


public class TheDungeon extends KeyAdapter
{
    public void keyPressed(KeyEvent e) {
        char ch = e.getKeyChar();
        if (ch == 'a')
        {
        System.out.println("You pressed A"); 
        }    
    }   
    public static void main(String[] args)
    {
    /* My variables...

    */
    System.out.println("e: Check experience and level");
    System.out.println("c: Character Information");
    System.out.println("i: Inventory");
    System.out.println("x: Quit Game");
    choice1 = keyboard.nextLine();
    switch (choice1)
        {
        case "x":                                         //This section
            System.out.println("\nYou quit the game!");   //here works
            System.exit(0);                               //but I don't
        break;                                            //want to add this section
    }                                                     //every time the user
                                                          //progresses.
4

2 回答 2

0

KeyAdapter 类适用于 GUI 应用程序(注意它所在的 AWT 包),听起来您只是在做一个控制台应用程序。据我所知,控制台应用程序没有“按键”侦听器。

我建议将 switch 语句放在诸如“determineAction”之类的方法中,然后返回您需要的内容(如果有的话)。

示例方法:

    private void determineAction(char choice) {
       switch (choice1)
       {
         case "x":                                        
             System.out.println("\nYou quit the game!");   
             System.exit(0);                               
         break;
         case "i":                                        
             System.out.println("\nInventory Items:");   
             System.out.println("\n  Things are here");                                  
         break;                                      
       }
    }

所以每次你要求选择之后,把这行——

    determineAction(choice);

它会运行 switch 语句,而无需您每次都复制它。

于 2013-09-04T21:04:33.137 回答
0

要使用KeyAdapters和/或KeyListeners您将需要构建一个 Gui 来添加这些适配器/侦听器。

您当前在用户操作中阅读的方式是对控制台应用程序执行此操作的有效方式。

编辑扩展 BlakeP 的答案,如果你有你的determineAction方法,你可以有一个你打印出来的文本的 Map,那么你只需要为键添加特殊操作。

Map<Character, String> actionText = new HashMap<Character, String>();

actionText.put('x', "\nYou quit the game!");
actionText.put('i', "\nInventory Items:\n  Things are here");


private void determineAction(char choice) {
   System.out.println(actionText.get(choice));
   switch (choice1)
   {
     case "x":                                        
         System.exit(0);                               
     break;                                    
   }
}

或者您应该有另一种方法来执行每个特殊操作,这将使您的切换更短且更易于阅读。像这样

private void determineAction(char choice) {
   System.out.println(actionText.get(choice));
   switch (choice1)
   {
     case "x":                                        
         doExit();                              
         break;                                    
     case "i":
         printInventory();
         break;

   }
}

private void doExit()
{
    System.out.println("\nYou quit the game!");
    System.exit(0);
}

private void printInventory()
{
    System.out.println("\nInventory Items:");
    System.out.println("\n  Things are here");
}
于 2013-09-04T20:51:47.757 回答