Mastermind游戏算法

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

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

  • 通过显示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类)。

祝你好运!

  1. 软件工程提示:不要将所有代码放在一个main方法中,为特定任务创建方法(例如,询问用户选择,打印板,计算答案等)。 然后,您将能够一次调试这些单独的任务。

  2. 生成随机数时,由于Math.random()生成浮点数0.0 <= r <1.0(不包括),因此整个表达式(int) (Math.random() * nums.length)将生成一个从0到0的整数7.添加一个使其在1-8范围内。