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(" _______________________ ____"); } } }
我编译并运行它。 这就是我得到的
_______________________ | | | | | _______________________ ____ | | | | |==| | _______________________ ____ | | | | |==| | _______________________ ____ | | | | |==| | _______________________ ____ | | | | |==| | _______________________ ____ | | | | |==| | _______________________ ____ | | | | |==| | _______________________ ____ | | | | |==| | _______________________ ____ | | | | |==| | _______________________ ____ | | | | |==| | _______________________ ____ | | | | |==| | _______________________ ____
以下是一些观察结果
-
变量
gotIt
应该是一个数组,否则你只能打印四次相同的值。 -
在打印表之前,
guess
和answer
的值设置为空字符串。 虽然在游戏开始时它是可以的,但它不会在以后。 这应该出现在程序的其他地方(在初始化部分)。 -
重要提示:类
Test
仅用于测试程序的这一部分,它不会出现在您的最终程序中。 对程序的其他部分执行相同的操作(可以重新使用Test类)。
祝你好运!
-
软件工程提示:不要将所有代码放在一个
main
方法中,为特定任务创建方法(例如,询问用户选择,打印板,计算答案等)。 然后,您将能够一次调试这些单独的任务。 -
生成随机数时,由于
Math.random()
生成浮点数0.0 <= r <1.0(不包括),因此整个表达式(int) (Math.random() * nums.length)
将生成一个从0到0的整数7.添加一个使其在1-8范围内。