import java.io.File;
import java.io.IOException;
import java.util.Random;
import java.util.Scanner;
/**
*
* @author joe
*/
public class Hangman {
Scanner reader;
Scanner typist;
boolean completed;
char again = 'n';
char lett;
int timesMissed;
if (args.length == 0) {
fileName = "worden.txt";
} else {
fileName = args[0];
}
//using filename to create a new file object
java.
io.
File file
= new java.
io.
File(fileName
);
if (!file.exists()) {
System.
err.
println("Error: File " + fileName
+ " does not exist."); }
reader = new Scanner(file);
int i=0;
while (reader.hasNext()) {
word = reader.next();
wordArray[i] = word;
i++;
}
typist
= new Scanner
(System.
in);
String worden
= wordArray
[(int) (Math.
random() * wordArray.
length)]; do {
completed = false;
guesses = "";
timesMissed = 0;
//create the asterisks
asterisk = asteriskCover(worden);
while (!completed) {
System.
out.
print("(Guess) Enter a letter in word " + asterisk
+ "> " );
guess = typist.next();
//if you're weird and type out the whole thing
if (guess.length() > 1) {
if (guess.equals(worden)) {
System.
out.
println("Holy #$@%!, good job!"); } else {
System.
out.
println("Nope, that's not it."); }
completed = true;
//if you're not weird and just guess a letter like I
// had originally asked you to.
} else {
lett = guess.charAt(0);
guesses += lett;
//2 lines below rep if letter isn't there and increments
//times missed. (hopefully)
if (worden.indexOf(lett) < 0) {
timesMissed++;
} else {
//my awesome method to put the asterisk in
rightLett(worden, asterisk, lett);
}
if (worden.equals(asterisk.toString())){
System.
out.
println("The word is " + worden
+ " , you missed " + timesMissed + " time(s)");
System.
out.
print("Do you want to guess another word?" + " Enter y or n > ");
again = typist.next().charAt(0);
}
}
}
}
while(again == 'Y' || again == 'y');
reader.close();
}
for (int count = 0; count < a.length(); count++) {
asterisk.append('*');
}
return asterisk;
}
for (int dex = 0; dex < worden.length(); dex++) {
if (worden.charAt(dex) == lett) {
asterisk.setCharAt(dex, lett);
}
}
}
}
CmltcG9ydCBqYXZhLmlvLkZpbGU7CmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKaW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwoKCi8qKgogKgogKiBAYXV0aG9yIGpvZQogKi8KcHVibGljIGNsYXNzIEhhbmdtYW4gewoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiB7CgogICAgICAgIFN0cmluZyBmaWxlTmFtZTsKICAgICAgICBTY2FubmVyIHJlYWRlcjsKICAgICAgICBTY2FubmVyIHR5cGlzdDsKICAgICAgICBSYW5kb20gZ2VuZXJhdG9yID0gbmV3IFJhbmRvbSgpOwogICAgICAgIGJvb2xlYW4gY29tcGxldGVkOwogICAgICAgIFN0cmluZ0J1ZmZlciBhc3RlcmlzazsKICAgICAgICBTdHJpbmcgZ3Vlc3M7CiAgICAgICAgU3RyaW5nIGd1ZXNzZXM7CiAgICAgICAgY2hhciBhZ2FpbiA9ICduJzsgCiAgICAgICAgY2hhciBsZXR0OwogICAgICAKICAgICAgICBpbnQgdGltZXNNaXNzZWQ7CgogICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIGZpbGVOYW1lID0gIndvcmRlbi50eHQiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZpbGVOYW1lID0gYXJnc1swXTsKICAgICAgICB9CiAgICAgICAgLy91c2luZyBmaWxlbmFtZSB0byBjcmVhdGUgYSBuZXcgZmlsZSBvYmplY3QgCiAgICAgICAgamF2YS5pby5GaWxlIGZpbGUgPSBuZXcgamF2YS5pby5GaWxlKGZpbGVOYW1lKTsKCiAgICAgICAgaWYgKCFmaWxlLmV4aXN0cygpKSB7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3I6IEZpbGUgIiArIGZpbGVOYW1lICsgIiBkb2VzIG5vdCBleGlzdC4iKTsKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgICAgfQogICAgICAgIAogICAgICAgIHJlYWRlciA9IG5ldyBTY2FubmVyKGZpbGUpOwogICAgICAgIAogICAgICAgICBTdHJpbmdbXSB3b3JkQXJyYXkgPSBuZXcgU3RyaW5nWzE1XTsKICAgICAgICAKICAgICAgICBTdHJpbmcgd29yZDsKICAgICAgICBpbnQgaT0wOwogICAgICAgICB3aGlsZSAocmVhZGVyLmhhc05leHQoKSkgewogICAgICAgICAgICB3b3JkID0gcmVhZGVyLm5leHQoKTsKICAgICAgICAgICAgd29yZEFycmF5W2ldID0gd29yZDsKICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICB0eXBpc3QgPSBuZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwogICAKICAgICAgICBTdHJpbmcgd29yZGVuID0gd29yZEFycmF5WyhpbnQpIChNYXRoLnJhbmRvbSgpICogd29yZEFycmF5Lmxlbmd0aCldOwogICAgICAgICAgZG8geyAgICAgICAgICAgIAogICAgICAgICAgICBjb21wbGV0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgZ3Vlc3NlcyA9ICIiOwogICAgICAgICAgICB0aW1lc01pc3NlZCA9IDA7CgogICAgICAgICAgICAvL2NyZWF0ZSB0aGUgYXN0ZXJpc2tzIAogICAgICAgICAgICBhc3RlcmlzayA9IGFzdGVyaXNrQ292ZXIod29yZGVuKTsKICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKCFjb21wbGV0ZWQpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIihHdWVzcykgRW50ZXIgYSBsZXR0ZXIgaW4gd29yZCAiICsgYXN0ZXJpc2sgKyAKICAgICAgICAgICAgICAgICAgICAgICAgIj4gIiApOwogICAgICAgICAgICAgICAgZ3Vlc3MgPSB0eXBpc3QubmV4dCgpOwoKICAgICAgICAgICAgICAgLy9pZiB5b3UncmUgd2VpcmQgYW5kIHR5cGUgb3V0IHRoZSB3aG9sZSB0aGluZyAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKGd1ZXNzLmxlbmd0aCgpID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGd1ZXNzLmVxdWFscyh3b3JkZW4pKSB7IAogICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhvbHkgIyRAJSEsIGdvb2Qgam9iISIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm9wZSwgdGhhdCdzIG5vdCBpdC4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAvL2lmIHlvdSdyZSBub3Qgd2VpcmQgYW5kIGp1c3QgZ3Vlc3MgYSBsZXR0ZXIgbGlrZSBJIAogICAgICAgICAgICAgICAgICAgIC8vIGhhZCBvcmlnaW5hbGx5IGFza2VkIHlvdSB0by4KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbGV0dCA9IGd1ZXNzLmNoYXJBdCgwKTsKICAgICAgICAgICAgICAgICAgICBndWVzc2VzICs9IGxldHQ7CiAgICAgICAgICAgICAgICAgICAgLy8yIGxpbmVzIGJlbG93IHJlcCBpZiBsZXR0ZXIgaXNuJ3QgdGhlcmUgYW5kIGluY3JlbWVudHMgCiAgICAgICAgICAgICAgICAgICAgLy90aW1lcyBtaXNzZWQuIChob3BlZnVsbHkpCiAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmRlbi5pbmRleE9mKGxldHQpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aW1lc01pc3NlZCsrOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vbXkgYXdlc29tZSBtZXRob2QgdG8gcHV0IHRoZSBhc3RlcmlzayBpbgogICAgICAgICAgICAgICAgICAgICAgICByaWdodExldHQod29yZGVuLCBhc3RlcmlzaywgbGV0dCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh3b3JkZW4uZXF1YWxzKGFzdGVyaXNrLnRvU3RyaW5nKCkpKXsKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIHdvcmQgaXMgIiArIHdvcmRlbiArICIgLCB5b3UgbWlzc2VkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0aW1lc01pc3NlZCArICIgdGltZShzKSIpOwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRG8geW91IHdhbnQgdG8gZ3Vlc3MgYW5vdGhlciB3b3JkPyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIEVudGVyIHkgb3IgbiA+ICIpOwogICAgICAgICAgICAgICAgICAgYWdhaW4gPSB0eXBpc3QubmV4dCgpLmNoYXJBdCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIH0gICAgICAgICAgICAgICAKICAgICAgICB9IAogICAgICAgIH0gICAgCiAgICAgICAgd2hpbGUoYWdhaW4gPT0gJ1knIHx8IGFnYWluID09ICd5Jyk7CiAgICAgICAgcmVhZGVyLmNsb3NlKCk7CiAgICAgICAgfQoKICAgICAgICAKCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZ0J1ZmZlciBhc3Rlcmlza0NvdmVyKFN0cmluZyBhKSB7CiAgICAgICAgU3RyaW5nQnVmZmVyIGFzdGVyaXNrID0gbmV3IFN0cmluZ0J1ZmZlcihhLmxlbmd0aCgpKTsKICAgICAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgYS5sZW5ndGgoKTsgY291bnQrKykgewogICAgICAgICAgICBhc3Rlcmlzay5hcHBlbmQoJyonKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFzdGVyaXNrOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByaWdodExldHQoU3RyaW5nIHdvcmRlbiwgU3RyaW5nQnVmZmVyIGFzdGVyaXNrLCBjaGFyIGxldHQpIHsKICAgICAgICBmb3IgKGludCBkZXggPSAwOyBkZXggPCB3b3JkZW4ubGVuZ3RoKCk7IGRleCsrKSB7CiAgICAgICAgICAgIGlmICh3b3JkZW4uY2hhckF0KGRleCkgPT0gbGV0dCkgewogICAgICAgICAgICAgICAgYXN0ZXJpc2suc2V0Q2hhckF0KGRleCwgbGV0dCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K