java - 创建一个基于文本的游戏,我被卡住了

标签 java

目前在游戏中,它会询问某些问题,例如,您是否收集了所有 key 、杀死了所有 Boss 等。 但是当它接近结尾时,它会询问“您想使用哪个键?”。它做得很好,但是一旦它到达门部分,它实际上并没有得到 key 的值,它只是输出 0

主要代码

public static int possibleKey()
{            
    SetnGet sng = new SetnGet();
    int keys;
    do
    {   
        System.out.println("Which key would you like to use?");
        keys = in.nextInt();
         }
     while(keys != 1 && keys != 2 && keys != 3);

    return keys;
}

public static int possibleLevel()
{
    SetnGet sng = new SetnGet();
    System.out.println("Which door would you like to enter? - 1, 2, 3 or 4");
    int level;  

    if(sng.accessibleKey() == 3)
    {
        do
        {   
            System.out.println("You have all three keys, you have complete access");
            level = in.nextInt();
        }
        while(level != 1 && level != 2 && level != 3);
    }
    else
    {
        do
        {   
            System.out.println("You have no level access");
            level = in.nextInt();
        }
        while(level != 1 && level != 2 && level != 3 && level != 4);

    }
    return level;
}

SetnGet类的设置和获取

private int possibleKey;
private int possibleLevel;

public int setPossibleKey()
{
    return possibleKey;
}

public void setPossibleKey(int possibleKey)
{
    this.possibleKey = possibleKey;
}

public int getPossibleLevel()
{
    return possibleLevel;
}

public void setPossibleLevel(int possibleLevel)
{
    this.possibleLevel = possibleLevel;
}

最佳答案

方法 possibleLevel() 创建了 SetnGet 类的一个实例 (SetnGet sng = new SetnGet();),紧接着, 读取实例的 int 类型字段 (sng.accessibleKey())。这样读取的结果当然是 0,因为这是 int 类字段的默认值,您永远不会为您的字段设置任何其他值。因此,您总是会转到 else 并看到“您没有级别访问权限”消息。

要解决此问题,您可以做的是将 SetnGet sng = new SetnGet();possibleLevel() 移动到类然后确保将 possibleKey() 调用的结果设置为它,如下所示:

public class Main {

    private static Scanner in = new Scanner(System.in);

    private static SetnGet sng = new SetnGet();

    public static void main(String[] args) {
        int selectedKey = possibleKey();
        sng.accessibleKey(selectedKey);
        int level = possibleLevel();
    }

    public static int possibleKey() {
        // your initial implementation of the method
    }

    public static int possibleLevel() {
        // your initial implementation of the method, but
        // without the "SetnGet sng = new SetnGet();" line
    }
}

SetnGet 类如下所示:

class SetnGet {

    private int accessibleKey;

    int accessibleKey() {
        return accessibleKey;
    }

    void accessibleKey(int accessibleKey) {
        this.accessibleKey = accessibleKey;
    }
}

这将解决您最初的问题。然后可以考虑进一步重构代码,例如使用方法参数(而不是共享类字段)在方法之间传递数据,去掉多余的 SetnGet sng = new SetnGet(); 行来自 possibleKey() 方法,等等。

关于java - 创建一个基于文本的游戏,我被卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47490537/

相关文章:

java - OrientDB 边缘类继承被忽略

java - Android - Java - 单击按钮时保存字符串

java - 是否可以使可序列化类的锁暂时存在?

java - 从 main 运行 boolean 方法

java - 在 Spring 中处理嵌套 REST 资源调用的更优雅的方式?

java - JPA @SequenceGenerator 注释如何工作

java - 在单独的 war 文件中的 portlet 之间共享 bean

java - java中通过多线程读写文件

java - Java 基本概念

java - eclipse java注解处理