From 83fa5f1f584e3e8c55764c961c9c9b895920db36 Mon Sep 17 00:00:00 2001 From: nikitatarasenko108 Date: Tue, 10 Feb 2026 12:07:51 +0530 Subject: [PATCH] quest --- pom.xml | 9 ++-- .../java/com/javarush/khmelov/cmd/Quest.java | 47 +++++++++++++++++ .../com/javarush/khmelov/quest/Answer.java | 20 ++++++++ .../com/javarush/khmelov/quest/Question.java | 33 ++++++++++++ .../khmelov/repository/QuestRepository.java | 34 +++++++++++++ .../javarush/khmelov/something/AllQuests.java | 19 +++++++ .../javarush/khmelov/something/Create.java | 34 +++++++++++++ .../javarush/khmelov/something/NewQuest.java | 30 +++++++++++ .../com/javarush/khmelov/something/Play.java | 51 +++++++++++++++++++ src/main/webapp/WEB-INF/allQuests.jsp | 21 ++++++++ src/main/webapp/WEB-INF/create.jsp | 41 +++++++++++++++ src/main/webapp/WEB-INF/game.jsp | 29 +++++++++++ src/main/webapp/WEB-INF/lose.jsp | 18 +++++++ src/main/webapp/WEB-INF/quest.jsp | 28 ++++++++++ src/main/webapp/WEB-INF/start-page.jsp | 2 + src/main/webapp/WEB-INF/win.jsp | 19 +++++++ 16 files changed, 431 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/javarush/khmelov/cmd/Quest.java create mode 100644 src/main/java/com/javarush/khmelov/quest/Answer.java create mode 100644 src/main/java/com/javarush/khmelov/quest/Question.java create mode 100644 src/main/java/com/javarush/khmelov/repository/QuestRepository.java create mode 100644 src/main/java/com/javarush/khmelov/something/AllQuests.java create mode 100644 src/main/java/com/javarush/khmelov/something/Create.java create mode 100644 src/main/java/com/javarush/khmelov/something/NewQuest.java create mode 100644 src/main/java/com/javarush/khmelov/something/Play.java create mode 100644 src/main/webapp/WEB-INF/allQuests.jsp create mode 100644 src/main/webapp/WEB-INF/create.jsp create mode 100644 src/main/webapp/WEB-INF/game.jsp create mode 100644 src/main/webapp/WEB-INF/lose.jsp create mode 100644 src/main/webapp/WEB-INF/quest.jsp create mode 100644 src/main/webapp/WEB-INF/win.jsp diff --git a/pom.xml b/pom.xml index 78ee59d..81b4a67 100644 --- a/pom.xml +++ b/pom.xml @@ -51,10 +51,11 @@ - org.projectlombok - lombok - provided - + org.projectlombok + lombok + 1.18.38 + provided + org.junit.jupiter junit-jupiter-api diff --git a/src/main/java/com/javarush/khmelov/cmd/Quest.java b/src/main/java/com/javarush/khmelov/cmd/Quest.java new file mode 100644 index 0000000..bf2c10f --- /dev/null +++ b/src/main/java/com/javarush/khmelov/cmd/Quest.java @@ -0,0 +1,47 @@ +package com.javarush.khmelov.cmd; + +import com.javarush.khmelov.quest.Answer; +import com.javarush.khmelov.quest.Question; +import lombok.Getter; +import lombok.Setter; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; + +public class Quest { + static AtomicInteger atomicInteger = new AtomicInteger(0); + @Setter + @Getter + String win; + @Getter + int id = atomicInteger.getAndIncrement(); + @Getter + String name; + + public Quest(String name){ + this.name = name; + } + + Map questions = new HashMap<>(); + Map loseMap = new HashMap<>(); + public Question getQuestionById(int i){ + return questions.get(i); + } + public void crete(int i,String first, String second, String third, String lose){ + questions.put(i, + new Question( + i, + first, + List.of(new Answer(second,1), + new Answer(third,2)) + + )); + loseMap.put(i,lose); + } + + public String lose(int id){ + return loseMap.get(id); + } +} diff --git a/src/main/java/com/javarush/khmelov/quest/Answer.java b/src/main/java/com/javarush/khmelov/quest/Answer.java new file mode 100644 index 0000000..988478e --- /dev/null +++ b/src/main/java/com/javarush/khmelov/quest/Answer.java @@ -0,0 +1,20 @@ +package com.javarush.khmelov.quest; + + +public class Answer { + String text; + int id; + public Answer(String text,int id) { + this.text = text; + this.id = id; + } + + public String getText() { + return text; + } + + public int getId() { + return id; + } +} + diff --git a/src/main/java/com/javarush/khmelov/quest/Question.java b/src/main/java/com/javarush/khmelov/quest/Question.java new file mode 100644 index 0000000..7e2176a --- /dev/null +++ b/src/main/java/com/javarush/khmelov/quest/Question.java @@ -0,0 +1,33 @@ +package com.javarush.khmelov.quest; + + +import java.util.List; + +public class Question { + private final int id; + private final String text; + private final List answers; + + public Question(int id, String text, List answers) { + this.id = id; + this.text = text; + this.answers = answers; + } + + + // Тоже добавь геттеры + + + + public int getId() { + return id; + } + + public String getText() { + return text; + } + + public List getAnswers() { + return answers; + } +} diff --git a/src/main/java/com/javarush/khmelov/repository/QuestRepository.java b/src/main/java/com/javarush/khmelov/repository/QuestRepository.java new file mode 100644 index 0000000..8963753 --- /dev/null +++ b/src/main/java/com/javarush/khmelov/repository/QuestRepository.java @@ -0,0 +1,34 @@ +package com.javarush.khmelov.repository; + + +import com.javarush.khmelov.cmd.Quest; + +import java.util.*; +import java.util.concurrent.atomic.AtomicLong; + +public class QuestRepository { + + + + private final Map questMap = new HashMap<>(); + + + +public Quest getById(int id){ + return questMap.get(id); +} + + public void crate(Quest quest){ + questMap.put(quest.getId(), quest); + } + + public Collection getAll() { + return questMap.values(); + } + + + + + + +} diff --git a/src/main/java/com/javarush/khmelov/something/AllQuests.java b/src/main/java/com/javarush/khmelov/something/AllQuests.java new file mode 100644 index 0000000..beb73af --- /dev/null +++ b/src/main/java/com/javarush/khmelov/something/AllQuests.java @@ -0,0 +1,19 @@ +package com.javarush.khmelov.something; + +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import java.io.IOException; + +@WebServlet("/questRepository") +public class AllQuests extends HttpServlet { + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + req.setAttribute("questRepository", Create.questRepository); + req.getRequestDispatcher("/WEB-INF/allQuests.jsp").forward(req, resp); + + } +} diff --git a/src/main/java/com/javarush/khmelov/something/Create.java b/src/main/java/com/javarush/khmelov/something/Create.java new file mode 100644 index 0000000..1cf2f86 --- /dev/null +++ b/src/main/java/com/javarush/khmelov/something/Create.java @@ -0,0 +1,34 @@ +package com.javarush.khmelov.something; + +import com.javarush.khmelov.cmd.Quest; +import com.javarush.khmelov.repository.QuestRepository; +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import java.io.IOException; + +@WebServlet("/create") +public class Create extends HttpServlet { + + public static QuestRepository questRepository = new QuestRepository(); + Quest quest; + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + quest = new Quest(NewQuest.name); + + quest.setWin(req.getParameter("e")); + for (int i = 0; i < NewQuest.num; i++) { + String first = req.getParameter("a" + i); + String second = req.getParameter("b" + i); + String third = req.getParameter("c" + i); + String fourth = req.getParameter("d" + i); + quest.crete(i, first, second, third,fourth); + } + questRepository.crate(quest); + req.getRequestDispatcher("/WEB-INF/start-page.jsp").forward(req, resp); + } + +} diff --git a/src/main/java/com/javarush/khmelov/something/NewQuest.java b/src/main/java/com/javarush/khmelov/something/NewQuest.java new file mode 100644 index 0000000..c66c6ad --- /dev/null +++ b/src/main/java/com/javarush/khmelov/something/NewQuest.java @@ -0,0 +1,30 @@ +package com.javarush.khmelov.something; + +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import java.io.IOException; + +@WebServlet("/quest") +public class NewQuest extends HttpServlet { + static int num; + static String name; + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { +req.getRequestDispatcher("/WEB-INF/quest.jsp").forward(req,resp); + } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { +name = req.getParameter("name"); +num =Integer.parseInt( req.getParameter("num")); +req.setAttribute("num",num); + + req.getRequestDispatcher("/WEB-INF/create.jsp").forward(req,resp); + + + } +} diff --git a/src/main/java/com/javarush/khmelov/something/Play.java b/src/main/java/com/javarush/khmelov/something/Play.java new file mode 100644 index 0000000..8d2299a --- /dev/null +++ b/src/main/java/com/javarush/khmelov/something/Play.java @@ -0,0 +1,51 @@ +package com.javarush.khmelov.something; + +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import java.io.IOException; + +@WebServlet("/play") +public class Play extends HttpServlet { + int qid; + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + System.out.println("=== PLAY POST ==="); + System.out.println("answerId = " + req.getParameter("answerId")); + System.out.println("questionId = " + req.getParameter("questionId")); + try{ + qid = Integer.parseInt(req.getParameter("questId")); + } + catch (Exception e){ + + } + + int ans = Integer.parseInt(req.getParameter("answerId")); + int que = Integer.parseInt(req.getParameter("questionId")); + if(ans %2 == 0){ + req.setAttribute("lose", Create.questRepository.getById(qid).lose(que)); + req.getRequestDispatcher("/WEB-INF/lose.jsp").forward(req, resp); + return; + } + + if ( Create.questRepository.getById(qid).getQuestionById(que+1 ) == null){ + req.setAttribute("win", Create.questRepository.getById(qid).getWin()); + req.getRequestDispatcher("/WEB-INF/win.jsp").forward(req, resp); + return; + } + req.setAttribute("question", Create.questRepository.getById(qid).getQuestionById(que+1 )); + + req.getRequestDispatcher("/WEB-INF/game.jsp").forward(req, resp); + + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + req.setAttribute("question", Create.questRepository.getById(Integer.parseInt(req.getParameter("id"))).getQuestionById(0)); + req.setAttribute("questId",Integer.parseInt(req.getParameter("id")) ); + req.getRequestDispatcher("/WEB-INF/game.jsp").forward(req, resp); + } +} diff --git a/src/main/webapp/WEB-INF/allQuests.jsp b/src/main/webapp/WEB-INF/allQuests.jsp new file mode 100644 index 0000000..d5d519d --- /dev/null +++ b/src/main/webapp/WEB-INF/allQuests.jsp @@ -0,0 +1,21 @@ +<%-- + Created by IntelliJ IDEA. + User: ADMIN + Date: 2/9/2026 + Time: 1:34 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@include file="head.jsp" %> + + + + ${quest.name} + + + + + + + + diff --git a/src/main/webapp/WEB-INF/create.jsp b/src/main/webapp/WEB-INF/create.jsp new file mode 100644 index 0000000..d52fb8a --- /dev/null +++ b/src/main/webapp/WEB-INF/create.jsp @@ -0,0 +1,41 @@ +<%-- + Created by IntelliJ IDEA. + User: ADMIN + Date: 2/9/2026 + Time: 9:47 AM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@include file="head.jsp"%> + + + + + + +

Привет тут ты можешь написать свой квест

+

в каждом блоке тебе надо:

+

в первом столбце написать вопрос

+

во втором правильный ответ

+

в третьем неправильный ответ

+

в четвертом что будет за не правильный ответ

+

в последнюю если он победил

+
+ + + + +
+ + + + +
+
+ + +
+ + + + diff --git a/src/main/webapp/WEB-INF/game.jsp b/src/main/webapp/WEB-INF/game.jsp new file mode 100644 index 0000000..76e3459 --- /dev/null +++ b/src/main/webapp/WEB-INF/game.jsp @@ -0,0 +1,29 @@ +<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + + Space Quest + + +<%-- Берем имя из сессии --%> + +

${question.text}

+ + +<%-- Если игра НЕ закончена, рисуем кнопки ответов --%> +
+ + + + + + +
+ + +<%-- Если это финал (победа или поражение) --%> + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/lose.jsp b/src/main/webapp/WEB-INF/lose.jsp new file mode 100644 index 0000000..b473d6d --- /dev/null +++ b/src/main/webapp/WEB-INF/lose.jsp @@ -0,0 +1,18 @@ +<%-- + Created by IntelliJ IDEA. + User: ADMIN + Date: 2/9/2026 + Time: 2:37 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@include file="head.jsp"%> + + +

${lose}

+ + + + + + diff --git a/src/main/webapp/WEB-INF/quest.jsp b/src/main/webapp/WEB-INF/quest.jsp new file mode 100644 index 0000000..6838aa1 --- /dev/null +++ b/src/main/webapp/WEB-INF/quest.jsp @@ -0,0 +1,28 @@ +<%-- + Created by IntelliJ IDEA. + User: ADMIN + Date: 2/9/2026 + Time: 8:56 AM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@include file="head.jsp"%> + + + Title + + +
+

Введите имя квеста

+ + +

сколько будет ступеней?

+ + + + + +
+ + + diff --git a/src/main/webapp/WEB-INF/start-page.jsp b/src/main/webapp/WEB-INF/start-page.jsp index 0531c1c..6c50eb7 100644 --- a/src/main/webapp/WEB-INF/start-page.jsp +++ b/src/main/webapp/WEB-INF/start-page.jsp @@ -5,4 +5,6 @@
List Users + new quest +all quests diff --git a/src/main/webapp/WEB-INF/win.jsp b/src/main/webapp/WEB-INF/win.jsp new file mode 100644 index 0000000..b53fde9 --- /dev/null +++ b/src/main/webapp/WEB-INF/win.jsp @@ -0,0 +1,19 @@ +<%-- + Created by IntelliJ IDEA. + User: ADMIN + Date: 2/10/2026 + Time: 9:56 AM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@include file="head.jsp"%> + + + +

${win}

+ + + + + +