Browse Source

Merge origin/master

master
Edi 4 years ago
parent
commit
c6f94deae3
4 changed files with 687 additions and 509 deletions
  1. 55
    43
      src/java/Game.java
  2. 388
    226
      src/java/Logic.java
  3. 1
    0
      web/deps/opt/bootstrap.css
  4. 243
    240
      web/index.html

+ 55
- 43
src/java/Game.java View File

@@ -65,6 +65,7 @@ public class Game {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String jsonObject = br.readLine();
log(jsonObject);
ObjectMapper objectMapper = new ObjectMapper();
try {
@@ -90,26 +91,24 @@ public class Game {
log("Story: " + jsonStringStory);
String[] st = objectMapper.readValue(jsonStringStory, String[].class);
log("Story einlesen fertig");
log("Item: " + jsonStringItem);
Item[] it = objectMapper.readValue(jsonStringItem, Item[].class);
log("Items einlesen fertig");
log("Puzzle: " + jsonStringPuzzle);
Puzzle[] pu = objectMapper.readValue(jsonStringPuzzle, Puzzle[].class);
log("Puzzles einlesen fertig");
log("Room: " + jsonStringRoom);
Room[] ro = objectMapper.readValue(jsonStringRoom, Room[].class);
rooms.addAll(Arrays.asList(ro));
log("Rooms einlesen fertig");
story.addAll(Arrays.asList(st));
items.addAll(Arrays.asList(it));
log("Items einlesen fertig");
rooms.addAll(Arrays.asList(ro));
puzzles.addAll(Arrays.asList(pu));
log("Puzzles einlesen fertig");
story.addAll(Arrays.asList(st));
log("Story einlesen fertig");
return jsonMap;
@@ -126,16 +125,14 @@ public class Game {
readJSON();
log("JSON einlesen beendet");
currentRoom = rooms.get(0);
log("Aktueller Raum: " + currentRoom.getName());
stoppFlag = false;
inventory = new ArrayList<>();
}
public String prepareInput(String s) {
s = s.replace("ä", "ae");
s = s.replace("ü", "ue");
s = s.replace("ö", "oe");
//s = s.replace("ä", "ae");
//s = s.replace("ü", "ue");
//s = s.replace("ö", "oe");
s = s.replace("ß", "ss");
s = s.toLowerCase();
return s;
@@ -144,10 +141,21 @@ public class Game {
public void play() throws Exception {
log("play()");
log("Input: " + input);
log("Aktueller Raum " + currentRoom.getName());
for (int i = 0; i < currentRoom.puzzles.size(); i++) {
log("Puzzle: " + getPuzzleById(currentRoom.puzzles.get(i)).getName() + " ID: " + getPuzzleById(currentRoom.puzzles.get(i)).getId());
}
for (int i = 0; i < currentRoom.items.size(); i++) {
log("Item: " + getItemById(currentRoom.items.get(i)).getName() + " ID: " + getItemById(currentRoom.items.get(i)).getId());
}
input = prepareInput(input);
log("vor if");
if (input.contains(" ")) {
log("if");
inputArray = input.split(" ");
for (String s : inputArray) {
@@ -168,6 +176,7 @@ public class Game {
intentName = input;
log("intentName: " + intentName);
}
log("vor switch");
switch (intentName) {
//intent
@@ -265,6 +274,7 @@ public class Game {
if (stoppFlag == true) {
endGame();
}
}
public Item getItemByName(String s) throws Exception {
@@ -289,27 +299,27 @@ public class Game {
return null;
}
public Room getRoomById(Integer i) {
public Room getRoomById(Integer i) throws Exception {
for (int j = 0; j < rooms.size(); j++) {
if (rooms.get(j).getId() == i) {
if (Objects.equals(i, rooms.get(j).getId())) {
return rooms.get(j);
}
}
return null;
}
public Item getItemById(Integer i) {
public Item getItemById(Integer i) throws Exception {
for (int j = 0; j < items.size(); j++) {
if (items.get(j).getId() == i) {
if (Objects.equals(items.get(j).getId(), i)) {
return items.get(j);
}
}
return null;
}
public Puzzle getPuzzleById(Integer i) {
public Puzzle getPuzzleById(Integer i) throws Exception {
for (int j = 0; j < puzzles.size(); j++) {
if (puzzles.get(j).getId() == i) {
if (Objects.equals(puzzles.get(j).getId(), i)) {
return puzzles.get(j);
}
}
@@ -324,7 +334,7 @@ public class Game {
//add reuqest header
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("User-Agent", "Mozilla/5.0");
httpConn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
httpConn.setRequestProperty("Accept-Language", "de-DE,de;q=0.5");
// Send post request
httpConn.setDoOutput(true);
@@ -359,7 +369,7 @@ public class Game {
}
public void startGame() throws Exception {
log("startGame()" + ".");
log("startGame()");
say(story.get(0));
}
@@ -378,7 +388,7 @@ public class Game {
say(currentPuzzle.getDescription() + ".");
return;
} else {
say("");
log("Else Reset");
};
}
@@ -392,7 +402,7 @@ public class Game {
say(currentItem.getDescription());
return;
} else {
say("");
log("Else Inspect");
};
}
}
@@ -412,7 +422,7 @@ public class Game {
//add reuqest header
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("User-Agent", "Mozilla/5.0");
httpConn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
httpConn.setRequestProperty("Accept-Language", "de-DE,de;q=0.5");
// Send post request
httpConn.setDoOutput(true);
@@ -449,26 +459,25 @@ public class Game {
public void setRoom(Room nextRoom) throws Exception {
log("setRoom(" + nextRoom.getName() + ")");
log(nextRoom.getDescription());
currentRoom = null;
currentRoom = nextRoom;
}
public void examine() throws Exception {
log("examine() : " + getInventory());
String s = "In deinen Taschen befindet sich: ";
if (getInventory().isEmpty()) {
say("Deine Taschen sind leer.");
} else if (inventory.size() >= 1) {
say("In deinen Taschen befindet sich: ");
}
} else {
inventory.forEach((bag) -> {
try {
say(bag.getName() + ".");
} catch (Exception ex) {
Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex);
for (int i = 0; i < inventory.size(); i++) {
s = s + " " + inventory.get(i).getName();
}
});
say(s);
}
}
public void open(Puzzle currentPuzzle) throws Exception {
@@ -477,15 +486,12 @@ public class Game {
if (currentPuzzle.isSolved()) // bereits gelöst
{
log("Bereits gelöst: " + currentPuzzle.isSolved());
say(currentPuzzle.getName() + "ist bereits geöffnet.");
if (currentPuzzle.getNextRoom() != null) // wenn es eine Tür ist die in den nächsten Raum führt
{
say("Sie betreten den nächsten Raum.");
say("das Räsel ist bereits gelöst. Sie betreten den nächsten Raum.");
log("nächster Raum: " + currentPuzzle.getNextRoom());
setRoom(getRoomById(currentPuzzle.getNextRoom())); // wechselt in den nächsten Raum
lookaround();
}
return;
}
log(" " + checkDependency(currentPuzzle));
if (!checkDependency(currentPuzzle)) // ist keine Abhängigkeit vorhanden oder aber die Abhängigkeit ist gelöst
@@ -500,15 +506,17 @@ public class Game {
if (checkGameOver(currentPuzzle)) // Wenn es das letzte Rätsel im Spiel war oder man vom Angreifer erwischt wurde
{
log("Gameover");
stoppFlag = true; // Spiel wird nun beendet
log("Gameover");
}
if (currentPuzzle.getNextRoom() != null) // wenn es eine Tür ist die in den nächsten Raum führt
{
log("Nächster Raum: " + getRoomById(currentPuzzle.getNextRoom()).getName());
log(currentPuzzle.getNextRoom() + "");
setRoom(getRoomById(currentPuzzle.getNextRoom())); // wechselt in den nächsten Raum
log(currentRoom.getName() + " " + currentRoom.getDescription());
lookaround();
}
} else // Item zum lösen fehlt
{
@@ -529,10 +537,14 @@ public class Game {
return true;
}
if (getPuzzleById(currentPuzzle.getDependency()) != null) {
if (getPuzzleById(currentPuzzle.getDependency()).isSolved()) {
return true;
try {
if (getPuzzleById(currentPuzzle.getDependency()) != null) {
if (getPuzzleById(currentPuzzle.getDependency()).isSolved()) {
return true;
}
}
} catch (Exception ex) {
Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
@@ -561,7 +573,7 @@ public class Game {
}
}
public boolean checkPuzzleItemsInInventory(Puzzle currentPuzzle) { // checkt ob ob alle Items benötigten Items im Inventar sind oder ob Items gebraucht werden
public boolean checkPuzzleItemsInInventory(Puzzle currentPuzzle) throws Exception { // checkt ob ob alle Items benötigten Items im Inventar sind oder ob Items gebraucht werden
if (currentPuzzle.getItems().isEmpty()) { // keine Items zum lösen notwendig
return true;
} else { // durchsucht ob alle nötigen Items im Inventar sind

+ 388
- 226
src/java/Logic.java View File

@@ -9,7 +9,9 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import static java.nio.charset.StandardCharsets.UTF_8;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
@@ -25,246 +27,406 @@ import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = {"/IO"})
public class Logic extends HttpServlet {
private ArrayList<Game> games = new ArrayList<>();
private ArrayList<Game> games = new ArrayList<>();
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* 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 = "";
String input = null;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* 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 = "";
String input = null;
@Override
public void init() {
try {
resetJSON();
} catch (FileNotFoundException ex) {
Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void writeJSON(String s) throws FileNotFoundException
{
PrintWriter writer = null;
try {
writer = new PrintWriter("game.JSON", "UTF-8");
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
}
writer.println(s);
writer.close();
}
@Override
public void init() {
try {
resetJSON();
} catch (FileNotFoundException ex) {
Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void writeJSON(String s) throws Exception {
PrintWriter writer = new PrintWriter("game.JSON", "UTF-8");
if (s != null) {
writer.println(s);
}
writer.close();
}
public void resetJSON() throws FileNotFoundException {
public void resetJSON() throws FileNotFoundException {
File f = new File("game.JSON");
File f = new File("game.JSON");
if (f.exists()) {
f.delete();
}
if (f.exists()) {
f.delete();
}
if (!f.exists()) {
writeJSON("{\n" +
" \\\"room\\\": [\n" +
" {\n" +
" \\\"id\\\": 1,\n" +
" \\\"name\\\": \\\"Wohnzimmer\\\",\n" +
" \\\"description\\\": \\\"Der Flur ist lang und alt. Das kann man an den zerkratzten Tapeten, den Rissen in der Decke und am schimmligen Teppich erkennen. Der Anblick der entstellten Leiche mitten im Gang wirst du nie vergessen. An einem Ende des Raumes ist eine Stahltür und am anderen Ende die Badezimmertür, durch die du gekommen bist. Gleich daneben erkennst du eine eiserneTür. Gegenüber an der Wand steht eine alte hölzerne Kommode, in der zwei Schiebefächer fehlen. Alles in diesem Flur ist und vermutlich er selbst auch aus einem anderen Jahrhundert. Nur der Lichtschalter und die Deckenleuchten sehen eher neu aus. Beeil dich nun! Du hast nicht ewig Zeit\\\",\n" +
" \\\"items\\\": [\n" +
" 0,\n" +
" 1,\n" +
" 2,\n" +
" 3,\n" +
" 4,\n" +
" 5\n" +
" ],\n" +
" \\\"gameoverFlag\\\": false\n" +
" }\n" +
" ],\n" +
" \\\"puzzle\\\": [\n" +
" {\n" +
" \\\"id\\\": 0,\n" +
" \\\"name\\\": \\\"Lederjacke\\\",\n" +
" \\\"description\\\": \\\"Beim Schauen auf die schwarze Lederjacke kommt dir eine eher unkonventionelle Idee auf. Vielleicht ist ja da noch sein Handy oder Ähnliches drin, was dir helfen könnte hier rauszukommen.\\\",\n" +
" \\\"solvedText\\\": \\\"Du überlegst, wie du anfangen solltest. Nicht jeden Tag hast du die Möglichkeit eine muffelnde Leiche auszunehmen... Ohne auf den Kopf des jungen Mannes zu blicken durchsuchst du vorsichtig erst die zwei äußeren Taschen. Sind beide bis auf eine eklige Schleimschicht in der Linken leer. Nun versuchst du an die inneren Taschen heranzukommen. Dabeistreift deine rechte Hand das Blut der Leiche. Es ist zum Glück bereits getrocknet. In der inneren Brusttasche ertastest du ein paar Münzen und einen kleinen Schlüssel\\\",\n" +
" \\\"solved\\\": false,\n" +
" \\\"gameOverFlag\\\": false\n" +
" },\n" +
" {\n" +
" \\\"id\\\": 1,\n" +
" \\\"name\\\": \\\"Alte Kommode\\\",\n" +
" \\\"items\\\": [\n" +
" 4\n" +
" ],\n" +
" \\\"description\\\": \\\"Eine alte, kaputte Kommode. Drei Schiebefächer sind bis auf Staub und Spinnennetze komplett leer, Zwei fehlen und Eins ist verriegelt. An ihm ist eine Einkerbung füreinen Schlüssel. Vielleicht ist dort ja etwas nützliches drin.\\\",\n" +
" \\\"solvedText\\\": \\\"Der Schlüssel passt in die Einkerbung und vorsichtig drehst du das Schloss auf. Du ziehst langsam das Schiebefach heraus, doch dann kommt dir ein Klumpen Staub entgegen. Nachdem du dich ausgehustet hast, erkennst du zwei Gegenstände im Fach. Eine Notiz und einen Stahlschlüssel. Die Notiz sagt nur „Gut gemacht! Nur weiter so!“. Ist das hier für ihn ein Spiel oder was?\\\",\n" +
" \\\"dependencyText\\\": \\\"Du musst zuerst das Schloss öffnen!\\\",\n" +
" \\\"solved\\\": false,\n" +
" \\\"gameOverFlag\\\": false\n" +
" },\n" +
" {\n" +
" \\\"id\\\": 2,\n" +
" \\\"name\\\": \\\"Stahltür\\\",\n" +
" \\\"items\\\": [\n" +
" 5\n" +
" ],\n" +
" \\\"description\\\": \\\"Diese Tür ist aus Stahl und verriegelt. Wo geht es hier den weiter?\\\",\n" +
" \\\"solvedText\\\": \\\"Er passt ja! Du freust dich, doch womöglich solltest du das nicht tun, denn wer weiß, was sich weiter in diesem mysteriösen Gebäude verbirgt. Für den Anfang ist es gut erst einmal nicht mehr auf die entstellte Leiche des jungen Mannes starren zu müssen.\\\",\n" +
" \\\"dependencyText\\\": \\\"Da kommst du nicht durch.\\\",\n" +
" \\\"nextRoom\\\": 2,\n" +
" \\\"solved\\\": false,\n" +
" \\\"gameOverFlag\\\": false\n" +
" }\n" +
" ],\n" +
" \\\"item\\\": [\n" +
" {\n" +
" \\\"id\\\": 0,\n" +
" \\\"name\\\": \\\"Leiche\\\",\n" +
" \\\"description\\\": \\\"Der arme Junge! Wem ist er über den Weg gelaufen? Wem bist du über den Weg gelaufen? Was musst du bloß tun, damit du nicht genau so endest? Du bemühst dich auf keinenFall auf den Kopf des schwarzhaarigen Mannes zu blicken oder auf das, was noch davon übrig ist. Du schaust nur auf seine schwarze Lederjacke und gerätst ins Grübeln.\\\",\n" +
" \\\"portableFlag\\\": false,\n" +
" \\\"hiddenFlag\\\": false\n" +
" },\n" +
" {\n" +
" \\\"id\\\": 1,\n" +
" \\\"name\\\": \\\"Badezimmertür\\\",\n" +
" \\\"description\\\": \\\"Diese Tür ist nun verschlossen. Als zuvor das Licht ausgegangen ist, hat die Tür jemand zugeknallt oder dies geschah maschinell. Wobei an der Badezimmertür ist nichtsbesonderes zu erkennen, was wohl darauf hindeutet, dass der Entführer sie zugemacht hat\\\",\n" +
" \\\"portableFlag\\\": false,\n" +
" \\\"hiddenFlag\\\": false\n" +
" },\n" +
" {\n" +
" \\\"id\\\": 2,\n" +
" \\\"name\\\": \\\"Eiserne Tür\\\",\n" +
" \\\"description\\\": \\\"Die Tür ist aus Eisen. Da macht sich nichts dran. Die wurde von der anderen Seite geschlossen. Wenn der Entführer tatsächlich vorher hier in diesem Flur war und die Badezimmertür zugeknallt hat, dann ist er durch die hier wieder raus. Diese Tür zu nehmen ist vielleicht nicht zwingend die beste Wahl.\\\",\n" +
" \\\"portableFlag\\\": false,\n" +
" \\\"hiddenFlag\\\": false\n" +
" },\n" +
" {\n" +
" \\\"id\\\": 3,\n" +
" \\\"name\\\": \\\"Lichtschalter\\\",\n" +
" \\\"description\\\": \\\"Du solltest das Licht erst mal anlassen. Wer weiß, was sonst passieren kann.\\\",\n" +
" \\\"portableFlag\\\": false,\n" +
" \\\"hiddenFlag\\\": false\n" +
" },\n" +
" {\n" +
" \\\"id\\\": 4,\n" +
" \\\"name\\\": \\\"Kleiner Schlüssel\\\",\n" +
" \\\"portableFlag\\\": true,\n" +
" \\\"description\\\": \\\"Wozu könnte der denn passen? Sieht nicht wie ein Schlüssel für eine Tür aus. Dazu ist er viel zu klein.\\\",\n" +
" \\\"hiddenFlag\\\": false\n" +
" },\n" +
" {\n" +
" \\\"id\\\": 5,\n" +
" \\\"name\\\": \\\"Stahlschlüssel\\\",\n" +
" \\\"portableFlag\\\": true,\n" +
" \\\"description\\\": \\\"Dieser Schlüssel ist recht schwer. Der ist definitiv für eine der drei Türen im Flur hier.\\\",\n" +
" \\\"hiddenFlag\\\": false\n" +
" }\n" +
" ],\n" +
" \\\"story\\\": \\\"Deine Augen gewöhnen sich an das grelle Licht der Deckenleuchten und du versuchst kurz zu kapieren, was los ist. Du wurdest gekidnappt! Du bist irgendwo, wahrscheinlich in einem Keller eines Gebäudes. Nur wenige Meter vor dir auf dem alten Teppichboden liegt eine vollkommen entstellte Leiche. Der, der das getan hat, war höchstwahrscheinlich der selbe, der dich gekidnapp'd hat. Und offenbar spielt er hier ein Spiel mit dir, wenn du noch am Leben bist... Na gut, du hast ja keine Wahl. Finde heraus, was hier vor sich geht\\\"\n" +
"}");
}
try {
writeJSON("{" +
"\"room\": [{" +
"\"id\": 0," +
"\"name\": \"Keller\"," +
"\"description\": \"Ein alter modriger Keller. <break time=\\\"1s\\\"/> Es schimmelt überall und stinkt bestialisch. Vor dir liegt eine Leiche, im Raum steht ein Stuhl und ein Tisch. <break time=\\\"1s\\\"/> Am anderen Ende des Raumes ist ein Duschvorhang an der Wand aufgespannt.\"," +
"\"items\": [" +
"5," +
"7," +
"4," +
"0," +
"2," +
"6," +
"10" +
"]," +
"\"puzzles\": [" +
"9," +
"4," +
"0" +
"]," +
"\"gameoverFlag\": false" +
"}," +
"{" +
"\"id\": 5," +
"\"name\": \"Flur\"," +
"\"description\": \"<audio src=\\\"soundbank://soundlibrary/footsteps/wood/wood_06\\\"/> Ein langer Flur. Hier lebt schon lange niemand mehr. Die Tapeten hängen von den Wänden runter. Der Boden knarzt und es stinkt nach Schimmel und verbranntem. <break time=\\\"1s\\\"/> Im Gang ist ein Koffer und eine Truhe zu sehen. Daneben befindet sich eine Tür.\"," +
"\"items\": [" +
"7," +
"10" +
"]," +
"\"puzzles\": [" +
"12," +
"8," +
"11," +
"2" +
"]," +
"\"gameoverFlag\": false" +
"}," +
"{" +
"\"id\": 1," +
"\"name\": \"Erdgeschoss\"," +
"\"description\": \"Ein komplett ausgebrannter Raum. An den Wänden ist überall Ruß. <break time=\\\"1s\\\"/> Im Eck steht ein Kamin der wird wohl Grund für den Brand sein. Eine Kommode und ein Eimer befinden sich noch im Raum.\"," +
"\"items\": [" +
"1," +
"8," +
"3," +
"9" +
"]," +
"\"puzzles\": [" +
"5," +
"1," +
"3" +
"]," +
"\"gameoverFlag\": false" +
"}," +
"{" +
"\"id\": 2," +
"\"name\": \"Wohnzimmer\"," +
"\"description\": \"Ein eingestürzter Raum , hier hat das Feuer auch gewütet. Du kannst dich kaum bewegen.<break time=\\\"1s\\\"/> Es ist ein Fenster zu sehen von dem aus man raussehen kann und ein Wanddurchbruch der zugestellt ist.\"," +
"\"puzzles\": [" +
"7," +
"6" +
"]," +
"\"gameoverFlag\": false" +
"}" +
"]," +
"\"puzzle\": [{" +
"\"id\": 9," +
"\"name\": \"Schrank\"," +
"\"description\": \"<audio src=\\\"soundbank://soundlibrary/doors/doors_wood/wood_07\\\"/> Ein wackliger alter Vitrinenschrank.\"," +
"\"solvedText\": \"Leider nichts sinnvolles drin.\"," +
"\"solved\": false," +
"\"gameOverFlag\": false" +
"}," +
"{" +
"\"id\": 4," +
"\"name\": \"Duschvorhang\"," +
"\"description\": \"Ein schimmliger vergilbter Duschvorhang, es wirkt so als ob etwas dahinter wäre. Er lässt sich öffnen.\"," +
"\"solvedText\": \"Ja wohl, der Weg führt aus dem Zimmer raus <audio src=\\\"soundbank://soundlibrary/footsteps/wood/wood_06\\\"/> \"," +
"\"nextRoom\": 1," +
"\"solved\": false," +
"\"gameOverFlag\": false" +
"}," +
"{" +
"\"id\": 0," +
"\"name\": \"Lederjacke\"," +
"\"description\": \"Eine schwarze Lederjacke, Die Taschen sind leer, aber es ist irgendetwas im Saum, man sollte die Jacke mal öffnen.\"," +
"\"solvedText\": \"Ein bisschen Kleingeld und eine Notiz mit einem Zugangscode. Du solltest beides mitnehmen man kann sicher etwas davon gebrauchen.\"," +
"\"solved\": false," +
"\"gameOverFlag\": false" +
"}," +
"{" +
"\"id\": 3," +
"\"name\": \"Tuer\"," +
"\"description\": \"Eine Eisentür mit vielen Kerben. Sie ist voller Blut.\"," +
"\"solvedText\": \"Eine Treppe ist hinter der Tür. Sie führt in einen anderen Raum.\"," +
"\"dependencyText\": \"Du musst erst das Schloss öffnen das an der Tür hängt bevor du die Tür öffnen kannst.\"," +
"\"dependency\": 11," +
"\"nextRoom\": 2," +
"\"solved\": false," +
"\"gameOverFlag\": false" +
"}," +
"{" +
"\"id\": 8," +
"\"name\": \"Truhe\"," +
"\"description\": \"Eine Werkzeugkist mit ein paar abgenutzten Werkzeugen <audio src=\\\"soundbank://soundlibrary/metal/metal_12\\\"/>\"," +
"\"solvedText\": \"Du hast einen Schlüssel gefunden\"," +
"\"solved\": false," +
"\"gameOverFlag\": false" +
"}," +
"{" +
"\"id\": 11," +
"\"name\": \"Schloss\"," +
"\"items\": [" +
"10" +
"]," +
"\"description\": \"Ein massives elektronisches Metallschloss. \"," +
"\"solvedText\": \"<audio src=\\\"soundbank://soundlibrary/doors/doors_metal/metal_02\\\"/> Jetzt kannst du die Tür öffnen\"," +
"\"solved\": false," +
"\"gameOverFlag\": false" +
"}," +
"{" +
"\"id\": 2," +
"\"name\": \"Koffer\"," +
"\"description\": \"Ein abgenutzer Schalenkoffer mit aufgebrochenem Schloss\"," +
"\"solvedText\": \"<audio src=\\\"soundbank://soundlibrary/home/amzn_sfx_door_open_02\\\"/> Ein paar Klamotten liegen darin. Vielleicht kann man damit etwas anfangen\"," +
"\"solved\": false," +
"\"gameOverFlag\": false" +
"}," +
"{" +
"\"id\": 5," +
"\"name\": \"Tor\"," +
"\"items\": [" +
"9," +
"3" +
"]," +
"\"description\": \"Ein massives Stahltor . Das kriegt man mit bloßen Händen nicht auf\"," +
"\"solvedText\": \"<audio src=\\\"soundbank://soundlibrary/doors/doors_metal/metal_01\\\"/> Mit dem Dietrich öffnest du geschickt das Schloss. Du öffnest die Tür einen leichten Spalt dann klemmst du den Stock rein und mit einem leichten Hebel kannst du die Tür komplett aufmachen.Ein rußiger Geruch steigt dir in die Nase, nachdem du durch die Tür gehst.\"," +
"\"nextRoom\": 3," +
"\"solved\": false," +
"\"gameOverFlag\": false" +
"}," +
"{" +
"\"id\": 1," +
"\"name\": \"Kommode\"," +
"\"description\": \"Eine hölzerne Kommode\"," +
"\"solvedText\": \" <audio src=\\\"soundbank://soundlibrary/foley/amzn_sfx_wooden_door_creaks_long_01\\\"/> in den Schubladen findest du einen Stock. vielleicht ist er für etwas gut. Du solltest ihn mitnehmen.\"," +
"\"solved\": false," +
"\"gameOverFlag\": false" +
"}," +
"{" +
"\"id\": 3," +
"\"name\": \"Eiimer\"," +
"\"description\": \"Ein Tretmülleimer. Er klemmt etwas man sollte ihn mal öffnen vielleicht findet man etwas nützliches.\"," +
"\"solvedText\": \"<audio src=\\\"soundbank://soundlibrary/doors/doors_metal/metal_05\\\"/> Ein Dietrich. Den kann man sicher gut gebrauchen\"," +
"\"solved\": false," +
"\"gameOverFlag\": false" +
"}," +
"{" +
"\"id\": 7," +
"\"name\": \"Fenster\"," +
"\"description\": \"Ein Fenster mit Gitterstäben davor. Vielleicht kann man es öffnen.\"," +
"\"solvedText\": \"<audio src=\\\"soundbank://soundlibrary/metal/metal_10\\\"/> Leider sind die Gitterstäbe zu nah aneinander um sich durchzuzwängen. Du kannst aus dem Raum raus sehen. Vielleicht gibt es irgendwo eine Säge um die Stäbe durchzusägen.\"," +
"\"solved\": false," +
"\"gameOverFlag\": false" +
"}," +
"{" +
"\"id\": 6," +
"\"name\": \"Wanddurchbruch\"," +
"\"description\": \"Ein Wanddurchbruch, durch einen kleinen Spalt kann man raussehen. Ein Wellblechdach versperrt den Ausgang. Versuche den Wanddurchbruch weiter zu öffnen. Dann bist du deinem Ziel näher\"," +
"\"solvedText\": \"<audio src=\\\"soundbank://soundlibrary/human/amzn_sfx_human_walking_03\\\"/> Hurra. Du hast es Geschafft. Damit ist das Tutoriallevel beendet.\"," +
"\"gameOverFlag\": true," +
"\"solved\": false" +
"}" +
"]," +
"\"item\": [{" +
"\"id\": 6," +
"\"name\": \"Karte\"," +
"\"description\": \"Eine alte vergilbte Karte die am Tisch festgeklebt ist.\"," +
"\"portableFlag\": false," +
"\"hiddenFlag\": false" +
"}," +
"{" +
"\"id\": 5," +
"\"name\": \"Stuhl\"," +
"\"description\": \"Ein klappriger alter Holzstuhl. Der ist zu nichts zu gebrauchen.\"," +
"\"portableFlag\": false," +
"\"hiddenFlag\": false" +
"}," +
"{" +
"\"id\": 7," +
"\"name\": \"Klamotten\"," +
"\"portableFlag\": true," +
"\"description\": \"Ein paar zerfranste alte Kleidungsstücke\"," +
"\"hiddenFlag\": false" +
"}," +
"{" +
"\"id\": 4," +
"\"name\": \"Tisch\"," +
"\"description\": \"Ein stabiler, massiver Holztisch. Zu schwer um ihn zu bewegen. Schade den hätte man sicher für etwas hernehmen können. Eine Karte klebt auf dem Tisch.\"," +
"\"portableFlag\": false," +
"\"hiddenFlag\": false" +
"}," +
"{" +
"\"id\": 0," +
"\"name\": \"Leiche\"," +
"\"description\": \"Ein armer Kerl. Der liegt hier sicher schon seit Wochen. Er stinkt bestialisch. Vielleicht hat er in seiner Lederjacke etwas bei sich das dir hilft.\"," +
"\"portableFlag\": false," +
"\"hiddenFlag\": false" +
"}," +
"{" +
"\"id\": 2," +
"\"name\": \"Kleingeld\"," +
"\"portableFlag\": true," +
"\"description\": \"Etwas Kleingeld. Nicht der Rede Wert.\"," +
"\"hiddenFlag\": false" +
"}," +
"{" +
"\"id\": 10," +
"\"name\": \"Zugangscode\"," +
"\"portableFlag\": true," +
"\"description\": \"Ein Zugangscode für ein elektronisches Scloss. Was der wohl öffnet?\"," +
"\"hiddenFlag\": false" +
"}," +
"{" +
"\"id\": 1," +
"\"name\": \"Seil\"," +
"\"portableFlag\": true," +
"\"description\": \"Ein stabiles Seil, damit kann man sicher etwas festbinden oder irgendwo herunterklettern.\"," +
"\"hiddenFlag\": false" +
"}," +
"{" +
"\"id\": 8," +
"\"name\": \"Kamin\"," +
"\"description\": \"Ein verrußter Kamin, das ist sicher der Grund weshalb es hier gebrannt hat. Der Schonstein ist leider zu klein um hier raus zu kommen.\"," +
"\"portableFlag\": false," +
"\"hiddenFlag\": false" +
"}," +
"{" +
"\"id\": 3," +
"\"name\": \"Dietrich\"," +
"\"portableFlag\": true," +
"\"description\": \"Ein Dietrich, vielleicht öffnet er das ein oder andere Schloss\"," +
"\"hiddenFlag\": false" +
"}," +
"{" +
"\"id\": 9," +
"\"name\": \"Stock\"," +
"\"portableFlag\": true," +
"\"description\": \"Ein stabiler Holzstock. Damit kann man sich vielleicht verteidigen\"," +
"\"hiddenFlag\": false" +
"}" +
"]," +
"\"story\": [" +
"\"<audio src=\\\"soundbank://soundlibrary/household/lamps_lanterns/lamps_lanterns_02\\\"/> Du wachst auf, dir tut alles weh. Du hast Schmerzen dabei die Augen zu öffnen. Langsam gewöhnen sich deine Augen an das grelle Licht der Deckenleuchten. Wo bist du und wie bist du hier hergekommen. Es stinkt fürchterlich. Vor die liegt ein lebloser Körper, der Gestank kommt daher. Wenn du nicht so enden willst wie er solltest du hier schleunigst verschwinden\"" +
"]" +
"}");
} catch (Exception ex) {
Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
}
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("level-reset") != null)
{
resetJSON();
}
if(request.getParameter("level-submit") != null)
{
writeJSON(request.getParameter("level-submit"));
}
if (request.getParameter("alexaText") != null) {
context = request.getParameter("alexaText");
}
// String deviceId = request.getParameter("deviceId");
out.println(context);
}
input = request.getParameter("intent");
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, Exception {
if (request.getParameter("slot") != null) {
input = input + " " + request.getParameter("slot");
}
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
if (input != null) {
if (games.isEmpty()) {
games.add(new Game());
//games.add(new Game(deviceId));
}
/*
for(int i = 0; i < games.size(); i++)
{
if(games.get(i).getId() == deviceId)
{
games.get(i).setInput(input);
games.get(i).play();
}
}*/
games.get(0).setInput(input);
games.get(0).play();
}
input = null;
}
}
if (request.getParameter("levelreset") != null) {
out.println("reset");
resetJSON();
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> 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);
if (request.getParameter("levelsubmit") != null) {
out.println("submit");
writeJSON(Arrays.toString(request.getParameterValues("levelsubmit")) + "");
}
} catch (Exception ex) {
Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
}
}
if (request.getParameter("alexaText") != null) {
context = new String(request.getParameter("alexaText").getBytes(UTF_8));
}
// String deviceId = request.getParameter("deviceId");
/**
* Handles the HTTP <code>POST</code> 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);
}
}
out.println(context);
input = request.getParameter("intent");
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
if (request.getParameter("slot") != null) {
input = input + " " + request.getParameter("slot");
}
if (input != null) {
if (games.isEmpty()) {
games.add(new Game());
//games.add(new Game(deviceId));
}
/*
for(int i = 0; i < games.size(); i++)
{
if(games.get(i).getId() == deviceId)
{
games.get(i).setInput(input);
games.get(i).play();
}
}*/
games.get(0).setInput(input);
games.get(0).play();
}
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> 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", 1);
try {
processRequest(request, response);
} catch (Exception ex) {
Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Handles the HTTP <code>POST</code> 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", 1);
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";
}// </editor-fold>
}

+ 1
- 0
web/deps/opt/bootstrap.css View File

@@ -4,6 +4,7 @@
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */

html {
font-family: sans-serif;
-webkit-text-size-adjust: 100%;

+ 243
- 240
web/index.html
File diff suppressed because it is too large
View File


Loading…
Cancel
Save