Description
Objective
1. Learn how to write functions based upon well-defined pre-conditions and post-conditions.
2. Practice completing a program with multiple functions into a single application.
Problem: Mastermind
In the popular game Mastermind, one player creates a secret code of four pegs, each of which
can be chosen from one of six colors. (The number of pegs and colors may be different than this
in different versions, but your implementation will use these values, but be extendible, very
easily, to other values.
Also, a color can be reused, thus there really are six choices for each of
the four pegs.) The other player then has to guess the color of each peg, with the order mattering.
The player who made the secret code then has to give feed back to the player guessing. This
feedback is in the form of white and black pegs.
A black peg means that the guesser has chosen
the correct color in the correct slot. These are first “calculated” and awarded. Once these are
counted, these pegs are ignored. Then the white pegs are awarded. These are for pegs that are the
correct color but are in the incorrect slot.
There is no “double dipping” of pegs in the response,
so the sum total of white and black pegs the guesser can receive is four, and no one peg in the
guesser’s answer may earn them more than one black or one white peg.
Here is a picture of a Mastermind board:
A framework has been written for you to fill in. The main has been completed and nine functions
have been specified for you to fill in. Each function comes with a pre-condition and postcondition.
A function pre-condition is the set of specifications that must be satisfied in order to call the
function. If these conditions aren’t met, then the behavior of the function is unpredictable.
However, if the conditions are met, then the function must uphold the listed post-conditions. (For
example, if the sqrt function is given a positive real number, then it is required to return the
square root of that positive real number.) The post-condition explains what you must do in the
function while the pre-condition explains what you can assume without checking.
The most difficult function in the program is the numWrongPlaceMatches function. In this
function, comments have been left to discuss the various steps involved in solving the given task.
For the rest of the functions you must simply use the pre-conditions and post-conditions given to
write the function.
Input Specification
The user will always enter valid combinations, meaning they will always enter exactly four
integers in between 0 and 5, inclusive, separated by spaces.
Output Specification
A greeting will be printed in the beginning, exactly like the one printed in each of the samples.
From that point the program will respond to each guess with a statement of the following form:
You have X perfect matches and Y imperfect matches.
where X is the number of perfect matches (right color, right spot) and Y is the number of
imperfect matches (right color, wrong spot with no double counting).
At the end of the game, if the user wins, the number of guesses they needed as well as the
amount of time they took will be printed in the following format:
You have won the game in X turns and M:SS!!!
where X is the number of turns taken and M:SS is the amount of time in minutes and seconds.
Here is how you can print out a number (num, in this example) so that a zero precedes it if it’s
one digit long instead of two:
printf(“%02d”, num);
If the user loses, then a message stating so along with a printout of the correct game board will
be given using the following format:
Sorry, you have exceeded the maximum number of turns. You lose.
Here is the winning board: A B C D
where A, B, C and D are the numbers (in order) of the secret pegs.
Sample Run #1 (User Input in Bold)
Welcome to MasterMind!!!
At each turn, you will enter your guess for the playing board.
A valid guess ahs 4 values in between 0 and 5.
Each guess will have each number within the guess separated by a
space.
When you are ready, enter your first guess.
From that point on, you will be told how many perfect and
imperfect matches you have.
After this message, you should guess again. You have 10 chances,
good luck!
0 1 2 3
You have 1 perfect matches and 0 imperfect matches.
4 4 4 4
You have 0 perfect matches and 0 imperfect matches.
5 5 5 3
You have 4 perfect matches and 0 imperfect matches.
You have won the game in 3 turns and 0:16!!!
Sample Run #2 (User Input in Bold)
Welcome to MasterMind!!!
At each turn, you will enter your guess for the playing board.
A valid guess ahs 4 values in between 0 and 5.
Each guess will have each number within the guess separated by a
space.
When you are ready, enter your first guess.
From that point on, you will be told how many perfect and
imperfect matches you have.
After this message, you should guess again. You have 10 chances,
good luck!
0 1 2 3
You have 1 perfect matches and 0 imperfect matches.
4 5 2 1
You have 0 perfect matches and 3 imperfect matches.
5 2 1 3
You have 1 perfect matches and 1 imperfect matches.
5 4 2 3
You have 1 perfect matches and 1 imperfect matches.
2 3 4 5
You have 2 perfect matches and 0 imperfect matches.
2 3 1 1
You have 0 perfect matches and 1 imperfect matches.
2 4 5 0
You have 0 perfect matches and 2 imperfect matches.
1 2 5 3
You have 0 perfect matches and 2 imperfect matches.
1 4 3 1
You have 0 perfect matches and 2 imperfect matches.
1 4 2 3
You have 0 perfect matches and 2 imperfect matches.
Sorry, you have exceeded the maximum number of turns. You lose.
Here is the winning board: 5 1 4 5
Deliverables
You must submit a single file, mastermind.c, over WebCourses:
Restrictions
Although you may use other compilers and coding environments, your programs must run in
Code::Blocks. Your program should include a header comment with the following information:
your name, course number, section number, assignment title, and date.
Grading Details
Your program will be graded upon the following criteria:
1) Your correctness
2) Adhering to the given function prototypes
3) Your programming style and use of white space. (Even if you have a plan and your program
works perfectly, if your programming style is poor or your use of white space is poor you could
get 10% or 15% deducted from your grade.)
4) Compatibility to Code::Blocks. (If your program does not compile in either of these
environments, you will get a sizable deduction from your grade, likely to be over 50%)