diff --git a/src/java/Game.java b/src/java/Game.java index 150c33b..b519d4f 100644 --- a/src/java/Game.java +++ b/src/java/Game.java @@ -28,10 +28,10 @@ public class Game { Puzzle schloss; Puzzle door; Item schluessel; - Item tonne; + Item stahlschluessel; public Game() { - try { + try { startGame(); } catch (Exception ex) { Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex); @@ -39,17 +39,17 @@ public class Game { } public void setVariables() { - + // Intro Raum intro = new Room("Intro"); intro.setDescription("Hier ist das Intro von Kidnappd"); durchgang = new Puzzle("Durchgang"); durchgang.setSolvedText("Hurra, du hast das Intro Level beendet"); intro.puzzles.add(durchgang); - + //Raum Object keller = new Room("Keller"); - + durchgang.setNextRoom(keller); keller.setDescription("der kleine Mondschein, der zuvor den unbekannten Raum schwach beleuchtet hat, leuchtet viel gr��er und viel heller und du erkennst nun den gesamten Raum. Er ist klein und d�ster. " + "überall h�ngen Spinnennetze und Staub sammelt sich am Betonboden. Du erkennst am anderen Ende des Raumes eine T�r"); @@ -80,12 +80,12 @@ public class Game { door.setDependencyText("Du musst erst das Schloss der Kette knacken um die Tür öffnen zu können"); //Item Object - tonne = new Item("Muelltonne"); - tonne.setHiddenFlag(false); - tonne.setPortableFlag(false); - tonne.setDescription("Eine schwarze M�lltonne. Sie stinkt f�rchterlich"); - keller.items.add(tonne); - + stahlschluessel = new Item("Stahlschluessel"); + stahlschluessel.setHiddenFlag(false); + stahlschluessel.setPortableFlag(false); + stahlschluessel.setDescription("Ein Stahlschlüssel"); + intro.items.add(stahlschluessel); + rooms.add(intro); rooms.add(keller); story.add("Dein ganzer K�rper schmerzt, du liegst auf Betonboden. Du f�ngst laut an zu husten und Staubklumpen fliegen aus deinem Mund. Du �ffnest langsam und nur schwer die Augen, " @@ -102,124 +102,178 @@ public class Game { } - public void play() { + public void play() throws Exception { + log("play()"); + log("Input: " + input); + + input = input.replace("ä", "ae"); + input = input.replace("ü", "ue"); + input = input.replace("ö", "oe"); + input = input.replace("ß", "ss"); + if (input.contains(" ")) { inputArray = input.split(" "); for (String s : inputArray) { if (currentRoom.getItem(s) != null) { - itemName = s; + itemName = currentRoom.getItem(s).getName(); + log("itemName: " + itemName); } else if (currentRoom.getPuzzle(s) != null) { - puzzleName = s; + puzzleName = currentRoom.getPuzzle(s).getName(); + log("PuzzleName: " + puzzleName); } else { intentName = s; + log("intentName: " + intentName); } } } else { intentName = input; + log("intentName: " + intentName); } switch (intentName.toLowerCase()) { //intent case "lookaroundintent": + log("Switch: lookAroundIntent"); if (itemName == null && puzzleName == null) { lookaround(); } break; //intent case "inspectintent": + log("Switch: inspectintent"); if (itemName != null) { inspect(itemName); } else if (puzzleName != null) { inspect(puzzleName); - } else { - say("Das kann nicht untersucht werden"); } - break; - //intent + break; + //intent + case "examineintent": + log("Switch: ExamineIntent"); if (itemName == null && puzzleName == null) { examine(); } break; + //intent case "takeintent": + log("Switch: TakeIntent"); if (itemName != null) { take(currentRoom.getItem(itemName)); - } else { - say("das kann nicht mitgenommen werden"); } break; //intent case "openintent": + log("Switch: OpenIntent"); if (puzzleName != null) { open(currentRoom.getPuzzle(puzzleName)); - } else { - say("das kann nicht geöffnet werden"); } break; //intent case "resetintent": - { + log("Switch: ResetIntent"); if (itemName == null && puzzleName == null) { - say("Das Spiel wird nun neu gestartet"); resetGame(); } - } + break; + //intent case "skipintent": - { + log("Switch: SkipIntent"); if (itemName == null && puzzleName == null) { resetGame(); - for(int i = 0; i < currentRoom.puzzles.size(); i++) - { - if(currentRoom.puzzles.get(i).getNextRoom() != null) - { + for (int i = 0; i < currentRoom.puzzles.size(); i++) { + if (currentRoom.puzzles.get(i).getNextRoom() != null) { setRoom(currentRoom.puzzles.get(i).getNextRoom()); - say(currentRoom.puzzles.get(i).getNextRoom().getDescription()); } } + + } - } + break; } + itemName = null; intentName = null; puzzleName = null; - + + log("stoppFlag: " + stoppFlag); + if (stoppFlag == true) { endGame(); } } + + public void log(String s) throws Exception + { + String url = "https://medinf.efi.th-nuernberg.de/tomcat/WebAdventure/Log"; + URL obj = new URL(url); + HttpURLConnection httpConn = (HttpURLConnection) obj.openConnection(); - public void lookaround() { + //add reuqest header + httpConn.setRequestMethod("POST"); + httpConn.setRequestProperty("User-Agent", "Mozilla/5.0"); + httpConn.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); + + // Send post request + httpConn.setDoOutput(true); + DataOutputStream wr = new DataOutputStream(httpConn.getOutputStream()); + String urlParameters = "log=" + s; + wr.writeBytes(urlParameters); + wr.flush(); + wr.close(); + + BufferedReader in = new BufferedReader( + new InputStreamReader(httpConn.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + } + + public void lookaround() throws Exception { + log("lookaround() "); say(currentRoom.getDescription()); } - public void startGame() { + public void startGame() throws Exception { + log("startGame() "); for (int i = 0; i < story.size(); i++) { say(story.get(i)); } } - - public void resetGame(){ - + + public void resetGame() throws Exception { + log("resetGame() "); startGame(); } - public void inspect(String s) { - Item currentItem = currentRoom.getItem(s); - Puzzle currentPuzzle = currentRoom.getPuzzle(s); - - if (currentPuzzle != null) { - say(currentPuzzle.getDescription()); - - } else if (currentItem != null) { + public void inspect(String s) throws Exception { + log("inspect(" + s + ") "); + Item currentItem=null; + if(currentRoom.getItem(s) != null) + { + currentItem= currentRoom.getItem(s); + log("currentItem: " + currentItem.getName()); say(currentItem.getDescription()); } - + Puzzle currentPuzzle=null; + + if(currentRoom.getPuzzle(s) != null) + { + currentPuzzle = currentRoom.getPuzzle(s); + log("currentPuzzle " + currentPuzzle.getName()); + say(currentPuzzle.getDescription()); + } } - public void endGame() { + public void endGame() throws Exception { + log("endGame() "); say("Glückwunsch das Spiel ist beendet!"); setVariables(); } @@ -254,7 +308,8 @@ public class Game { in.close(); } - public void say(String s) { + public void say(String s) throws Exception { + log("say(" + s + ") "); try { sendPost(s); } catch (Exception ex) { @@ -262,16 +317,19 @@ public class Game { } } - public void setInput(String s) { + public void setInput(String s) throws Exception { + log("setInput(" + s + ") "); input = s; } - public void setRoom(Room nextRoom) { + public void setRoom(Room nextRoom) throws Exception { + log("setRoom(" + nextRoom.getName() + ") " ); currentRoom = nextRoom; say(currentRoom.getDescription()); } - public void examine() { + public void examine() throws Exception { + log("examine() : " + getInventory()); if (getInventory().isEmpty()) { say("Deine Taschen sind leer"); @@ -280,12 +338,17 @@ public class Game { } inventory.forEach((bag) -> { - say(bag.getName()); + try { + say(bag.getName()); + } catch (Exception ex) { + Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex); + } }); } - public void open(Puzzle currentPuzzle) { + public void open(Puzzle currentPuzzle) throws Exception { + log("open(" + currentPuzzle.getName() + ") "); if (currentPuzzle.isSolved()) // bereits gelöst { say("ist bereits geöffnet"); @@ -324,7 +387,8 @@ public class Game { } - public void take(Item currentItem) { + public void take(Item currentItem) throws Exception { + log("take(" + currentItem.getName() + ") "); if ((!inventory.contains(currentItem)) && (currentItem.isPortableFlag() == true)) { inventory.add(currentItem); currentRoom.items.remove(currentItem); diff --git a/src/java/Log.java b/src/java/Log.java new file mode 100644 index 0000000..6f2c124 --- /dev/null +++ b/src/java/Log.java @@ -0,0 +1,102 @@ +/* + * 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.IOException; +import java.io.PrintWriter; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * + * @author Edi + */ +@WebServlet(urlPatterns = {"/Log"}) +public class Log extends HttpServlet { + + /** + * Processes requests for both HTTP GET and POST + * methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + String context = ""; + public void init() { + + } + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException, Exception { + + try (PrintWriter out = response.getWriter()) { + /* TODO output your page here. You may use following sample code. */ + if(request.getParameter("log") != null) { + context = context + "\n" + request.getParameter("log"); + } + + out.println(context); + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setIntHeader("Refresh", 2); + try { + processRequest(request, response); + + } catch (Exception ex) { + Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex); + } + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setIntHeader("Refresh", 2); + try { + processRequest(request, response); + } catch (Exception ex) { + Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex); + } + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +} diff --git a/src/java/Room.java b/src/java/Room.java index 85ccb1b..a09d0fe 100644 --- a/src/java/Room.java +++ b/src/java/Room.java @@ -17,7 +17,7 @@ public class Room { for(Item i: items) { - if(i.getName().equals(s)) + if(i.getName().equalsIgnoreCase(s)) return i; } return null; @@ -27,7 +27,7 @@ public class Room { for(Puzzle p: puzzles) { - if(p.getName().equals(s)) + if(p.getName().equalsIgnoreCase(s)) return p; } return null;