Question
I am working on a number guessing game in java. The goal of this game is to guess a 4-digit number according to the game
I am working on a number guessing game in java.
The goal of this game is to guess a 4-digit number according to the game rules. There are a host and a player. The project is designed such that the computer can be either the host or the player. The game works as follows:
1. The host picks a 4-digit number (i.e. any number between 1000 and 9999). Lets call this the base number. In the following example, let's pick 5432 as the base number.
2. The player takes a guess, for example, 1234.
3. The host tells the player how many digits of the guess number match the base number. A match is defined as the same digit in the same position. For example, 1234 and 5432 have 1 match (at position 3); 2345 and 5432 have 0 match even though its the same set of digits, none matches in the exact same position.
4. Based on the number of matches, the player performs some update and takes another guess, say 5533.
5. The host again tells the player the number of matches. This time, 5533 and 5432 have 2 matches.
6. Repeat steps 4 and 5 until the game is over. The game is over when the host tells the player that all 4 digits are matched. Therefore the player has found the base number.
I finished it but when I tried to check it with PlayGame.java, the priorGuesses() method had some problems. It should return all the prior guesses as an int array but all it returned are a bunch of 0 except the first one which returned 1000.
Here is my code(ArrayGame.java):
package guessme;
/**
* An Array-based implementation of the Guess-A-Number game
*/
public class ArrayGame {
// stores the next number to guess
private int guess;
private boolean[] guessArray;
private int count;
private boolean gameOver;
private int bigger;
private int known;
private int lastGuess;
private int perm = 9*10*10*10;
// TODO: declare additional data members, such as arrays that store
// prior guesses, eliminated candidates etc.
// NOTE: only primitive type arrays are allowed, such as int[], boolean[] etc.
// You MAY NOT use any Collection type (such as ArrayList) provided by Java.
/********************************************************
* NOTE: you are allowed to add new methods if necessary,
* but DO NOT remove any provided method, otherwise your
* code will fail the JUnit tests!
* Also DO NOT create any new Java files, as they will
* be ignored by the autograder!
*******************************************************/
// ArrayGame constructor method
public ArrayGame() {
// TODO
guess = 1000;
guessArray = new boolean[perm];
count = 0;
gameOver = false;
bigger = 0;
known = 0;
lastGuess = 0;
for(int i=0;i guessArray[i] = false; } // Resets data members and game state so we can play again public void reset() { // TODO guess = 1000; guessArray = new boolean[perm]; count = 0; gameOver = false; bigger = 0; known = 0; lastGuess = 0; for(int i=0;i guessArray[i] = false; } // Returns true if n is a prior guess; false otherwise. public boolean isPriorGuess(int n) { // TODO return guessArray[n-1000]; } // Returns the number of guesses so far. public int numGuesses() { // TODO return count; } /** * Returns the number of matches between integers a and b. * You can assume that both are 4-digits long (i.e. between 1000 and 9999). * The return value must be between 0 and 4. * * A match is the same digit at the same location. For example: * 1234 and 4321 have 0 match; * 1234 and 1114 have 2 matches (1 and 4); * 1000 and 9000 have 3 matches (three 0's). */ public static int numMatches(int a, int b) { // DO NOT remove the static qualifier // TODO int result = 0; String aa = Integer.toString(a); String bb = Integer.toString(b); for(int i=0;i<4;i++) { if(aa.charAt(i)==bb.charAt(i)) { result++; } } return result; } /** * Returns true if the game is over; false otherwise. * The game is over if the number has been correctly guessed * or if all candidates have been eliminated. */ public boolean isOver() { // TODO return gameOver; } // Returns the guess number and adds it to the list of prior guesses. public int getGuess() { // TODO: add guess to the list of prior guesses. count++; guessArray[guess-1000]=true; return guess; } /** * Updates guess based on the number of matches of the previous guess. * If nmatches is 4, the previous guess is correct and the game is over. * Check project description for implementation details. * * Returns true if the update has no error; false if all candidates * have been eliminated (indicating a state of error); */ public boolean updateGuess(int nmatches) { // TODO if((nmatches-bigger)<=-2) return false; if(nmatches==4){ gameOver = true; return true; } bigger = Math.max(nmatches, bigger); if(nmatches==0){ guess += 1111; return true; } if (nmatches known += 1; guess = lastGuess; } lastGuess = guess; guess += Math.pow(10, known); return true; } // Returns the list of guesses so far as an integer array. // The size of the array must be the number of prior guesses. // Returns null if there has been no prior guess public int[] priorGuesses() { // TODO int history[] = new int[count]; int i = 0; if (count == 0) return null; for (int j=0;j if(guessArray[i]){ history[i] = i + 1000; i++; } } return history; } } Here is the PlayGame.java, this class is designed for you playing as a host and computer as a player. package guessme; import javax.swing.JOptionPane; public class PlayGame { // Computer as the player of the game public static void main(String[] args) { ArrayGame gamer = new ArrayGame(); JOptionPane.showMessageDialog(null, "Think of a number between 1000 and 9999. Click OK when you are ready...", "Let's play a game", JOptionPane.INFORMATION_MESSAGE); int guess=0, nmatches=0; while(!gamer.isOver()) { // take guess guess = gamer.getGuess(); String userInput = JOptionPane.showInputDialog("I guess your number is " + guess + ". How many digits are matched?"); if (userInput == null) System.exit(0); try { nmatches = Integer.parseInt(userInput.trim()); } catch(Exception exception) { JOptionPane.showMessageDialog(null, "Invalid. Please enter a number between 0 and 4", "Warning", JOptionPane.WARNING_MESSAGE); continue; } // the number of matches must be between 0 and 4 if (nmatches < 0 || nmatches > 4) { JOptionPane.showMessageDialog(null, "Invalid. Please enter a number between 0 and 4", "Warning", JOptionPane.WARNING_MESSAGE); continue; } // update based on user input if(gamer.updateGuess(nmatches)==false) { JOptionPane.showMessageDialog(null, "Something is wrong. I don't think your number exists...", "Mistake", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } } System.out.println("I got it. Your number was "+guess+"."); System.out.println("I did it in "+gamer.numGuesses()+" rounds. Here is the list of my guesses:"); for(int g : gamer.priorGuesses()) { System.out.print(g+" "); } System.out.println(""); } } Here is the HostGame.java, designed for you to play as a player and computer as a host. package guessme; import java.util.Random; import java.util.Scanner; public class HostGame { // Computer as the host of the game public static void main(String[] args) { Random rnd = new Random(); Scanner conIn = new Scanner(System.in); int groundtruth = rnd.nextInt(9000)+1000; System.out.println("I have thought of a number for you to guess. Let's play!"); int nguesses = 0; while(true) { // take guess System.out.print("What's your guess? Input a 4-digit integer: "); int guess; try { guess = conIn.nextInt(); } catch(Exception e) { conIn.nextLine(); System.out.println("Invalid input!"); continue; } if(guess<1000 || guess>9999) { System.out.println("Your number is out of range!"); continue; } nguesses ++; int nmatches = ArrayGame.numMatches(guess, groundtruth); if(nmatches==4) { System.out.print("You have won! "); break; } else { System.out.println("Almost there. Number of matches: "+nmatches); } } System.out.println("The number I had was "+groundtruth); System.out.println("You got it in "+nguesses+" rounds."); conIn.close(); } } Can someone tell me the reasons and a solution? Thanks.
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started