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
+${win}
+
+
+ На главную
+
+
+