You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Logic.java 18KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. import java.io.File;
  7. import java.io.FileNotFoundException;
  8. import java.io.IOException;
  9. import java.io.PrintWriter;
  10. import java.io.UnsupportedEncodingException;
  11. import static java.nio.charset.StandardCharsets.UTF_8;
  12. import java.util.ArrayList;
  13. import java.util.Arrays;
  14. import java.util.logging.Level;
  15. import java.util.logging.Logger;
  16. import javax.servlet.ServletException;
  17. import javax.servlet.annotation.WebServlet;
  18. import javax.servlet.http.HttpServlet;
  19. import javax.servlet.http.HttpServletRequest;
  20. import javax.servlet.http.HttpServletResponse;
  21. /**
  22. *
  23. * @author Edi
  24. */
  25. @WebServlet(urlPatterns = {"/IO"})
  26. public class Logic extends HttpServlet {
  27. private ArrayList<Game> games = new ArrayList<>();
  28. /**
  29. * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
  30. * methods.
  31. *
  32. * @param request servlet request
  33. * @param response servlet response
  34. * @throws ServletException if a servlet-specific error occurs
  35. * @throws IOException if an I/O error occurs
  36. */
  37. String context = "";
  38. String input = null;
  39. @Override
  40. public void init() {
  41. try {
  42. resetJSON();
  43. } catch (FileNotFoundException ex) {
  44. Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
  45. }
  46. }
  47. public void writeJSON(String s) throws Exception {
  48. PrintWriter writer = new PrintWriter("game.JSON", "UTF-8");
  49. if (s != null) {
  50. writer.println(s);
  51. }
  52. writer.close();
  53. }
  54. public void resetJSON() throws FileNotFoundException {
  55. File f = new File("game.JSON");
  56. if (f.exists()) {
  57. f.delete();
  58. }
  59. try {
  60. writeJSON("{" +
  61. "\"room\": [{" +
  62. "\"id\": 0," +
  63. "\"name\": \"Keller\"," +
  64. "\"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.\"," +
  65. "\"items\": [" +
  66. "5," +
  67. "7," +
  68. "4," +
  69. "0," +
  70. "2," +
  71. "6," +
  72. "10" +
  73. "]," +
  74. "\"puzzles\": [" +
  75. "9," +
  76. "4," +
  77. "0" +
  78. "]," +
  79. "\"gameoverFlag\": false" +
  80. "}," +
  81. "{" +
  82. "\"id\": 5," +
  83. "\"name\": \"Flur\"," +
  84. "\"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.\"," +
  85. "\"items\": [" +
  86. "7," +
  87. "10" +
  88. "]," +
  89. "\"puzzles\": [" +
  90. "12," +
  91. "8," +
  92. "11," +
  93. "2" +
  94. "]," +
  95. "\"gameoverFlag\": false" +
  96. "}," +
  97. "{" +
  98. "\"id\": 1," +
  99. "\"name\": \"Erdgeschoss\"," +
  100. "\"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.\"," +
  101. "\"items\": [" +
  102. "1," +
  103. "8," +
  104. "3," +
  105. "9" +
  106. "]," +
  107. "\"puzzles\": [" +
  108. "5," +
  109. "1," +
  110. "3" +
  111. "]," +
  112. "\"gameoverFlag\": false" +
  113. "}," +
  114. "{" +
  115. "\"id\": 2," +
  116. "\"name\": \"Wohnzimmer\"," +
  117. "\"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.\"," +
  118. "\"puzzles\": [" +
  119. "7," +
  120. "6" +
  121. "]," +
  122. "\"gameoverFlag\": false" +
  123. "}" +
  124. "]," +
  125. "\"puzzle\": [{" +
  126. "\"id\": 9," +
  127. "\"name\": \"Schrank\"," +
  128. "\"description\": \"<audio src=\\\"soundbank://soundlibrary/doors/doors_wood/wood_07\\\"/> Ein wackliger alter Vitrinenschrank.\"," +
  129. "\"solvedText\": \"Leider nichts sinnvolles drin.\"," +
  130. "\"solved\": false," +
  131. "\"gameOverFlag\": false" +
  132. "}," +
  133. "{" +
  134. "\"id\": 4," +
  135. "\"name\": \"Duschvorhang\"," +
  136. "\"description\": \"Ein schimmliger vergilbter Duschvorhang, es wirkt so als ob etwas dahinter wäre. Er lässt sich öffnen.\"," +
  137. "\"solvedText\": \"Ja wohl, der Weg führt aus dem Zimmer raus <audio src=\\\"soundbank://soundlibrary/footsteps/wood/wood_06\\\"/> \"," +
  138. "\"nextRoom\": 1," +
  139. "\"solved\": false," +
  140. "\"gameOverFlag\": false" +
  141. "}," +
  142. "{" +
  143. "\"id\": 0," +
  144. "\"name\": \"Lederjacke\"," +
  145. "\"description\": \"Eine schwarze Lederjacke, Die Taschen sind leer, aber es ist irgendetwas im Saum, man sollte die Jacke mal öffnen.\"," +
  146. "\"solvedText\": \"Ein bisschen Kleingeld und eine Notiz mit einem Zugangscode. Du solltest beides mitnehmen man kann sicher etwas davon gebrauchen.\"," +
  147. "\"solved\": false," +
  148. "\"gameOverFlag\": false" +
  149. "}," +
  150. "{" +
  151. "\"id\": 3," +
  152. "\"name\": \"Tuer\"," +
  153. "\"description\": \"Eine Eisentür mit vielen Kerben. Sie ist voller Blut.\"," +
  154. "\"solvedText\": \"Eine Treppe ist hinter der Tür. Sie führt in einen anderen Raum.\"," +
  155. "\"dependencyText\": \"Du musst erst das Schloss öffnen das an der Tür hängt bevor du die Tür öffnen kannst.\"," +
  156. "\"dependency\": 11," +
  157. "\"nextRoom\": 2," +
  158. "\"solved\": false," +
  159. "\"gameOverFlag\": false" +
  160. "}," +
  161. "{" +
  162. "\"id\": 8," +
  163. "\"name\": \"Truhe\"," +
  164. "\"description\": \"Eine Werkzeugkist mit ein paar abgenutzten Werkzeugen <audio src=\\\"soundbank://soundlibrary/metal/metal_12\\\"/>\"," +
  165. "\"solvedText\": \"Du hast einen Schlüssel gefunden\"," +
  166. "\"solved\": false," +
  167. "\"gameOverFlag\": false" +
  168. "}," +
  169. "{" +
  170. "\"id\": 11," +
  171. "\"name\": \"Schloss\"," +
  172. "\"items\": [" +
  173. "10" +
  174. "]," +
  175. "\"description\": \"Ein massives elektronisches Metallschloss. \"," +
  176. "\"solvedText\": \"<audio src=\\\"soundbank://soundlibrary/doors/doors_metal/metal_02\\\"/> Jetzt kannst du die Tür öffnen\"," +
  177. "\"solved\": false," +
  178. "\"gameOverFlag\": false" +
  179. "}," +
  180. "{" +
  181. "\"id\": 2," +
  182. "\"name\": \"Koffer\"," +
  183. "\"description\": \"Ein abgenutzer Schalenkoffer mit aufgebrochenem Schloss\"," +
  184. "\"solvedText\": \"<audio src=\\\"soundbank://soundlibrary/home/amzn_sfx_door_open_02\\\"/> Ein paar Klamotten liegen darin. Vielleicht kann man damit etwas anfangen\"," +
  185. "\"solved\": false," +
  186. "\"gameOverFlag\": false" +
  187. "}," +
  188. "{" +
  189. "\"id\": 5," +
  190. "\"name\": \"Tor\"," +
  191. "\"items\": [" +
  192. "9," +
  193. "3" +
  194. "]," +
  195. "\"description\": \"Ein massives Stahltor . Das kriegt man mit bloßen Händen nicht auf\"," +
  196. "\"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.\"," +
  197. "\"nextRoom\": 3," +
  198. "\"solved\": false," +
  199. "\"gameOverFlag\": false" +
  200. "}," +
  201. "{" +
  202. "\"id\": 1," +
  203. "\"name\": \"Kommode\"," +
  204. "\"description\": \"Eine hölzerne Kommode\"," +
  205. "\"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.\"," +
  206. "\"solved\": false," +
  207. "\"gameOverFlag\": false" +
  208. "}," +
  209. "{" +
  210. "\"id\": 3," +
  211. "\"name\": \"Eiimer\"," +
  212. "\"description\": \"Ein Tretmülleimer. Er klemmt etwas man sollte ihn mal öffnen vielleicht findet man etwas nützliches.\"," +
  213. "\"solvedText\": \"<audio src=\\\"soundbank://soundlibrary/doors/doors_metal/metal_05\\\"/> Ein Dietrich. Den kann man sicher gut gebrauchen\"," +
  214. "\"solved\": false," +
  215. "\"gameOverFlag\": false" +
  216. "}," +
  217. "{" +
  218. "\"id\": 7," +
  219. "\"name\": \"Fenster\"," +
  220. "\"description\": \"Ein Fenster mit Gitterstäben davor. Vielleicht kann man es öffnen.\"," +
  221. "\"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.\"," +
  222. "\"solved\": false," +
  223. "\"gameOverFlag\": false" +
  224. "}," +
  225. "{" +
  226. "\"id\": 6," +
  227. "\"name\": \"Wanddurchbruch\"," +
  228. "\"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\"," +
  229. "\"solvedText\": \"<audio src=\\\"soundbank://soundlibrary/human/amzn_sfx_human_walking_03\\\"/> Hurra. Du hast es Geschafft. Damit ist das Tutoriallevel beendet.\"," +
  230. "\"gameOverFlag\": true," +
  231. "\"solved\": false" +
  232. "}" +
  233. "]," +
  234. "\"item\": [{" +
  235. "\"id\": 6," +
  236. "\"name\": \"Karte\"," +
  237. "\"description\": \"Eine alte vergilbte Karte die am Tisch festgeklebt ist.\"," +
  238. "\"portableFlag\": false," +
  239. "\"hiddenFlag\": false" +
  240. "}," +
  241. "{" +
  242. "\"id\": 5," +
  243. "\"name\": \"Stuhl\"," +
  244. "\"description\": \"Ein klappriger alter Holzstuhl. Der ist zu nichts zu gebrauchen.\"," +
  245. "\"portableFlag\": false," +
  246. "\"hiddenFlag\": false" +
  247. "}," +
  248. "{" +
  249. "\"id\": 7," +
  250. "\"name\": \"Klamotten\"," +
  251. "\"portableFlag\": true," +
  252. "\"description\": \"Ein paar zerfranste alte Kleidungsstücke\"," +
  253. "\"hiddenFlag\": false" +
  254. "}," +
  255. "{" +
  256. "\"id\": 4," +
  257. "\"name\": \"Tisch\"," +
  258. "\"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.\"," +
  259. "\"portableFlag\": false," +
  260. "\"hiddenFlag\": false" +
  261. "}," +
  262. "{" +
  263. "\"id\": 0," +
  264. "\"name\": \"Leiche\"," +
  265. "\"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.\"," +
  266. "\"portableFlag\": false," +
  267. "\"hiddenFlag\": false" +
  268. "}," +
  269. "{" +
  270. "\"id\": 2," +
  271. "\"name\": \"Kleingeld\"," +
  272. "\"portableFlag\": true," +
  273. "\"description\": \"Etwas Kleingeld. Nicht der Rede Wert.\"," +
  274. "\"hiddenFlag\": false" +
  275. "}," +
  276. "{" +
  277. "\"id\": 10," +
  278. "\"name\": \"Zugangscode\"," +
  279. "\"portableFlag\": true," +
  280. "\"description\": \"Ein Zugangscode für ein elektronisches Scloss. Was der wohl öffnet?\"," +
  281. "\"hiddenFlag\": false" +
  282. "}," +
  283. "{" +
  284. "\"id\": 1," +
  285. "\"name\": \"Seil\"," +
  286. "\"portableFlag\": true," +
  287. "\"description\": \"Ein stabiles Seil, damit kann man sicher etwas festbinden oder irgendwo herunterklettern.\"," +
  288. "\"hiddenFlag\": false" +
  289. "}," +
  290. "{" +
  291. "\"id\": 8," +
  292. "\"name\": \"Kamin\"," +
  293. "\"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.\"," +
  294. "\"portableFlag\": false," +
  295. "\"hiddenFlag\": false" +
  296. "}," +
  297. "{" +
  298. "\"id\": 3," +
  299. "\"name\": \"Dietrich\"," +
  300. "\"portableFlag\": true," +
  301. "\"description\": \"Ein Dietrich, vielleicht öffnet er das ein oder andere Schloss\"," +
  302. "\"hiddenFlag\": false" +
  303. "}," +
  304. "{" +
  305. "\"id\": 9," +
  306. "\"name\": \"Stock\"," +
  307. "\"portableFlag\": true," +
  308. "\"description\": \"Ein stabiler Holzstock. Damit kann man sich vielleicht verteidigen\"," +
  309. "\"hiddenFlag\": false" +
  310. "}" +
  311. "]," +
  312. "\"story\": [" +
  313. "\"<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\"" +
  314. "]" +
  315. "}");
  316. } catch (Exception ex) {
  317. Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
  318. }
  319. }
  320. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  321. throws ServletException, IOException, Exception {
  322. try (PrintWriter out = response.getWriter()) {
  323. /* TODO output your page here. You may use following sample code. */
  324. if (request.getParameter("levelreset") != null) {
  325. out.println("reset");
  326. resetJSON();
  327. }
  328. if (request.getParameter("levelsubmit") != null) {
  329. out.println("submit");
  330. writeJSON(Arrays.toString(request.getParameterValues("levelsubmit")) + "");
  331. }
  332. if (request.getParameter("alexaText") != null) {
  333. context = new String(request.getParameter("alexaText").getBytes(UTF_8));
  334. }
  335. // String deviceId = request.getParameter("deviceId");
  336. out.println(context);
  337. input = request.getParameter("intent");
  338. if (request.getParameter("slot") != null) {
  339. input = input + " " + request.getParameter("slot");
  340. }
  341. if (input != null) {
  342. if (games.isEmpty()) {
  343. games.add(new Game());
  344. //games.add(new Game(deviceId));
  345. }
  346. /*
  347. for(int i = 0; i < games.size(); i++)
  348. {
  349. if(games.get(i).getId() == deviceId)
  350. {
  351. games.get(i).setInput(input);
  352. games.get(i).play();
  353. }
  354. }*/
  355. games.get(0).setInput(input);
  356. games.get(0).play();
  357. }
  358. }
  359. }
  360. // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
  361. /**
  362. * Handles the HTTP <code>GET</code> method.
  363. *
  364. * @param request servlet request
  365. * @param response servlet response
  366. * @throws ServletException if a servlet-specific error occurs
  367. * @throws IOException if an I/O error occurs
  368. */
  369. @Override
  370. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  371. throws ServletException, IOException {
  372. response.setIntHeader("Refresh", 1);
  373. try {
  374. processRequest(request, response);
  375. } catch (Exception ex) {
  376. Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
  377. }
  378. }
  379. /**
  380. * Handles the HTTP <code>POST</code> method.
  381. *
  382. * @param request servlet request
  383. * @param response servlet response
  384. * @throws ServletException if a servlet-specific error occurs
  385. * @throws IOException if an I/O error occurs
  386. */
  387. @Override
  388. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  389. throws ServletException, IOException {
  390. response.setIntHeader("Refresh", 1);
  391. try {
  392. processRequest(request, response);
  393. } catch (Exception ex) {
  394. Logger.getLogger(Logic.class.getName()).log(Level.SEVERE, null, ex);
  395. }
  396. }
  397. /**
  398. * Returns a short description of the servlet.
  399. *
  400. * @return a String containing servlet description
  401. */
  402. @Override
  403. public String getServletInfo() {
  404. return "Short description";
  405. }// </editor-fold>
  406. }