diff --git a/src/uppgift1/Handler.class b/src/uppgift1/Handler.class index 5dbe643..39be3b3 100644 Binary files a/src/uppgift1/Handler.class and b/src/uppgift1/Handler.class differ diff --git a/src/uppgift1/Handler.java b/src/uppgift1/Handler.java index 7446fa8..243cffd 100644 --- a/src/uppgift1/Handler.java +++ b/src/uppgift1/Handler.java @@ -1,42 +1,37 @@ import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.*; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Random; -import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; - - - - /** * * @author Lazarko */ public class Handler implements Runnable{ - private boolean isConnected; - //private HangServer server; private Socket client; private BufferedReader fromClient; private PrintWriter toClient; char[] hiddenUpdate; boolean findWord; + boolean first; char[] word; - private String comment; - + private final String COMMENT_DISCONNECT = "You have disconnected from server"; + private final String CLIENT_DISCONNECT = "Client has disconnected"; + private final String QUIT_MSG = "QUIT"; + private final String Wrong_MSG = "Hangman: Wrong!"; + private final String WELCOME_MSG = "Hangman: Welcome! Guess the word. To quit type QUIT"; + private final String CORRECT_MSG = "Hangman: Correct, guess again"; + private final String DONE_MSG = "Hangman: Done, next word"; + Hangman hangman = new Hangman(); public Handler(Socket client){ this.client = client; findWord = true; - isConnected = true; - + first = true; } @Override public void run() { @@ -45,60 +40,62 @@ public void run() { fromClient = new BufferedReader(new InputStreamReader(client.getInputStream())); toClient = new PrintWriter(client.getOutputStream(), false); }catch(IOException ioe){ - System.out.println("FAIL"); + System.out.println(ioe); } try{ - if(findWord == true){ - word = findWord(); - char[] hidden = hideWord(word); + if(findWord == true){ + word = hangman.findWord(); + char[] hidden = hangman.hideWord(word); hiddenUpdate = hidden; - comment = ""; } + + firstMSG(first); + first = false; String hiddenString = Arrays.toString(hiddenUpdate) .replace(',', ' ') .replace('[', ' ') .replace(']', ' '); - toClient.println(hiddenString + comment); + toClient.println(hiddenString); toClient.flush(); System.out.println(Arrays.toString(word));// FÖR SERVERN String input = fromClient.readLine(); char[] inChar = input.toCharArray(); - char[] check = hangman(word, hiddenUpdate, inChar); - - if(Arrays.equals(check, hiddenUpdate) == true){ - toClient.println(hiddenString + "WRONG"); + char[] check = hangman.hangman(word, hiddenUpdate, inChar); + if(input.startsWith(QUIT_MSG) == true){ + toClient.println(COMMENT_DISCONNECT); toClient.flush(); - System.out.println("Wrong"); - comment = "WRONG!"; + disconnect(); + }else if(Arrays.equals(check, hiddenUpdate) == true){ + toClient.println(hiddenString + Wrong_MSG); + toClient.flush(); + System.out.println(Wrong_MSG); findWord = false; this.run(); } else if(Arrays.equals(check, word) == true){ - String wordString = Arrays.toString(word); - comment = "Done"; - toClient.println(wordString + " CORRECT"); + hiddenString = Arrays.toString(word); + toClient.println(hiddenString + DONE_MSG); toClient.flush(); - System.out.println("Correct"); + System.out.println(DONE_MSG); findWord = true; this.run(); } else if(Arrays.equals(check, hiddenUpdate) == false){ String checkString = Arrays.toString(check); - comment = "Correct, guess again!"; - toClient.println(checkString); + toClient.println(checkString + CORRECT_MSG); toClient.flush(); hiddenUpdate = check; findWord = false; this.run(); - } + } }catch(IOException ioe){ - System.out.print("ioe"); + System.out.print(ioe); }catch(NullPointerException e){ - System.out.println("Client has disconnected"); + System.out.println(CLIENT_DISCONNECT); }finally{ try { client.close(); @@ -107,72 +104,22 @@ public void run() { } } } - - - private char[] hideWord(char[] word){ - int length = word.length; - Character c = '_'; - char[] hiddenWord = new char[length]; - for(int i = 0; i < length; i++){ - hiddenWord[i] = c.charValue(); - } - return hiddenWord; - } - - - private char[] findWord()throws FileNotFoundException{ - char[] NewWord = findRandomWord(); - return NewWord; - } - - - //OBS tänk senare på stora bokstäver vs små - private char[] hangman(char[] word, char[] hidden, char[] guess){ - if(guess.length == 1){ - char[] newHidden = new char[hidden.length]; - char c = guess[0]; - for(int i = 0; i < hidden.length; i++){ - if(word[i] == c){ - newHidden[i] = c; - }else { - newHidden[i] = hidden[i]; - } - } - return newHidden; - }else if(Arrays.equals(guess, word) == true){ - return word; - }else{ - return hidden; // Komihåg om den returnerar hidden så ska ett ppoäng avdras - } - } - - // Den här metodet returnerar ett ord från "words.txt" filen - // mha readFromFile() metoden, och därmed returnerar en char[] - private char[] findRandomWord() throws FileNotFoundException{ - ArrayList listWords = readFromFile(); - int NO_WORDS = listWords.size(); - Random rand = new Random(); - int randIndex = rand.nextInt(NO_WORDS) + 1; - String s = listWords.get(randIndex); - char[] word = s.toCharArray(); - return word; + private void disconnect(){ + try{ + client.close(); + }catch(IOException ioe){ + System.out.print(ioe); } - // Läser av innehållet från "words.txt" och sparar varje ord i en - // ArrayList och returnerar det - private ArrayList readFromFile() throws FileNotFoundException{ - ArrayList words; - Scanner sc = new Scanner(new File("words.txt")); - words = new ArrayList(); - while(sc.hasNextLine()){ - String word = sc.nextLine(); - words.add(word); - } - return words; + System.out.println(CLIENT_DISCONNECT); + } + + private void firstMSG(boolean first){ + if(first == true){ + toClient.println(WELCOME_MSG); + toClient.flush(); } - - - } +} diff --git a/src/uppgift1/HangClient.class b/src/uppgift1/HangClient.class index 9e46f47..2f6b527 100644 Binary files a/src/uppgift1/HangClient.class and b/src/uppgift1/HangClient.class differ diff --git a/src/uppgift1/HangClient.java b/src/uppgift1/HangClient.java index 8cf0b59..5f5c91e 100644 --- a/src/uppgift1/HangClient.java +++ b/src/uppgift1/HangClient.java @@ -1,8 +1,3 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ import java.io.BufferedReader; import java.io.IOException; @@ -16,8 +11,9 @@ * @author Lazarko */ public class HangClient { - private static int port = 9393; - private static String server = "localhost"; + private final static String QUIT_MSG = "You have disconnected from server"; + private final static int port = 9393; + private final static String server = "localhost"; public static void main(String[] args) { Socket client; @@ -25,16 +21,19 @@ public static void main(String[] args) { Scanner input = new Scanner(System.in); client = new Socket(server, port); - while (client.isConnected()){ //HÄÄRÄ ASDAS + while (client.isConnected()){ + PrintWriter output = new PrintWriter(client.getOutputStream()); BufferedReader fromServer = new BufferedReader(new InputStreamReader(client.getInputStream())); String in = fromServer.readLine(); - System.out.println("Hangman: " + in); + System.out.println(in); String write = input.nextLine(); output.println(write); output.flush(); String inputString = fromServer.readLine(); - + if(inputString.startsWith(QUIT_MSG) == true){ + client.close(); + } System.out.println(inputString); } @@ -42,6 +41,8 @@ public static void main(String[] args) { } catch (IOException ioe) { System.out.print(ioe); + }catch(NullPointerException e){ + System.out.print(e); } } diff --git a/src/uppgift1/Hangman.class b/src/uppgift1/Hangman.class new file mode 100644 index 0000000..0e2934d Binary files /dev/null and b/src/uppgift1/Hangman.class differ diff --git a/src/uppgift1/Hangman.java b/src/uppgift1/Hangman.java new file mode 100644 index 0000000..f416184 --- /dev/null +++ b/src/uppgift1/Hangman.java @@ -0,0 +1,76 @@ + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Random; +import java.util.Scanner; + +/** + * + * @author Lazarko + */ +public class Hangman { + + public char[] hideWord(char[] word){ + int length = word.length; + Character c = '_'; + char[] hiddenWord = new char[length]; + for(int i = 0; i < length; i++){ + hiddenWord[i] = c.charValue(); + } + return hiddenWord; + } + + + public char[] findWord()throws FileNotFoundException{ + char[] NewWord = findRandomWord(); + return NewWord; + } + + + + public char[] hangman(char[] word, char[] hidden, char[] guess){ + if(guess.length == 1){ + char[] newHidden = new char[hidden.length]; + char c = Character.toLowerCase(guess[0]); + for(int i = 0; i < hidden.length; i++){ + if(Character.toLowerCase(word[i]) == c){ + newHidden[i] = c; + }else { + newHidden[i] = hidden[i]; + } + } + return newHidden; + }else if(Arrays.equals(guess, word) == true){ + return word; + }else{ + return hidden; + } + } + + // Den här metodet returnerar ett ord från "words.txt" filen + // mha readFromFile() metoden, och därmed returnerar en char[] + public char[] findRandomWord() throws FileNotFoundException{ + ArrayList listWords = readFromFile(); + int NO_WORDS = listWords.size(); + Random rand = new Random(); + int randIndex = rand.nextInt(NO_WORDS) + 1; + String s = listWords.get(randIndex); + char[] word = s.toCharArray(); + return word; + } + // Läser av innehållet från "words.txt" och sparar varje ord i en + // ArrayList och returnerar det + public ArrayList readFromFile() throws FileNotFoundException{ + ArrayList words; + Scanner sc = new Scanner(new File("words.txt")); + words = new ArrayList(); + while(sc.hasNextLine()){ + String word = sc.nextLine(); + words.add(word); + } + return words; + } + +}