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

This c++ programming assignment asks you to develop a hangman game which has the

ID: 3570001 • Letter: T

Question

This c++ programming assignment asks you to develop a hangman game which has the following characteristics:

1. It is driven by a while loop from main that allows the user to play the game as many times as they wish.

2. Validates ALL user input. (each character input for the word guess must be an alpha, 'a' is the same as 'A', all blank spaces ignored, 'y' = 'Y' = ' y ', etc)

3. A list of at least 20 words for the game are kept in a file that is read in at the time the program starts. These words are then stored in an array. Use a random number generator to access into the array to select the secret word. Don't repeat words during one run of the program. (What type of c++ structure would best hold this? Parallel arrays? Or an array of structures?)

4. Once each game begins, show the gallows, and indicate the number of characters in the word, like this:

_______

| ( )

|

|

____________ Word : _ _ _ _ _ _ _

5. For each wrong guess, draw a body part on the gallows and show it in a list of incorrect guesses. For each correct guess, fill in one of the blanks in the word.

________

| ( )

|

|

____________ Word : a _ _ _ _ _ Incorrect guesses: p

(this pictures shows 1 wrong guess and 1 correct guess).

6. The maximum number of moves before the person is hung would be 8 or 9, depending on your ability to draw head, neck, body, 2 legs, 2 arms...when the man is hung, the game is over. Or, the game is over when the user correctly guesses each letter in the word.

7. This program must have good modular design - using proper functions.

Explanation / Answer

import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.util.Random; import java.lang.reflect.Array; public class hangman extends Applet implements ActionListener{ static final int DEAD=13; // amount of errors till loss private int errors; // amount of errors private String message; // error or victorie private String information; // information of the message private String rword; // the rword private StringBuffer gword;// the gword private Button bStart; // Button "Restart" private Button bGo; // Button "Go" private TextField tfLetter; // letter box private Font fnt; // common font public void init(){ fnt = new Font( "Monospaced", 0, 12 ); setFont(fnt); // Create textbox for guess letter tfLetter = new TextField(); // Create buttons and labels bStart = new Button("Restart"); bGo = new Button("Go"); // Add the graphical elements to the applet add(bStart); add(new Label("Guess a letter:")); add(tfLetter); add(bGo); // Buttons are events: bStart.addActionListener(this); bGo.addActionListener(this); // Start first game initGame(); } public void initGame(){ /* Setting the errors to 0 */ errors=0; /* Enter the wordslist, separated by a | here: */ String str = "computer|radio|calculator|teacher|bureau|police|geometry|president|subject|country|enviroment|classroom|animals|province|month|politics|puzzle|instrument|kitchen|language|vampire|ghost|solution|service|software|virus25|security|phonenumber|expert|website|agreement|support|compatibility|advanced|search|triathlon|immediately|encyclopedia|endurance|distance|nature|history|organization|international|championship|government|popularity|thousand|feature|wetsuit|fitness|legendary|variation|equal|approximately|segment|priority|physics|branche|science|mathematics|lightning|dispersion|accelerator|detector|terminology|design|operation|foundation|application|prediction|reference|measurement|concept|perspective|overview|position|airplane|symmetry|dimension|toxic|algebra|illustration|classic|verification|citation|unusual|resource|analysis|license|comedy|screenplay|production|release|emphasis|director|trademark|vehicle|aircraft|experiment"; String[] temp; /* delimiter */ String delimiter = "\|"; /* given string will be split by the argument delimiter provided. */ temp = str.split(delimiter); /* Setting the seed */ Random randomGenerator = new Random(); /* Generating random number */ int randomInt = randomGenerator.nextInt(temp.length); rword = new String(temp[randomInt]); char positions[] = new char[rword.length()]; for (int i=0; i 0){ // ground g.drawLine(90, baseY,200,baseY); } if (errors > 1){ // bar up g.drawLine(125,baseY,125,baseY-100); } if (errors > 2){ g.drawLine(110,baseY,125,baseY-15); } if (errors > 3){ g.drawLine(140,baseY,125,baseY-15); } if (errors > 4){ // side bar g.drawLine(125,baseY-100,175,baseY-100); } if (errors > 5){ g.drawLine(125,baseY-85,140,baseY-100); } if (errors > 6){ // rope g.drawLine(175,baseY-100,175,baseY-75); } if (errors > 7){ // body g.drawOval(170,baseY-75,10,12); } if (errors > 8){ g.drawOval(170,baseY-65,15,25); } if (errors > 9){ // arms g.drawLine(160,baseY-65,170,baseY-60); } if (errors > 10){ g.drawLine(183,baseY-60,193,baseY-65); } if (errors > 11){ // legs g.drawLine(165,baseY-30,170,baseY-45); } if (errors > 12){ g.drawLine(183,baseY-45,193,baseY-30); } // Show the messages g.drawString( message, 40, baseY+25 ); g.drawString( information, 25, baseY+45 ); g.drawString( new String (gword), 110, 60); } public void actionPerformed(ActionEvent e){ if (e.getSource() == bStart){ initGame(); } if (e.getSource() == bGo){ processTurn(); // Delete the letter input box tfLetter.setText(""); repaint(); } } private void processTurn(){ String s, t; char a; s = tfLetter.getText(); a = s.charAt(0); if (!Character.isLetter(a)){ message="Only enter letters!"; return; } if (s.length()>1){ message="One letter at a time!"; return; } // Has the letter been guessed t = new String(gword); if (t.indexOf(s) != -1){ message="Letter has already been guessed"; return; } // If the letter doesn't occur in the rword if (rword.indexOf(s) == -1){ message=""; errors++; if (errors==DEAD){ message="You lost!"; information = "Click on restart for another chance!"; } return; } // Replace dots in gword with the found letter. for (int i=0; i