Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

The goal is to simulate the foundation of the components of the game MasterMind

ID: 3588976 • Letter: T

Question

The goal is to simulate the foundation of the components of the game MasterMind by creating a Codemaker, Codebreaker, and the Game; this includes:

Allow the code breaker to attempt guessing the secret code.

Have the code maker respond to the code breaker’s attempt.

If the correct color is in the correct position, the code maker’s response should include a red peg

If the correct color is in the wrong position, the code maker’s response should include a white peg

If the color is not correct no pegs are used

Red pegs are presented first, then the white pegs

Limit the number of attempts to 10 guesses, if the code breaker guesses the code, they win the game, if the code breaker does not guess the code within 10 guesses, they lose the game.

Rubric

Activity

MasterMind project

MasterMind class

Constants package

Constants class

core package

Codebreaker class

Remove previous data stored in member variable codebreakerAttempt (Hint: class ArrayList has a handy method . removeAll())

Instantiate an instance of class Scanner to take input from the console

System.out.println(" Enter your colors in left to right order " +

            "Use BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:");

Output to the console the selected color

Add the color to the member variable codebreakerAttempt

If the size of the codebreakerAttempt is less than the max pegs specified in our Constants.java file then add a prompt to enter for the user their next color

Using an enhanced for loop output to the console the codebreaker’s attempt

Update method getCodebreakerAttempt() to call method consoleAttempt()

Codemaker class

Update method signature checkAttemptedCode () to match the modified method signature in interface ICodemaker

Create local variables to store the number of red and white pegs scored by the codebreaker

Create a local variable to store which pegs have been evaluated of the codebreaker’s guess

Create a local variable to convert the secret code Set member variable to an ArrayList object

If true, then red pegs should equal 4

If true, then white pegs should equal 0

If true, increment the red peg counter

Add the codebreaker’s guess at this index to the Set that stores the evaluated pegs

If true, then increment the white pegs counter

Add the current index of the codebreaker’s attempt to the ArrayList that stores the evaluated pegs

For each red peg, add to the member variable codemakerResponse Color.RED

For each white peg, add to the member variable codemakerResponse Color.WHITE

Red is always first, then white!

Use an enhanced for loop to output to the console the codemaerker’s response

Game class

Call method play()

Instantiate an instance of class ArrayList specified as using class Color, set equal to calling method getCodebreakerAttempt() in class Codebreaker

Call method checkAttemptedCode() in class Codemaker, passing the local variable from step a. as an argument

Instantiate an instance of class ArrayList specified as using class Color, set equal to calling method getCodemakerResponse () in class Codemaker

Use an enhanced for loop to output to the console the codemaker’s response for each codebreaker’s attempt

ICodebreaker interface

ICodemaker interface

Add parameter ArrayList<Color> attempt to the method signature

IGame interface

userInterface package

MasterMindUi class

MasterMind application

Test Case 1

Test Case 1 passes – regression testing

Source compiles with no errors

Source runs with no errors

Source includes comments

=========================================================================

Current Code

=========================================================================

Constants,java

================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package constants;

import java.awt.Color;
import java.util.ArrayList;
import java.util.Arrays;


public class Constants
{
// peg color options
public static final ArrayList<Color> codeColors = new ArrayList<Color>(Arrays.asList(Color.BLUE,
Color.BLACK, Color.ORANGE, Color.WHITE,
Color.YELLOW, Color.RED, Color.GREEN, Color.PINK));
  
// response color options
public static final ArrayList<Color> responseColors = new ArrayList<Color>(Arrays.asList(Color.RED, Color.WHITE));
  
public static final int MAX_ATTEMPTS = 10;
  
public static final int MAX_PEGS = 4;
  
public static final int COLORS = 8;
  
}

================================================================================

Codebreaker.java

==================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package core;

import java.awt.Color;
import java.util.ArrayList;
import constants.Constants;


public class Codebreaker implements ICodebreaker
{
// member variables
private ArrayList<Color> codebreakerAttempt;
  
public Codebreaker()
{
// instanatiate the member variables
codebreakerAttempt = new ArrayList();
}
  
/**
* @return the codebreakerAttempt
*/
public ArrayList<Color> getCodebreakerAttempt()
{
return codebreakerAttempt;
}

/**
* @param codebreakerAttempt the codebreakerAttempt to set
*/
public void setCodebreakerAttempt(ArrayList<Color> codebreakerAttempt)
{
this.codebreakerAttempt = codebreakerAttempt;
}
  
public void checkCode(ArrayList<Color> attempt)
{
  
}

}

========================================================================

Codemaker.java

=====================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package core;

import constants.Constants;
import java.awt.Color;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class Codemaker implements ICodemaker
{
// member variables
private Set<Color> secretCode;
private ArrayList<Color> codemakerResponse;
  
public Codemaker()
{
// instantiate the member variable objects
secretCode = new HashSet();
codemakerResponse = new ArrayList();
  
// call the method to generate the secret code
generateSecretCode();
}
  
public void generateSecretCode()
{
Random random = new Random();
  
//randomly select four of the eight colors to be the secret code, only
// use each color once
while(secretCode.size() < Constants.MAX_PEGS)
{
// randomly select an index into the ArrayList of the 8 Colors
int index = random.nextInt(Constants.COLORS);
  
// get that color from the ArrayList of colors
Color selectedColor = Constants.codeColors.get(index);
  
// add it to the Set
secretCode.add(selectedColor);
}
  
System.out.println("generated the secret code! ");
  
for(Color color : secretCode)
{
System.out.println(color.toString());
}
  
}
  
public void checkAttemptedCode()
{
  
}

/**
* @return the secretCode
*/
public Set<Color> getSecretCode()
{
return secretCode;
}

/**
* @param secretCode the secretCode to set
*/
public void setSecretCode(Set<Color> secretCode)
{
this.secretCode = secretCode;
}

/**
* @return the codemakerResponse
*/
public ArrayList<Color> getCodemakerResponse()
{
return codemakerResponse;
}

/**
* @param codemakerResponse the codemakerResponse to set
*/
public void setCodemakerResponse(ArrayList<Color> codemakerResponse)
{
this.codemakerResponse = codemakerResponse;
}
  
  
}

===============================================================

Game.java

=============

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package core;

public class Game implements IGame
{
private int attempt;
private Codebreaker codebreaker;
private Codemaker codemaker;
  
public Game()
{
// instantiate the instances of the member variables
codemaker = new Codemaker();
codebreaker = new Codebreaker();
attempt = 0;
}
  
public void play()
{
  
}

/**
* @return the attempt
*/
public int getAttempt() {
return attempt;
}

/**
* @param attempt the attempt to set
*/
public void setAttempt(int attempt) {
this.attempt = attempt;
}

/**
* @return the codebreaker
*/
public Codebreaker getCodebreaker() {
return codebreaker;
}

/**
* @param codebreaker the codebreaker to set
*/
public void setCodebreaker(Codebreaker codebreaker) {
this.codebreaker = codebreaker;
}

/**
* @return the codemaker
*/
public Codemaker getCodemaker() {
return codemaker;
}

/**
* @param codemaker the codemaker to set
*/
public void setCodemaker(Codemaker codemaker) {
this.codemaker = codemaker;
}
}

=========================================================================

ICodebreaker.java

=================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package core;

import java.awt.Color;
import java.util.ArrayList;


public interface ICodebreaker
{
public void checkCode(ArrayList<Color> attempt);
}

======================================================================

ICodemaker.java

======================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package core;


public interface ICodemaker
{
  
public void generateSecretCode();
public void checkAttemptedCode();
}

=========================================================================

IGame.java

=====================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package core;

/**
*
* @author kwhiting
*/
public interface IGame
{
public void play();
}

=====================================================================

MasterMind.java

======================

/*
* Karin Whiting
* COP 3330 Object Oriented Programming
* University of Central Florida
*/
package mastermind;

import core.Game;
import javax.swing.JOptionPane;
import userinterface.MasterMindUi;


public class MasterMind
{

/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
System.out.println("Welcome to MasterMind!");
JOptionPane.showMessageDialog(null, "Let's Play MasterMind!");
Game game = new Game();
//MasterMindUi ui = new MasterMindUi(game);
}
  
}

==================================================================

MasterMindUi.java

=====================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package userinterface;

import core.Game;
import constants.Constants;


public class MasterMindUi
{
private Game game;
  
public MasterMindUi(Game game)
{
this.game = game;
initComponents();
}
  
private void initComponents()
{
  
}
}

===============================================================

Activity

MasterMind project

MasterMind class

Constants package

Constants class

core package

Codebreaker class

Add private method consoleAttempt() that will allow for backend testing of the logic, it shall do the following:

Remove previous data stored in member variable codebreakerAttempt (Hint: class ArrayList has a handy method . removeAll())

Instantiate an instance of class Scanner to take input from the console

Prompt the user to enter their guess, my implementation was as follows:

System.out.println(" Enter your colors in left to right order " +

            "Use BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:");

Loop until the user enters four valid colors with no duplicatesInstantiate an instance of class String set equal to Scanner’s method next()Evaluate the user’s input (Hint: recommend using either String method .toUpperCase() or .toLowerCase() to alleviate issues with case sensitivity)If the entered color matches one of the eight valid colors of the game, do the following:

Output to the console the selected color

Add the color to the member variable codebreakerAttempt

If the size of the codebreakerAttempt is less than the max pegs specified in our Constants.java file then add a prompt to enter for the user their next color

Using an enhanced for loop output to the console the codebreaker’s attempt

Update method getCodebreakerAttempt() to call method consoleAttempt()

Codemaker class

Update method signature checkAttemptedCode () to match the modified method signature in interface ICodemaker

Implement method checkAttemptedCode() to do the following:

Create local variables to store the number of red and white pegs scored by the codebreaker

Create a local variable to store which pegs have been evaluated of the codebreaker’s guess

Create a local variable to convert the secret code Set member variable to an ArrayList object

Check if the codebreaker’s guess is exactly equal to the codemaker’s attempt (Hint: class ArrayList has a handy method .equals())

If true, then red pegs should equal 4

If true, then white pegs should equal 0

If item d. fails, then determine which pegs are the correct color in the correct position or the correct color in the wrong positionLoop through the max pegs as defined in our Constants.java classCheck if a correct color is in the correct position by comparing index to index of the two ArrayLists representing the secret code and the codebreaker’s guess

If true, increment the red peg counter

Add the codebreaker’s guess at this index to the Set that stores the evaluated pegs

Use an enhanced for loop using the codebreaker’s attempt as the collection objectCheck if the secret code ArrayList contains the current element of the codebreaker’s attempt (Hint: class ArrayList has a handy method .contains())Loop through the max pegs as defined in our Constants.java classCheck if the secret code ArrayList is NOT equal to the codebreaker’s attempt at the specific index AND the secret code ArrayList contains the codebreaker’s attempt at the specific index AND the pegs evaluated Set does NOT include the current codebreaker’s attempt at the specific index

If true, then increment the white pegs counter

Add the current index of the codebreaker’s attempt to the ArrayList that stores the evaluated pegs

Evaluate the red and white peg counters to populate the codemaker’s response

For each red peg, add to the member variable codemakerResponse Color.RED

For each white peg, add to the member variable codemakerResponse Color.WHITE

Red is always first, then white!

Use an enhanced for loop to output to the console the codemaerker’s response

Game class

Modify custom constructor

Call method play()

Method play()Loop for the max number of attempts as defined in our Constants.java class AND the codebreaker hasn’t guessed the secrete code

Instantiate an instance of class ArrayList specified as using class Color, set equal to calling method getCodebreakerAttempt() in class Codebreaker

Call method checkAttemptedCode() in class Codemaker, passing the local variable from step a. as an argument

Instantiate an instance of class ArrayList specified as using class Color, set equal to calling method getCodemakerResponse () in class Codemaker

Use an enhanced for loop to output to the console the codemaker’s response for each codebreaker’s attempt

ICodebreaker interface

ICodemaker interface

Modify method signature public void checkAttemptedCode()

Add parameter ArrayList<Color> attempt to the method signature

IGame interface

userInterface package

MasterMindUi class

MasterMind application

Test Case 1

Test Case 1 passes – regression testing

Source compiles with no errors

Source runs with no errors

Source includes comments

Explanation / Answer

package constants;

import java.awt.Color;
import java.util.ArrayList;
import java.util.Arrays;


public class Constants
{
// peg color options
public static final ArrayList<Color> codeColors = new ArrayList<Color>(Arrays.asList(Color.BLUE,
Color.BLACK, Color.ORANGE, Color.WHITE,
Color.YELLOW, Color.RED, Color.GREEN, Color.PINK));
  
// response color options
public static final ArrayList<Color> responseColors = new ArrayList<Color>(Arrays.asList(Color.RED, Color.WHITE));
  
public static final int MAX_ATTEMPTS = 10;
  
public static final int MAX_PEGS = 4;
  
public static final int COLORS = 8;
  
}

================================================================================

Codebreaker.java

==================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package core;

import java.awt.Color;
import java.util.ArrayList;
import constants.Constants;


public class Codebreaker implements ICodebreaker
{
// member variables
private ArrayList<Color> codebreakerAttempt;
  
public Codebreaker()
{
// instanatiate the member variables
codebreakerAttempt = new ArrayList();
}
  
/**
* @return the codebreakerAttempt
*/
public ArrayList<Color> getCodebreakerAttempt()
{
return codebreakerAttempt;
}

/**
* @param codebreakerAttempt the codebreakerAttempt to set
*/
public void setCodebreakerAttempt(ArrayList<Color> codebreakerAttempt)
{
this.codebreakerAttempt = codebreakerAttempt;
}
  
public void checkCode(ArrayList<Color> attempt)
{
  
}

}

========================================================================

Codemaker.java

=====================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package core;

import constants.Constants;
import java.awt.Color;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class Codemaker implements ICodemaker
{
// member variables
private Set<Color> secretCode;
private ArrayList<Color> codemakerResponse;
  
public Codemaker()
{
// instantiate the member variable objects
secretCode = new HashSet();
codemakerResponse = new ArrayList();
  
// call the method to generate the secret code
generateSecretCode();
}
  
public void generateSecretCode()
{
Random random = new Random();
  
//randomly select four of the eight colors to be the secret code, only
// use each color once
while(secretCode.size() < Constants.MAX_PEGS)
{
// randomly select an index into the ArrayList of the 8 Colors
int index = random.nextInt(Constants.COLORS);
  
// get that color from the ArrayList of colors
Color selectedColor = Constants.codeColors.get(index);
  
// add it to the Set
secretCode.add(selectedColor);
}
  
System.out.println("generated the secret code! ");
  
for(Color color : secretCode)
{
System.out.println(color.toString());
}
  
}
  
public void checkAttemptedCode()
{
  
}

/**
* @return the secretCode
*/
public Set<Color> getSecretCode()
{
return secretCode;
}

/**
* @param secretCode the secretCode to set
*/
public void setSecretCode(Set<Color> secretCode)
{
this.secretCode = secretCode;
}

/**
* @return the codemakerResponse
*/
public ArrayList<Color> getCodemakerResponse()
{
return codemakerResponse;
}

/**
* @param codemakerResponse the codemakerResponse to set
*/
public void setCodemakerResponse(ArrayList<Color> codemakerResponse)
{
this.codemakerResponse = codemakerResponse;
}
  
  
}

===============================================================

Game.java

=============

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package core;

public class Game implements IGame
{
private int attempt;
private Codebreaker codebreaker;
private Codemaker codemaker;
  
public Game()
{
// instantiate the instances of the member variables
codemaker = new Codemaker();
codebreaker = new Codebreaker();
attempt = 0;
}
  
public void play()
{
  
}

/**
* @return the attempt
*/
public int getAttempt() {
return attempt;
}

/**
* @param attempt the attempt to set
*/
public void setAttempt(int attempt) {
this.attempt = attempt;
}

/**
* @return the codebreaker
*/
public Codebreaker getCodebreaker() {
return codebreaker;
}

/**
* @param codebreaker the codebreaker to set
*/
public void setCodebreaker(Codebreaker codebreaker) {
this.codebreaker = codebreaker;
}

/**
* @return the codemaker
*/
public Codemaker getCodemaker() {
return codemaker;
}

/**
* @param codemaker the codemaker to set
*/
public void setCodemaker(Codemaker codemaker) {
this.codemaker = codemaker;
}
}

=========================================================================

ICodebreaker.java

=================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package core;

import java.awt.Color;
import java.util.ArrayList;


public interface ICodebreaker
{
public void checkCode(ArrayList<Color> attempt);
}

======================================================================

ICodemaker.java

======================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package core;


public interface ICodemaker
{
  
public void generateSecretCode();
public void checkAttemptedCode();
}

=========================================================================

IGame.java

=====================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package core;

/**
*
* @author kwhiting
*/
public interface IGame
{
public void play();
}

=====================================================================

MasterMind.java

======================

/*
* Karin Whiting
* COP 3330 Object Oriented Programming
* University of Central Florida
*/
package mastermind;

import core.Game;
import javax.swing.JOptionPane;
import userinterface.MasterMindUi;


public class MasterMind
{

/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
System.out.println("Welcome to MasterMind!");
JOptionPane.showMessageDialog(null, "Let's Play MasterMind!");
Game game = new Game();
//MasterMindUi ui = new MasterMindUi(game);
}
  
}

==================================================================

MasterMindUi.java

=====================

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package userinterface;

import core.Game;
import constants.Constants;


public class MasterMindUi
{
private Game game;
  
public MasterMindUi(Game game)
{
this.game = game;
initComponents();
}
  
private void initComponents()
{
  
}
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote