java - Mastermind 博弈算法

标签 java arrays

我必须为一项任务制作策划游戏。我被困在接受用户输入并需要将它们与随机数进行比较的部分。然后我需要将(用户输入)数字放在网格上的正确位置(自下而上)。

此外,我必须显示数字是否为:

  • 通过显示 4 在正确的位置,
  • 通过显示 2,正确但错误的位置,
  • 显示 0 是错误的

此外,我需要不断询问用户输入,直到他们达到最大尝试次数 10 或猜出正确答案为止。


这是我的代码

...
        public static void main(String[] args) {

             PlayMasterMind.computerNum();
             PlayMasterMind.printBoard();
             PlayMasterMind.userInput();
             PlayMasterMind.compare();
            }

        public void printBoard(){
            System.out.println(" _______________________");
            System.out.println("|  " + gotIt + "  |  " + gotIt + "  |  " + gotIt + "  |  " + gotIt + "  |  ");
            System.out.println(" _______________________    ____");
            for (j = 0; j < 10; j++) {
                for (int k = 0; k < 4; k++) {
                    guess[j][k] = "    ";
                    answer[k] = " ";
                }
                System.out.println("| " + guess[j][0] + "| " + guess[j][1] + "| " + guess[j][2] + "| "
                        + guess[j][3] + "|==|" + answer[0] + answer[1] + answer[2] + answer[3]
                        + "|");
                System.out.println(" _______________________    ____");
            }     
}



    }

我在上一节中遇到问题,我需要将用户输入自下而上地放入网格中。

此时我得到的是:

输入4个数字:2342


| 2342 | 2342 | 2342 | 2342 | ____________________________ ____ | | | | |==| | ____________________________ ____ | | | | |==| | __________________________________
...

但我实际上需要以下顺序的数字:

  • <强>| 2 | 3 | 4 | 2|

如果这些是正确的数字。我想通过以下方式输出它们:

  • <强>| 2 | 3 | 4 | 2|==|4444|

如果 1 个数字错误,则 2 个数字正确且位置正确,1 个正确但位置错误(正确和错误的数字顺序无关紧要。说如果正确的数字 2342,但是用户输入1242)然后我会这样显示:

  • <强>| 2 | 3 | 4 | 2|==|4420|

但不要在下面的框中得到任何东西。它不断覆盖“X”或“X”位置的信息。

如有任何帮助,我们将不胜感激。

提前致谢!!!

最佳答案

为了找出您代码中的问题,我将其粘贴到我的编辑器中并尝试编译它。我还重新格式化它以使其更清晰。这是我得到的

class Test73 {
  public static final int MAX_GUESSES = 10;
  public static final int NB_COLUMNS= 4;
  private String guess[][];
  private String answer[];
  private String gotIt;

  public static void main(String[] args) {
    Test73 t = new Test73();
  }

  public Test73() {
    gotIt = " ";   // should probably be an array? 
    guess = new String[MAX_GUESSES][NB_COLUMNS];
    answer = new String[NB_COLUMNS];
    printBoard();
  }

  public void printBoard() {
    System.out.println(" _______________________");
    System.out.println(   // assumes gotIt to be of length 1
      "|  " + gotIt +
      "  |  " + gotIt +
      "  |  " + gotIt +
      "  |  " + gotIt +
      "  |  ");
    System.out.println(" _______________________    ____");
    for (int j = 0; j < MAX_GUESSES; j++) {
      for (int k = 0; k < NB_COLUMNS; k++) {
        guess[j][k] = "    ";
        answer[k] = " ";
      }
      System.out.println(
        "| " + guess[j][0] +
        "| " + guess[j][1] +
        "| " + guess[j][2] +
        "| " + guess[j][3] +
        "|==|" + answer[0] +
        answer[1] +
        answer[2] +
        answer[3] + "|");
      System.out.println(" _______________________    ____");
    }
  }
}

我编译并运行了它。这是我得到的

 _______________________
|     |     |     |     |  
 _______________________    ____
|     |     |     |     |==|    |
 _______________________    ____
|     |     |     |     |==|    |
 _______________________    ____
|     |     |     |     |==|    |
 _______________________    ____
|     |     |     |     |==|    |
 _______________________    ____
|     |     |     |     |==|    |
 _______________________    ____
|     |     |     |     |==|    |
 _______________________    ____
|     |     |     |     |==|    |
 _______________________    ____
|     |     |     |     |==|    |
 _______________________    ____
|     |     |     |     |==|    |
 _______________________    ____
|     |     |     |     |==|    |
 _______________________    ____

这里有一些观察

  1. gotIt 变量应该是一个数组,否则您将只能打印四次相同的值。

  2. 在打印表格之前,guessanswer 的值被设置为空字符串。虽然在游戏开始时还可以,但以后就不行了。这应该出现在您程序的其他地方(在初始化部分)。

  3. 重要提示:Test 类只是为了测试这部分程序而创建的,它不会出现在您的最终程序中。对程序的其他部分执行相同的操作(您可以重新使用 Test 类)。

祝你好运!

关于java - Mastermind 博弈算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35964732/

相关文章:

c++ - 使用不同线程访问不同子数组而不同步是否安全?

python - 如何检查 JSON 数组中是否存在值并继续循环

java - 为什么我不能在 Maven 中构建 jar

java - Spring用单线程池并发处理多个队列

c - 打印结构数组

javascript - 如何使用 "this"关键字来调用

java - 搜索数组中的单词

java - Eclipse Runnable JAR 文件导出失败。未选择资源

Java 8 List<V> 到 Map<K, V> 与函数

javascript - 如何在 TypeScript 中初始化(声明)数组?