View difference between Paste ID: dNPG91KP and rMCjjxMh
SHOW: | | - or go back to the newest paste.
1
/*
2
 * File: Hangman.java
3
 * ------------------
4
 * This program will eventually play the Hangman game from
5
 * Assignment #4.
6
 */
7
8
import acm.graphics.*;
9
import acm.program.*;
10
import acm.util.*;
11
12
import java.awt.*;
13
14
public class Hangman extends ConsoleProgram {
15
16
	private RandomGenerator rgen = RandomGenerator.getInstance();
17
	
18
	private String orig;
19
	private String hidden;
20
	private String userInput;
21
	private String lowerInput;
22
	// private String missedLetters = "";  // this is not needed
23
	
24
	private char lastLetter;
25
	private int guess = 8;
26
	
27
	//private boolean guessed = false;    //this is not needed
28
	private boolean GameWon = false;     // added this to stop the program before 8 tries passed if all letters were guessed
29
30
	public class getWord extends HangmanLexicon {
31
    	int rand = rgen.nextInt(getWordCount());
32
    	String str = getWord(rand);
33
    }
34
35
	getWord w = new getWord();
36
	private String getAWord() {
37
    	return(w.str);
38
    }
39
40
    public void run() {
41
    	console();
42
//    	graphics();
43
//    	readLexicon();
44
	}
45
    
46
    private void console() {
47
    	orig = getAWord();
48
   		// write dashes in HIDDEN only once. Used then during the game to control win/loss
49
        hidden = orig.replaceAll(".","-");
50
    	interactWithUser();
51
    }
52
53
    private void interactWithUser() {
54
    	println("Welcome to Hangman!");
55
    	gameProcess();
56
    	gameEnd();    // changed to finish game regardless of current status. gameEnd will determine if won or lost.
57
    }
58
    
59
    private void gameProcess() {
60
    	while (guess != 0 || GameWon) {   // added "or if GameWon = true" to exit the loop if won before 8 tries
61
        	println("The word now looks like this: " + hidden);
62
        	checkUserInput();
63
        	println("You have " + guess + " guesses left.");
64
    	}
65
    }
66
67
    private void checkUserInput() {
68
    	userInput = readLine("Your guess: ");
69
    	lastLetter = userInput.charAt(0);
70
		lowerInput = orig.toLowerCase();
71
		if (hidden.toLowerCase().contains(Character.toLowerCase(lastLetter)) {
72
		// user entered already guessed letter. Need to warn him and exit checkUserInput
73
			println("You have already guessed this letter, are you being smart?");
74
			return;
75
		}
76
77
		if (orig.contains(userInput) || lowerInput.contains(userInput)) {
78
			println("** DEBUG: input letter matches letters in the word.");
79
			updateHidden();
80
			checkWin();
81
    	} else {
82
			println("** DEBUG: input letter DOES NOT MATCH letters in the word.");
83
    		guess--;    // placed instead of guessed = false;
84
    	}
85
		// this is not needed
86
		//if (!guessed) {
87
		//	guess--;
88
		//}
89
    }
90
91
	private void updateHidden() {
92
		for (int i=0; i< orig.lenth(); i++) {
93
			if (Character.toLowerCase(orig.charAt(i)) == Character.toLowerCase(lastLetter)) {
94
				println("** DEBUG: Trying to replace matched symbol at index: " + Integer.toString(i));
95
				char c = orig.charAt(i);
96
				hidden = replaceChar(hidden, c ,  i);
97
			}
98
		}
99
	}
100
101
	private String replaceChar(String str, char ch, int index) {
102
    	return str.substring(0, index) + ch + str.substring(index+1);
103
	}
104
105
	private void checkWin() {
106
		if (!hidden.contains("-")) {
107
			GameWon =  true;
108
		}
109
	}
110
111
    private void gameEnd() {    // changed from gameLost to gameEnd
112
    	if (guess == 0) {
113
    		println("You're completely hung.");
114
    		println("The word was: " + getAWord());
115
    		println("You lose.");
116
    	} 
117
		if (GameWon) {
118
    		println("Congratulations, you WON!!");
119
			println("The word was: " + getAWord());			
120
		}
121
    }
122
123
}