Skip to content

Instantly share code, notes, and snippets.

@umuturan
Last active February 20, 2016 10:36
Show Gist options
  • Save umuturan/931aedea3db02ae19a37 to your computer and use it in GitHub Desktop.
Save umuturan/931aedea3db02ae19a37 to your computer and use it in GitHub Desktop.
Hangman
/*
*HW01-HANGMAN
*HANGMAN CLASS
*Author:
*@Umut Can Turan
*21401929
*/
public class Hangman {
// Properties
StringBuffer secretWord;
StringBuffer allLetters;
StringBuffer usedLetters;
int numberOfIncorrectTries;
int maxAllowedIncorrectTries;
StringBuffer knownSoFar;
final int MAXTRIES = 6;
// Constructor
public Hangman() {
numberOfIncorrectTries = 0;
maxAllowedIncorrectTries = MAXTRIES;
allLetters = new StringBuffer("abcdefghijklmnopqrstuvwxyz");
usedLetters = new StringBuffer("");
secretWord = chooseSecretWord();
knownSoFar = new StringBuffer("");
for (int count = 0; count < secretWord.length(); count++) {
knownSoFar.append("*");
}
}
// Methods
public StringBuffer chooseSecretWord() {
final int NUMBER_OF_WORDS;
int counter;
int wordIndex;
NUMBER_OF_WORDS = 5;
StringBuffer[] words = new StringBuffer[NUMBER_OF_WORDS];
words[0] = new StringBuffer("Sea");
words[1] = new StringBuffer("Saint");
words[2] = new StringBuffer("Leftie");
words[3] = new StringBuffer("Abraham");
words[4] = new StringBuffer("Pine");
// Find a random integer to get random index of array
wordIndex = (int) (Math.random() * NUMBER_OF_WORDS-1);
return words[wordIndex];
}
public int tryThis(char letter) {
int returnnum = 0;
int counter = 0;
if ((letter > 64 && letter < 91) || (letter > 96 && letter < 123)) {
if (!hasLost()) {
String used = getUsedLetters();
char[] usedletters = used.toLowerCase().toCharArray();
String all = getAllLetters();
char[] allletters = all.toLowerCase().toCharArray();
String secret = secretWord.toString();
char[] secretW = secret.toLowerCase().toCharArray();
int lengthused = usedletters.length;
int lengthall = allletters.length;
int lengthSec = secretW.length;
int knownCount = 0;
for (int i = 0; i < lengthused; i++)
if (letter == usedletters[i])
counter++;
if (counter > 0)
returnnum = -2; // Letter is already used!
else {
for (int i = 0; i < lengthSec; i++) {
if (secretW[i] == letter) {
knownCount++;
knownSoFar.replace(i, i + 1, String.valueOf(letter));
usedLetters.append(letter);
for(int count=0; count<lengthall;count++){
if(letter==allletters[count]){
allLetters.delete(count,count+1);
}
}
/*
* BURADA ALL LETTERSDAN BU HARFİ SİLMEM GEREKİYOR
* Kİ KULLANICI KULLANILMAMIŞ KALAN HARFLERİ
* GÖREBİLSİN
*/
}
returnnum = knownCount;
}
if (knownCount == 0) {
numberOfIncorrectTries++;
usedLetters.append(letter);
returnnum = knownCount;
}
}
}
else
returnnum = -3; // The Game is OVER!
}
else
returnnum = -1; // The input is invalid!!
return returnnum;
}
public String getAllLetters() {
return allLetters.toString();
}
public String getUsedLetters() {
return usedLetters.toString();
}
public int getNumOfIncorrectTries() {
return numberOfIncorrectTries;
}
public int getMaxAllowedIncorrectTries() {
return maxAllowedIncorrectTries;
}
public String getKnownSoFar() {
return knownSoFar.toString();
}
public boolean isGameOver() {
boolean result;
result = false;
if ((numberOfIncorrectTries >= maxAllowedIncorrectTries)
|| (knownSoFar.toString().toLowerCase().equals(secretWord.toString().toLowerCase()))) {
result = true;
}
return result;
}
public boolean hasLost() {
return (numberOfIncorrectTries >= maxAllowedIncorrectTries);
}
}
/*
*HW01-HANGMAN
*TEST CLASS
*Author:
*@Umut Can Turan
*21401929
*/
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// variables
Hangman hangman = new Hangman();
String letter;
int result;
// displaying the secret word
do {
System.out.println();
System.out.println("--------------------HANGMAN-----------------");
System.out.println();
System.out.println("Secret Word is :" + hangman.getKnownSoFar());
System.out.println("Unused letters are :" + hangman.getAllLetters());
System.out.println("Used letters so far:" + hangman.getUsedLetters());
System.out.println((6 - hangman.getNumOfIncorrectTries()) + " TRIES LEFT,PLEASE BE CAREFUL!");
// to take the input from the user
System.out.print("Enter a letter :");
letter = scan.next();
if (letter.length() != 1) {
System.out.println("You have to enter a single letter!");
} else {
result = hangman.tryThis(letter.charAt(0));
// to check the correction of inputs
if (result == -1)
System.out.println("\n"+"Invalid input: " + letter.toUpperCase());
else if (result == -2) {
System.out.println("\n"+"Letter " + letter.toUpperCase() + " is already used!");
System.out.println("Please try another letter!");
}
else if (result == -3)
System.out.println("Game Over...");
// if the letter is not in the secret word
else if (result == 0) {
System.out.println("\n"+"Letter " + letter.toUpperCase() + " is not in the secretWord.");
}
// if the letter is in the secret word
else if (result > 0) {
hangman.getKnownSoFar();
System.out.println("\n"+"Congratulations! " + letter.toUpperCase() + " is succesful!");
}
}
} while (!hangman.isGameOver());
// when the player won the game
if (hangman.knownSoFar.toString().toLowerCase().equals(hangman.secretWord.toString().toLowerCase()))
System.out.println(" You Win! attaboy! :)) ");
else
System.out.println(" You Lost! :((");
System.out.println("The Secret Word was " + hangman.secretWord.toString().toUpperCase());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment