From 2bc5d3fe9da815a7156d2a90480a76cf270ae0b1 Mon Sep 17 00:00:00 2001 From: toxicgipsy Date: Mon, 5 Aug 2024 00:59:54 +0300 Subject: [PATCH 01/13] add hook & context --- docs/mvp-spec.md | 7 ++++--- src/context/SimpleModeContext.jsx | 13 +++++++++++++ src/context/hooks/useSimpleMode.jsx | 6 ++++++ src/index.js | 5 ++++- src/pages/SelectLevelPage/SelectLevelPage.jsx | 9 +++++++++ 5 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 src/context/SimpleModeContext.jsx create mode 100644 src/context/hooks/useSimpleMode.jsx diff --git a/docs/mvp-spec.md b/docs/mvp-spec.md index fab47685e..e083d7788 100644 --- a/docs/mvp-spec.md +++ b/docs/mvp-spec.md @@ -14,9 +14,10 @@ Количество карточек для каждого уровня сложности можете назначать и свои или выбрать готовый пресет. Предлагаем следующее пресеты: - - Легкий уровень - 6 карточек (3 пары) - - Средний уровень - 12 карточек (6 пар) - - Сложный уровень - 18 карточек (9 пар) + +- Легкий уровень - 6 карточек (3 пары) +- Средний уровень - 12 карточек (6 пар) +- Сложный уровень - 18 карточек (9 пар) Как только уровень сложности выбран, игроку показывается на игровой поле. diff --git a/src/context/SimpleModeContext.jsx b/src/context/SimpleModeContext.jsx new file mode 100644 index 000000000..0d2ee33f8 --- /dev/null +++ b/src/context/SimpleModeContext.jsx @@ -0,0 +1,13 @@ +import { createContext, useState } from "react"; + +export const SimpleModeContext = createContext(null); + +export function SimpleModeProvider({ children }) { + const [simpleMode, setSimpleMode] = useState(false); + + const toggleSimpleMode = () => { + setSimpleMode(prevState => !prevState); + }; + + return {children}; +} diff --git a/src/context/hooks/useSimpleMode.jsx b/src/context/hooks/useSimpleMode.jsx new file mode 100644 index 000000000..d5976e6f7 --- /dev/null +++ b/src/context/hooks/useSimpleMode.jsx @@ -0,0 +1,6 @@ +import { useContext } from "react"; +import { SimpleModeContext } from "../SimpleModeContext"; + +export const useSimpleModeContext = () => { + return useContext(SimpleModeContext); +}; diff --git a/src/index.js b/src/index.js index f689c5f0b..2a44ec0fc 100644 --- a/src/index.js +++ b/src/index.js @@ -3,10 +3,13 @@ import ReactDOM from "react-dom/client"; import "./index.css"; import { RouterProvider } from "react-router-dom"; import { router } from "./router"; +import { SimpleModeProvider } from "./context/SimpleModeContext"; const root = ReactDOM.createRoot(document.getElementById("root")); root.render( - + + + , ); diff --git a/src/pages/SelectLevelPage/SelectLevelPage.jsx b/src/pages/SelectLevelPage/SelectLevelPage.jsx index 758942e51..39d44f29f 100644 --- a/src/pages/SelectLevelPage/SelectLevelPage.jsx +++ b/src/pages/SelectLevelPage/SelectLevelPage.jsx @@ -1,7 +1,12 @@ +import { useContext } from "react"; import { Link } from "react-router-dom"; import styles from "./SelectLevelPage.module.css"; +import { SimpleModeContext } from "../../context/SimpleModeContext"; export function SelectLevelPage() { + const { simpleMode, toggleSimpleMode } = useContext(SimpleModeContext); + console.log(simpleMode); + console.log(toggleSimpleMode); return (
@@ -23,6 +28,10 @@ export function SelectLevelPage() { +
+ + +
); From aae239c99b1da5f1c076a2633d085b7bdf2147af Mon Sep 17 00:00:00 2001 From: toxicgipsy Date: Mon, 5 Aug 2024 23:50:40 +0300 Subject: [PATCH 02/13] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=20Card=20=D0=BF=D0=BE=D0=BF=D1=8B=D1=82=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Cards/Cards.jsx | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/components/Cards/Cards.jsx b/src/components/Cards/Cards.jsx index 7526a56c8..62c65901e 100644 --- a/src/components/Cards/Cards.jsx +++ b/src/components/Cards/Cards.jsx @@ -5,6 +5,7 @@ import styles from "./Cards.module.css"; import { EndGameModal } from "../../components/EndGameModal/EndGameModal"; import { Button } from "../../components/Button/Button"; import { Card } from "../../components/Card/Card"; +import { useSimpleModeContext } from "../../context/hooks/useSimpleMode"; // Игра закончилась const STATUS_LOST = "STATUS_LOST"; @@ -46,6 +47,11 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { // Текущий статус игры const [status, setStatus] = useState(STATUS_PREVIEW); + // Получаем контекст упрощенной версии [вкл/выкл] + const { simpleMode } = useSimpleModeContext(); + // Количество попыток в легком режиме + const [countGame, setCountGame] = useState(3); + // Дата начала игры const [gameStartDate, setGameStartDate] = useState(null); // Дата конца игры @@ -127,6 +133,18 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { // "Игрок проиграл", т.к на поле есть две открытые карты без пары if (playerLost) { + if (simpleMode) { + if (countGame > 1) { + setTimeout(() => { + openCardsWithoutPair.map(card => { + return (card.open = false); + }); + }, 450); + setCountGame(countGame - 1); + return; + } + } + setCountGame(3); finishGame(STATUS_LOST); return; } @@ -195,7 +213,11 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { )} - {status === STATUS_IN_PROGRESS ? : null} + {status === STATUS_IN_PROGRESS ? ( + + ) : null}
@@ -210,6 +232,8 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { ))}
+ {!simpleMode ? null :

Осталось попыток: {countGame}

} + {isGameEnded ? (
Date: Mon, 5 Aug 2024 23:52:10 +0300 Subject: [PATCH 03/13] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=81=D1=82=D0=B8=D0=BB=D0=B8=20=D0=B2=20Card?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Cards/Cards.module.css | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/components/Cards/Cards.module.css b/src/components/Cards/Cards.module.css index 000c5006c..3f9b4b928 100644 --- a/src/components/Cards/Cards.module.css +++ b/src/components/Cards/Cards.module.css @@ -70,3 +70,14 @@ margin-bottom: -12px; } + +p { + color: #fff; + font-family: StratosSkyeng; + font-style: normal; + font-weight: 400; + line-height: 50px; + text-align: center; + font-size: 24px; + margin-top: 24px; +} From 7bf1f7a16e549598f7b2a6792090e17195b37ce6 Mon Sep 17 00:00:00 2001 From: toxicgipsy Date: Mon, 5 Aug 2024 23:56:40 +0300 Subject: [PATCH 04/13] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++++ src/pages/SelectLevelPage/SelectLevelPage.module.css | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/README.md b/README.md index 9b90842c4..fd7fab910 100644 --- a/README.md +++ b/README.md @@ -44,3 +44,7 @@ https://skypro-web-developer.github.io/react-memo/ Запускает eslint проверку кода, эта же команда запускается перед каждым коммитом. Если не получается закоммитить, попробуйте запустить эту команду и исправить все ошибки и предупреждения. + +### Время разработки упрощенного режима игры + +Планируемое время 12 часов — фактический 4 часа \ No newline at end of file diff --git a/src/pages/SelectLevelPage/SelectLevelPage.module.css b/src/pages/SelectLevelPage/SelectLevelPage.module.css index 390ac0def..7d42473bd 100644 --- a/src/pages/SelectLevelPage/SelectLevelPage.module.css +++ b/src/pages/SelectLevelPage/SelectLevelPage.module.css @@ -62,3 +62,11 @@ .levelLink:visited { color: #0080c1; } + +label { + color: #004980; + font-family: StratosSkyeng; + font-style: normal; + font-weight: 400; + line-height: 50px; +} From ce14b2c0c5b12be2c5cd33514682ca36dd14b9cd Mon Sep 17 00:00:00 2001 From: toxicgipsy Date: Sun, 11 Aug 2024 22:37:14 +0300 Subject: [PATCH 05/13] leaderBoard --- README.md | 6 +- .../EndGameLeaderBoardModal.jsx | 55 +++++ .../EndGameLeaderBoardModal.module.css | 85 +++++++ src/components/EndGameModal/EndGameModal.jsx | 1 - src/context/LeaderBoardContext.jsx | 9 + src/context/hooks/useLeaderBoard.jsx | 6 + src/index.js | 5 +- src/pages/LeaderBoardPage/LeaderBoardPage.jsx | 207 ++++++++++++++++++ .../LeaderBoardPage.module.css | 98 +++++++++ src/pages/SelectLevelPage/SelectLevelPage.jsx | 7 +- .../SelectLevelPage.module.css | 10 + src/router.js | 5 + src/utils/api.js | 20 ++ 13 files changed, 508 insertions(+), 6 deletions(-) create mode 100644 src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx create mode 100644 src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.module.css create mode 100644 src/context/LeaderBoardContext.jsx create mode 100644 src/context/hooks/useLeaderBoard.jsx create mode 100644 src/pages/LeaderBoardPage/LeaderBoardPage.jsx create mode 100644 src/pages/LeaderBoardPage/LeaderBoardPage.module.css create mode 100644 src/utils/api.js diff --git a/README.md b/README.md index fd7fab910..67961e061 100644 --- a/README.md +++ b/README.md @@ -47,4 +47,8 @@ https://skypro-web-developer.github.io/react-memo/ ### Время разработки упрощенного режима игры -Планируемое время 12 часов — фактический 4 часа \ No newline at end of file +Планируемое время 12 часов — фактический 4 часа + +### Время разработки лидерборда + +Планируемое время 16 часа — фактический \ No newline at end of file diff --git a/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx b/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx new file mode 100644 index 000000000..7c8e52f4c --- /dev/null +++ b/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx @@ -0,0 +1,55 @@ +import styles from "./EndGameLeaderBoardModal.module.css"; +import { useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { addLeaders } from "../../utils/api"; +import celebrationImageUrl from "../EndGameModal/images/celebration.png"; +import { Button } from "../Button/Button"; +import { useLeaderBoardContext } from "../../context/hooks/useLeaderBoard"; +import { useSimpleModeContext } from "../../context/hooks/useSimpleMode"; + +export function EndGameLeaderBoardModal({ gameDurationMinutes, gameDurationSeconds, timeGame, resetGame }) { + const navigate = useNavigate(); + const [nameInput, setNameInput] = useState(""); + const [errorName, setErrorName] = useState(false); + // Контекст лидерборда + const { setLeaderList } = useLeaderBoardContext(); + // Контекст упрощенного режима + const { simpleMode } = useSimpleModeContext(); + const addLeaderBoard = reset => { + let achievements = []; + if (!simpleMode) { + achievements.push(1); + } + addLeaders({ name: nameInput, time: timeGame, achievements: achievements }) + .then(data => { + setLeaderList(data.leaders.sort((a, b) => a.time - b.time).slice(0, 10)); + reset ? resetGame() : navigate("/leaderboard"); + }) + .catch(error => { + setErrorName(true); + }); + }; + return ( +
+ {"celebration +

Вы попали на Лидерборд!

+ { + setNameInput(e.target.value); + }} + /> +

Затраченное время:

+
+ {gameDurationMinutes.toString().padStart("2", "0")}.{gameDurationSeconds.toString().padStart("2", "0")} +
+ +
addLeaderBoard(false)}> + Перейти к лидерборду +
+ {errorName ? Заполни имя, чтобы продолжить : null} +
+ ); +} diff --git a/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.module.css b/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.module.css new file mode 100644 index 000000000..93c48d3cf --- /dev/null +++ b/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.module.css @@ -0,0 +1,85 @@ +.modal { + width: 480px; + height: 634px; + border-radius: 12px; + background: #c2f5ff; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; +} + +.image { + width: 96px; + height: 96px; + margin-bottom: 8px; +} + +.title { + color: #004980; + font-variant-numeric: lining-nums proportional-nums; + font-family: StratosSkyeng; + font-size: 40px; + font-style: normal; + font-weight: 400; + line-height: 48px; + + margin-bottom: 28px; +} + +.description { + color: #000; + font-variant-numeric: lining-nums proportional-nums; + font-family: StratosSkyeng; + font-size: 24px; + font-style: normal; + font-weight: 400; + line-height: 32px; + + margin-bottom: 10px; +} + +.time { + color: #000; + font-family: StratosSkyeng; + font-size: 64px; + font-style: normal; + font-weight: 400; + line-height: 72px; + + margin-bottom: 40px; +} + +.goLeaderBoard { + color: #004980; + font-family: StratosSkyeng; + font-style: normal; + font-weight: 400; + line-height: 50px; + display: flex; + justify-content: center; + cursor: pointer; +} + +.inputUser { + width: 276px; + height: 45px; + border-radius: 10px; + border: none; + outline: none; + text-align: center; + font-family: StratosSkyeng; + font-size: 24px; + margin-bottom: 28px; +} + +.inputUser::placeholder { + color: #999999; + text-align: center; +} + +.errorName { + font-family: StratosSkyeng; + color: red; +} diff --git a/src/components/EndGameModal/EndGameModal.jsx b/src/components/EndGameModal/EndGameModal.jsx index 722394833..905e3de44 100644 --- a/src/components/EndGameModal/EndGameModal.jsx +++ b/src/components/EndGameModal/EndGameModal.jsx @@ -20,7 +20,6 @@ export function EndGameModal({ isWon, gameDurationSeconds, gameDurationMinutes,
{gameDurationMinutes.toString().padStart("2", "0")}.{gameDurationSeconds.toString().padStart("2", "0")}
-
); diff --git a/src/context/LeaderBoardContext.jsx b/src/context/LeaderBoardContext.jsx new file mode 100644 index 000000000..e06805da0 --- /dev/null +++ b/src/context/LeaderBoardContext.jsx @@ -0,0 +1,9 @@ +import { createContext, useState } from "react"; + +export const LeaderBoardContext = createContext(null); + +export function LeaderBoardProvider({ children }) { + const [leaderList, setLeaderList] = useState([]); + + return {children}; +} diff --git a/src/context/hooks/useLeaderBoard.jsx b/src/context/hooks/useLeaderBoard.jsx new file mode 100644 index 000000000..cfae16045 --- /dev/null +++ b/src/context/hooks/useLeaderBoard.jsx @@ -0,0 +1,6 @@ +import { useContext } from "react"; +import { LeaderBoardContext } from "../LeaderBoardContext"; + +export const useLeaderBoardContext = () => { + return useContext(LeaderBoardContext); +}; diff --git a/src/index.js b/src/index.js index 2a44ec0fc..100010b04 100644 --- a/src/index.js +++ b/src/index.js @@ -4,12 +4,15 @@ import "./index.css"; import { RouterProvider } from "react-router-dom"; import { router } from "./router"; import { SimpleModeProvider } from "./context/SimpleModeContext"; +import { LeaderBoardProvider } from "./context/LeaderBoardContext"; const root = ReactDOM.createRoot(document.getElementById("root")); root.render( - + + + , ); diff --git a/src/pages/LeaderBoardPage/LeaderBoardPage.jsx b/src/pages/LeaderBoardPage/LeaderBoardPage.jsx new file mode 100644 index 000000000..c46f3c91c --- /dev/null +++ b/src/pages/LeaderBoardPage/LeaderBoardPage.jsx @@ -0,0 +1,207 @@ +import { useEffect } from "react"; +import { useLeaderBoardContext } from "../../context/hooks/useLeaderBoard"; +import styles from "./LeaderBoardPage.module.css"; +import { getLeaders } from "../../utils/api"; +import { Button } from "../../components/Button/Button"; +import { Link } from "react-router-dom"; + +export const LeaderBoardPage = () => { + const { leaderList, setLeaderList } = useLeaderBoardContext(); + + useEffect(() => { + getLeaders() + .then(data => { + setLeaderList(data.leaders.sort((a, b) => a.time - b.time).slice(0, 10)); + }) + .catch(error => { + console.log(error.message); + }); + }, []); + + return ( +
+
+
Лидерборд
+ + + +
+
+
Позиция
+
Пользователь
+
Достижения
+
Время
+
+ {leaderList.map((leader, index) => ( +
+
# {index + 1}
+
{leader.name}
+
+ {leader.achievements?.includes(1) ? ( + + + + + + + + + + + + + + + + ) : ( + + + + + + + + + + + + + + + + + + )} + + {leader.achievements?.includes(2) ? ( + + + + + + + + + + + + + + + ) : ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + )} +
+
{leader.time}
+
+ ))} +
+ ); +}; diff --git a/src/pages/LeaderBoardPage/LeaderBoardPage.module.css b/src/pages/LeaderBoardPage/LeaderBoardPage.module.css new file mode 100644 index 000000000..c72eedd7c --- /dev/null +++ b/src/pages/LeaderBoardPage/LeaderBoardPage.module.css @@ -0,0 +1,98 @@ +.container { + width: 1000px; + min-height: 100%; + justify-content: center; + margin: 0 auto; + padding-bottom: 20px; +} + +.header { + width: 100%; + height: 100px; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: space-between; + padding-top: 52px; +} + +.titlePage { + font-family: StratosSkyeng; + font-size: 24px; + color: white; +} + +.rowTable { + width: 100%; + height: 64px; + background-color: white; + border-radius: 12px; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: space-between; + align-items: center; + padding: 0 20px; + box-sizing: border-box; + margin-bottom: 15px; +} + +.rowTable__positionTitle { + font-family: StratosSkyeng; + font-size: 24px; + color: #999999; + width: 24%; +} + +.rowTable__userTitle { + font-family: StratosSkyeng; + font-size: 24px; + color: #999999; + width: 35%; +} + +.rowTable__achiveTitle { + font-family: StratosSkyeng; + font-size: 24px; + color: #999999; + width: 28%; +} + +.rowTable__timeTitle { + font-family: StratosSkyeng; + font-size: 24px; + color: #999999; + width: 13%; +} + +.rowTable__position { + font-family: StratosSkyeng; + font-size: 24px; + color: black; + width: 24%; +} + +.rowTable__user { + font-family: StratosSkyeng; + font-size: 24px; + color: black; + width: 35%; +} + +.rowTable__achive { + font-family: StratosSkyeng; + font-size: 24px; + color: black; + width: 28%; +} + +.rowTable__time { + font-family: StratosSkyeng; + font-size: 24px; + color: black; + width: 13%; +} + +svg { + margin-right: 12px; +} diff --git a/src/pages/SelectLevelPage/SelectLevelPage.jsx b/src/pages/SelectLevelPage/SelectLevelPage.jsx index 39d44f29f..a7cbbb601 100644 --- a/src/pages/SelectLevelPage/SelectLevelPage.jsx +++ b/src/pages/SelectLevelPage/SelectLevelPage.jsx @@ -5,8 +5,6 @@ import { SimpleModeContext } from "../../context/SimpleModeContext"; export function SelectLevelPage() { const { simpleMode, toggleSimpleMode } = useContext(SimpleModeContext); - console.log(simpleMode); - console.log(toggleSimpleMode); return (
@@ -30,7 +28,10 @@ export function SelectLevelPage() {
- + + +
Перейти к лидерборду
+
diff --git a/src/pages/SelectLevelPage/SelectLevelPage.module.css b/src/pages/SelectLevelPage/SelectLevelPage.module.css index 7d42473bd..fbc58493d 100644 --- a/src/pages/SelectLevelPage/SelectLevelPage.module.css +++ b/src/pages/SelectLevelPage/SelectLevelPage.module.css @@ -70,3 +70,13 @@ label { font-weight: 400; line-height: 50px; } + +.goLeaderBoard { + color: #004980; + font-family: StratosSkyeng; + font-style: normal; + font-weight: 400; + line-height: 50px; + display: flex; + justify-content: center; +} diff --git a/src/router.js b/src/router.js index da6e94b51..c80542c76 100644 --- a/src/router.js +++ b/src/router.js @@ -1,6 +1,7 @@ import { createBrowserRouter } from "react-router-dom"; import { GamePage } from "./pages/GamePage/GamePage"; import { SelectLevelPage } from "./pages/SelectLevelPage/SelectLevelPage"; +import { LeaderBoardPage } from "./pages/LeaderBoardPage/LeaderBoardPage"; export const router = createBrowserRouter( [ @@ -12,6 +13,10 @@ export const router = createBrowserRouter( path: "/game/:pairsCount", element: , }, + { + path: "/leaderboard", + element: , + }, ], /** * basename нужен для корректной работы в gh pages diff --git a/src/utils/api.js b/src/utils/api.js new file mode 100644 index 000000000..4c82fae3c --- /dev/null +++ b/src/utils/api.js @@ -0,0 +1,20 @@ +export const getLeaders = async () => { + const response = await fetch("https://wedev-api.sky.pro/api/leaderboard", { method: "GET" }); + if (!response.ok) { + throw new Error("Не получилось загрузить список, попробуй позже"); + } + const data = await response.json(); + return data; +}; + +export const addLeaders = async ({ name, time, achievements }) => { + const response = await fetch("https://wedev-api.sky.pro/api/v2/leaderboard", { + method: "POST", + body: JSON.stringify({ name, time, achievements }), + }); + if (!response.ok) { + throw new Error("Не получилось добавить лидера"); + } + const data = await response.json(); + return data; +}; From 878e5baa73abddda43a4b47d3046952ad9e4ac53 Mon Sep 17 00:00:00 2001 From: toxicgipsy Date: Sun, 11 Aug 2024 22:39:09 +0300 Subject: [PATCH 06/13] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=84=D0=B0=D0=BA=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=B7=D0=B0=D1=82=D1=80=D0=B0=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D0=B5=20=D0=B2=D1=80=D0=B5=D0=BC=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 67961e061..c2f841a4a 100644 --- a/README.md +++ b/README.md @@ -51,4 +51,4 @@ https://skypro-web-developer.github.io/react-memo/ ### Время разработки лидерборда -Планируемое время 16 часа — фактический \ No newline at end of file +Планируемое время 16 часа — фактический 10 часов \ No newline at end of file From d8dd026df9d3f4059b6854edc648928a20efc471 Mon Sep 17 00:00:00 2001 From: toxicgipsy Date: Sun, 11 Aug 2024 23:35:36 +0300 Subject: [PATCH 07/13] =?UTF-8?q?=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20Cards?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Cards/Cards.jsx | 41 +++++++++++++++++++ .../EndGameLeaderBoardModal.jsx | 8 ++-- src/pages/LeaderBoardPage/LeaderBoardPage.jsx | 10 ++--- src/pages/SelectLevelPage/SelectLevelPage.jsx | 5 +-- .../SelectLevelPage.module.css | 4 +- src/utils/api.js | 2 +- 6 files changed, 55 insertions(+), 15 deletions(-) diff --git a/src/components/Cards/Cards.jsx b/src/components/Cards/Cards.jsx index 62c65901e..8df13eb58 100644 --- a/src/components/Cards/Cards.jsx +++ b/src/components/Cards/Cards.jsx @@ -6,10 +6,13 @@ import { EndGameModal } from "../../components/EndGameModal/EndGameModal"; import { Button } from "../../components/Button/Button"; import { Card } from "../../components/Card/Card"; import { useSimpleModeContext } from "../../context/hooks/useSimpleMode"; +import { getLeaders } from "../../utils/api"; +import { EndGameLeaderBoardModal } from "../EndGameLeaderBoardModal/EndGameLeaderBoardModal"; // Игра закончилась const STATUS_LOST = "STATUS_LOST"; const STATUS_WON = "STATUS_WON"; +const STATUS_LEADERBOARD_WON = "STATUS_LEADERBOARD_WON"; // Идет игра: карты закрыты, игрок может их открыть const STATUS_IN_PROGRESS = "STATUS_IN_PROGRESS"; // Начало игры: игрок видит все карты в течении нескольких секунд @@ -42,6 +45,20 @@ function getTimerValue(startDate, endDate) { * previewSeconds - сколько секунд пользователь будет видеть все карты открытыми до начала игры */ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { + useEffect(() => { + getLeaders() + .then(data => { + const leaderList = data.leaders.sort((a, b) => a.time - b.time).slice(0, 10); + const leaderWithMaxTime = leaderList.reduce((acc, curr) => { + return acc.time > curr.time ? acc : curr; + }, {}); + setLastTime(leaderWithMaxTime.time); + return; + }) + .catch(error => { + console.log(error.message); + }); + }, []); // В cards лежит игровое поле - массив карт и их состояние открыта\закрыта const [cards, setCards] = useState([]); // Текущий статус игры @@ -51,6 +68,8 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { const { simpleMode } = useSimpleModeContext(); // Количество попыток в легком режиме const [countGame, setCountGame] = useState(3); + // Получаем наихудший результат в лидерборде + const [lastTime, setLastTime] = useState(null); // Дата начала игры const [gameStartDate, setGameStartDate] = useState(null); @@ -111,6 +130,14 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { // Победа - все карты на поле открыты if (isPlayerWon) { + if (pairsCount === 9) { + const timeGame = timer.minutes * 60 + timer.seconds; + if (timeGame < lastTime) { + finishGame(STATUS_LEADERBOARD_WON); + return; + } + } + setCountGame(3); finishGame(STATUS_WON); return; } @@ -153,6 +180,8 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { }; const isGameEnded = status === STATUS_LOST || status === STATUS_WON; + // const isSimpleGameReset = status === STATUS_RESET; + const isGameEndedLeaderBoard = status === STATUS_LEADERBOARD_WON; // Игровой цикл useEffect(() => { @@ -190,6 +219,7 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { }; }, [gameStartDate, gameEndDate]); + const timeGame = timer.minutes * 60 + timer.seconds; return (
@@ -244,6 +274,17 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { />
) : null} + + {isGameEndedLeaderBoard ? ( +
+ +
+ ) : null}
); } diff --git a/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx b/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx index 7c8e52f4c..67ff39fe0 100644 --- a/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx +++ b/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx @@ -1,10 +1,10 @@ import styles from "./EndGameLeaderBoardModal.module.css"; -import { useState } from "react"; -import { useNavigate } from "react-router-dom"; -import { addLeaders } from "../../utils/api"; -import celebrationImageUrl from "../EndGameModal/images/celebration.png"; import { Button } from "../Button/Button"; +import celebrationImageUrl from "../EndGameModal/images/celebration.png"; +import { addLeaders } from "../../utils/api"; +import { useState } from "react"; import { useLeaderBoardContext } from "../../context/hooks/useLeaderBoard"; +import { useNavigate } from "react-router-dom"; import { useSimpleModeContext } from "../../context/hooks/useSimpleMode"; export function EndGameLeaderBoardModal({ gameDurationMinutes, gameDurationSeconds, timeGame, resetGame }) { diff --git a/src/pages/LeaderBoardPage/LeaderBoardPage.jsx b/src/pages/LeaderBoardPage/LeaderBoardPage.jsx index c46f3c91c..fc84c2dba 100644 --- a/src/pages/LeaderBoardPage/LeaderBoardPage.jsx +++ b/src/pages/LeaderBoardPage/LeaderBoardPage.jsx @@ -1,9 +1,9 @@ -import { useEffect } from "react"; -import { useLeaderBoardContext } from "../../context/hooks/useLeaderBoard"; +import { Link } from "react-router-dom"; +import { Button } from "../../components/Button/Button"; import styles from "./LeaderBoardPage.module.css"; +import { useEffect } from "react"; import { getLeaders } from "../../utils/api"; -import { Button } from "../../components/Button/Button"; -import { Link } from "react-router-dom"; +import { useLeaderBoardContext } from "../../context/hooks/useLeaderBoard"; export const LeaderBoardPage = () => { const { leaderList, setLeaderList } = useLeaderBoardContext(); @@ -16,7 +16,7 @@ export const LeaderBoardPage = () => { .catch(error => { console.log(error.message); }); - }, []); + }, [setLeaderList]); return (
diff --git a/src/pages/SelectLevelPage/SelectLevelPage.jsx b/src/pages/SelectLevelPage/SelectLevelPage.jsx index a7cbbb601..ec11af5d7 100644 --- a/src/pages/SelectLevelPage/SelectLevelPage.jsx +++ b/src/pages/SelectLevelPage/SelectLevelPage.jsx @@ -1,10 +1,9 @@ -import { useContext } from "react"; import { Link } from "react-router-dom"; import styles from "./SelectLevelPage.module.css"; import { SimpleModeContext } from "../../context/SimpleModeContext"; export function SelectLevelPage() { - const { simpleMode, toggleSimpleMode } = useContext(SimpleModeContext); + const { simpleMode, toggleSimpleMode } = SimpleModeContext; return (
@@ -27,7 +26,7 @@ export function SelectLevelPage() {
- +
Перейти к лидерборду
diff --git a/src/pages/SelectLevelPage/SelectLevelPage.module.css b/src/pages/SelectLevelPage/SelectLevelPage.module.css index fbc58493d..914073985 100644 --- a/src/pages/SelectLevelPage/SelectLevelPage.module.css +++ b/src/pages/SelectLevelPage/SelectLevelPage.module.css @@ -71,7 +71,7 @@ label { line-height: 50px; } -.goLeaderBoard { +.goLiderboard { color: #004980; font-family: StratosSkyeng; font-style: normal; @@ -79,4 +79,4 @@ label { line-height: 50px; display: flex; justify-content: center; -} +} \ No newline at end of file diff --git a/src/utils/api.js b/src/utils/api.js index 4c82fae3c..3cd43b8df 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -8,7 +8,7 @@ export const getLeaders = async () => { }; export const addLeaders = async ({ name, time, achievements }) => { - const response = await fetch("https://wedev-api.sky.pro/api/v2/leaderboard", { + const response = await fetch("https://wedev-api.sky.pro/api/leaderboard", { method: "POST", body: JSON.stringify({ name, time, achievements }), }); From 7d8e3040eadb7b28c1f3f4e6d40fa20e7f733062 Mon Sep 17 00:00:00 2001 From: toxicgipsy Date: Tue, 13 Aug 2024 22:42:46 +0300 Subject: [PATCH 08/13] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B2=D1=80=D0=B5=D0=BC=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx | 5 ++++- src/pages/LeaderBoardPage/LeaderBoardPage.jsx | 8 +++++++- src/pages/SelectLevelPage/SelectLevelPage.jsx | 2 +- src/pages/SelectLevelPage/SelectLevelPage.module.css | 4 ++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx b/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx index 67ff39fe0..f9dcf4f46 100644 --- a/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx +++ b/src/components/EndGameLeaderBoardModal/EndGameLeaderBoardModal.jsx @@ -42,8 +42,11 @@ export function EndGameLeaderBoardModal({ gameDurationMinutes, gameDurationSecon }} />

Затраченное время:

-
+ {/*
{gameDurationMinutes.toString().padStart("2", "0")}.{gameDurationSeconds.toString().padStart("2", "0")} +
*/} +
+ {gameDurationMinutes.toString().padStart(2, "0")}.{gameDurationSeconds.toString().padStart(2, "0")}
addLeaderBoard(false)}> diff --git a/src/pages/LeaderBoardPage/LeaderBoardPage.jsx b/src/pages/LeaderBoardPage/LeaderBoardPage.jsx index fc84c2dba..379e27c2c 100644 --- a/src/pages/LeaderBoardPage/LeaderBoardPage.jsx +++ b/src/pages/LeaderBoardPage/LeaderBoardPage.jsx @@ -18,6 +18,12 @@ export const LeaderBoardPage = () => { }); }, [setLeaderList]); + const formatTime = timeInSeconds => { + const minutes = Math.floor(timeInSeconds / 60); + const seconds = Math.floor(timeInSeconds % 60); + return `${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}`; + }; + return (
@@ -199,7 +205,7 @@ export const LeaderBoardPage = () => { )}
-
{leader.time}
+
{formatTime(leader.time)}
))}
diff --git a/src/pages/SelectLevelPage/SelectLevelPage.jsx b/src/pages/SelectLevelPage/SelectLevelPage.jsx index ec11af5d7..8c2d8f9ae 100644 --- a/src/pages/SelectLevelPage/SelectLevelPage.jsx +++ b/src/pages/SelectLevelPage/SelectLevelPage.jsx @@ -27,7 +27,7 @@ export function SelectLevelPage() {
- +
Перейти к лидерборду
diff --git a/src/pages/SelectLevelPage/SelectLevelPage.module.css b/src/pages/SelectLevelPage/SelectLevelPage.module.css index 914073985..fbc58493d 100644 --- a/src/pages/SelectLevelPage/SelectLevelPage.module.css +++ b/src/pages/SelectLevelPage/SelectLevelPage.module.css @@ -71,7 +71,7 @@ label { line-height: 50px; } -.goLiderboard { +.goLeaderBoard { color: #004980; font-family: StratosSkyeng; font-style: normal; @@ -79,4 +79,4 @@ label { line-height: 50px; display: flex; justify-content: center; -} \ No newline at end of file +} From 38a5c5cdcf9fb196dda60bd70b3824130a51563c Mon Sep 17 00:00:00 2001 From: toxicgipsy Date: Wed, 14 Aug 2024 00:28:40 +0300 Subject: [PATCH 09/13] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BB=D0=B5=D0=B3=D0=BA=D0=B8=D0=B9=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B6=D0=B8=D0=BC=20=D0=B8=20=D1=83=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Cards/Cards.jsx | 5 +- src/pages/SelectLevelPage/SelectLevelPage.jsx | 6 +-- .../SelectLevelPage.module.css | 48 +++++++++++++++++-- 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src/components/Cards/Cards.jsx b/src/components/Cards/Cards.jsx index 8df13eb58..fd42dc763 100644 --- a/src/components/Cards/Cards.jsx +++ b/src/components/Cards/Cards.jsx @@ -164,9 +164,9 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { if (countGame > 1) { setTimeout(() => { openCardsWithoutPair.map(card => { - return (card.open = false); + card.open = false; }); - }, 450); + }, 500); setCountGame(countGame - 1); return; } @@ -180,7 +180,6 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { }; const isGameEnded = status === STATUS_LOST || status === STATUS_WON; - // const isSimpleGameReset = status === STATUS_RESET; const isGameEndedLeaderBoard = status === STATUS_LEADERBOARD_WON; // Игровой цикл diff --git a/src/pages/SelectLevelPage/SelectLevelPage.jsx b/src/pages/SelectLevelPage/SelectLevelPage.jsx index 8c2d8f9ae..2434dc6aa 100644 --- a/src/pages/SelectLevelPage/SelectLevelPage.jsx +++ b/src/pages/SelectLevelPage/SelectLevelPage.jsx @@ -1,9 +1,9 @@ import { Link } from "react-router-dom"; import styles from "./SelectLevelPage.module.css"; -import { SimpleModeContext } from "../../context/SimpleModeContext"; +import { useSimpleModeContext } from "../../context/hooks/useSimpleMode"; export function SelectLevelPage() { - const { simpleMode, toggleSimpleMode } = SimpleModeContext; + const { simpleMode, toggleSimpleMode } = useSimpleModeContext(); return (
@@ -26,7 +26,7 @@ export function SelectLevelPage() {
- +
Перейти к лидерборду
diff --git a/src/pages/SelectLevelPage/SelectLevelPage.module.css b/src/pages/SelectLevelPage/SelectLevelPage.module.css index fbc58493d..6849c8820 100644 --- a/src/pages/SelectLevelPage/SelectLevelPage.module.css +++ b/src/pages/SelectLevelPage/SelectLevelPage.module.css @@ -63,16 +63,58 @@ color: #0080c1; } +/* Скрываем стандартный чекбокс */ +input[type="checkbox"] { + position: absolute; + opacity: 0; + cursor: pointer; +} + +/* Стиль для кастомного чекбокса */ +input[type="checkbox"] + label { + position: relative; + padding-left: 30px; + font-size: 20px; + line-height: 50px; + cursor: pointer; +} + +/* Кастомный квадрат */ +input[type="checkbox"] + label:before { + content: ""; + position: absolute; + left: 0; + top: 0; + width: 24px; + height: 24px; + background-color: #fff; + border-radius: 4px; +} + +/* Добавляем галочку при отмеченном чекбоксе */ +input[type="checkbox"]:checked + label:after { + content: ""; + position: absolute; + left: 7px; + top: 3px; + width: 8px; + height: 14px; + border: solid #4caf50; + border-width: 0 2px 2px 0; + transform: rotate(45deg); +} + label { - color: #004980; + color: #000; font-family: StratosSkyeng; font-style: normal; - font-weight: 400; + font-weight: 100; line-height: 50px; + font-size: 20px; } .goLeaderBoard { - color: #004980; + color: #0080c1; font-family: StratosSkyeng; font-style: normal; font-weight: 400; From c8ac78f4fb8c655ab1e7fdd680bcd7c421bf6123 Mon Sep 17 00:00:00 2001 From: toxicgipsy Date: Sun, 18 Aug 2024 19:32:31 +0300 Subject: [PATCH 10/13] lighteyes --- package-lock.json | 214 +++++++++++++++--- package.json | 3 +- src/components/Cards/Cards.jsx | 128 +++++++++-- src/components/Cards/Cards.module.css | 1 - src/components/Cards/Cards.styled.js | 7 + .../ReserSimpleGameModal.jsx | 28 +++ .../ReserSimpleGameModal.module.css | 51 +++++ .../images/celebration.png | Bin 0 -> 13238 bytes .../ReserSimpleGameModal/images/dead.png | Bin 0 -> 11789 bytes src/context/EpiphanyContext.jsx | 10 + src/context/hooks/useEpiphany.jsx | 6 + src/index.js | 9 +- src/utils/api.js | 4 +- 13 files changed, 412 insertions(+), 49 deletions(-) create mode 100644 src/components/Cards/Cards.styled.js create mode 100644 src/components/ReserSimpleGameModal/ReserSimpleGameModal.jsx create mode 100644 src/components/ReserSimpleGameModal/ReserSimpleGameModal.module.css create mode 100644 src/components/ReserSimpleGameModal/images/celebration.png create mode 100644 src/components/ReserSimpleGameModal/images/dead.png create mode 100644 src/context/EpiphanyContext.jsx create mode 100644 src/context/hooks/useEpiphany.jsx diff --git a/package-lock.json b/package-lock.json index edaf5083f..053a34ac1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,8 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.15.0", - "react-scripts": "5.0.1" + "react-scripts": "5.0.1", + "styled-components": "^6.1.12" }, "devDependencies": { "@babel/plugin-proposal-private-property-in-object": "^7.21.11", @@ -2293,6 +2294,24 @@ "postcss-selector-parser": "^6.0.10" } }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -4493,6 +4512,11 @@ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, + "node_modules/@types/stylis": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" + }, "node_modules/@types/testing-library__jest-dom": { "version": "5.14.9", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", @@ -5949,6 +5973,14 @@ "node": ">= 6" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -6389,6 +6421,14 @@ "postcss": "^8.4" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, "node_modules/css-declaration-sorter": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", @@ -6570,6 +6610,16 @@ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/css-tree": { "version": "1.0.0-alpha.37", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", @@ -6763,9 +6813,9 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -12962,9 +13012,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -13642,9 +13692,9 @@ } }, "node_modules/postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -13660,9 +13710,9 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -16114,6 +16164,11 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -16196,9 +16251,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -16527,6 +16582,33 @@ "webpack": "^5.0.0" } }, + "node_modules/styled-components": { + "version": "6.1.12", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.12.tgz", + "integrity": "sha512-n/O4PzRPhbYI0k1vKKayfti3C/IGcPf+DqcrOB7O/ab9x4u/zjqraneT5N45+sIe87cxrCApXM8Bna7NYxwoTA==", + "dependencies": { + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.38", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", @@ -16542,6 +16624,11 @@ "postcss": "^8.2.15" } }, + "node_modules/stylis": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" + }, "node_modules/sucrase": { "version": "3.34.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", @@ -19841,6 +19928,24 @@ "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", "requires": {} }, + "@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "requires": { + "@emotion/memoize": "^0.8.1" + } + }, + "@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, "@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -21484,6 +21589,11 @@ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, + "@types/stylis": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" + }, "@types/testing-library__jest-dom": { "version": "5.14.9", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", @@ -22547,6 +22657,11 @@ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" }, + "camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==" + }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -22872,6 +22987,11 @@ "postcss-selector-parser": "^6.0.9" } }, + "css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==" + }, "css-declaration-sorter": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", @@ -22979,6 +23099,16 @@ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, + "css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "requires": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "css-tree": { "version": "1.0.0-alpha.37", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", @@ -23117,9 +23247,9 @@ } }, "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "damerau-levenshtein": { "version": "1.0.8", @@ -27568,9 +27698,9 @@ } }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "natural-compare": { "version": "1.4.0", @@ -28048,13 +28178,13 @@ } }, "postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "requires": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" } }, "postcss-attribute-case-insensitive": { @@ -29647,6 +29777,11 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -29711,9 +29846,9 @@ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==" }, "source-map-loader": { "version": "3.0.2", @@ -29958,6 +30093,22 @@ "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", "requires": {} }, + "styled-components": { + "version": "6.1.12", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.12.tgz", + "integrity": "sha512-n/O4PzRPhbYI0k1vKKayfti3C/IGcPf+DqcrOB7O/ab9x4u/zjqraneT5N45+sIe87cxrCApXM8Bna7NYxwoTA==", + "requires": { + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.38", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" + } + }, "stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", @@ -29967,6 +30118,11 @@ "postcss-selector-parser": "^6.0.4" } }, + "stylis": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" + }, "sucrase": { "version": "3.34.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", diff --git a/package.json b/package.json index e9b7a089e..16a48a015 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.15.0", - "react-scripts": "5.0.1" + "react-scripts": "5.0.1", + "styled-components": "^6.1.12" }, "scripts": { "predeploy": "npm run build", diff --git a/src/components/Cards/Cards.jsx b/src/components/Cards/Cards.jsx index fd42dc763..3efb2b730 100644 --- a/src/components/Cards/Cards.jsx +++ b/src/components/Cards/Cards.jsx @@ -8,11 +8,16 @@ import { Card } from "../../components/Card/Card"; import { useSimpleModeContext } from "../../context/hooks/useSimpleMode"; import { getLeaders } from "../../utils/api"; import { EndGameLeaderBoardModal } from "../EndGameLeaderBoardModal/EndGameLeaderBoardModal"; +import * as S from "../Cards/Cards.styled"; +import { useEpiphanyContext } from "../../context/hooks/useEpiphany"; +import { ReserSimpleGameModal } from "../ReserSimpleGameModal/ReserSimpleGameModal"; // Игра закончилась const STATUS_LOST = "STATUS_LOST"; const STATUS_WON = "STATUS_WON"; const STATUS_LEADERBOARD_WON = "STATUS_LEADERBOARD_WON"; +// Включен упрощенный режим, есть еще попытки +const STATUS_RESET = "STATUS_RESET"; // Идет игра: карты закрыты, игрок может их открыть const STATUS_IN_PROGRESS = "STATUS_IN_PROGRESS"; // Начало игры: игрок видит все карты в течении нескольких секунд @@ -64,9 +69,9 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { // Текущий статус игры const [status, setStatus] = useState(STATUS_PREVIEW); - // Получаем контекст упрощенной версии [вкл/выкл] + // Получаем контекст упрощенного режима: включен он или нет const { simpleMode } = useSimpleModeContext(); - // Количество попыток в легком режиме + // Количество оставщихся попыток в упрощенном режиме const [countGame, setCountGame] = useState(3); // Получаем наихудший результат в лидерборде const [lastTime, setLastTime] = useState(null); @@ -75,6 +80,10 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { const [gameStartDate, setGameStartDate] = useState(null); // Дата конца игры const [gameEndDate, setGameEndDate] = useState(null); + // Стейт для паузы в игре + const [isPause, setIsPause] = useState(false); + // Получаем контекст прозрения: был включен он или нет + const { isEpiphany, setIsEpiphany } = useEpiphanyContext(); // Стейт для таймера, высчитывается в setInteval на основе gameStartDate и gameEndDate const [timer, setTimer] = useState({ @@ -92,12 +101,14 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { setGameStartDate(startDate); setTimer(getTimerValue(startDate, null)); setStatus(STATUS_IN_PROGRESS); + setIsEpiphany(false); } function resetGame() { setGameStartDate(null); setGameEndDate(null); setTimer(getTimerValue(null, null)); setStatus(STATUS_PREVIEW); + setIsEpiphany(false); } /** @@ -107,7 +118,7 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { * - "Игрок проиграл", если на поле есть две открытые карты без пары * - "Игра продолжается", если не случилось первых двух условий */ - const openCard = clickedCard => { + const openCard = async clickedCard => { // Если карта уже открыта, то ничего не делаем if (clickedCard.open) { return; @@ -180,6 +191,7 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { }; const isGameEnded = status === STATUS_LOST || status === STATUS_WON; + const isSimpleGameReset = status === STATUS_RESET; const isGameEndedLeaderBoard = status === STATUS_LEADERBOARD_WON; // Игровой цикл @@ -210,13 +222,36 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { // Обновляем значение таймера в интервале useEffect(() => { - const intervalId = setInterval(() => { - setTimer(getTimerValue(gameStartDate, gameEndDate)); - }, 300); - return () => { - clearInterval(intervalId); - }; - }, [gameStartDate, gameEndDate]); + if (!isPause) { + const intervalId = setInterval(() => { + setTimer(getTimerValue(gameStartDate, gameEndDate)); + }, 200); + return () => { + clearInterval(intervalId); + }; + } + }, [gameStartDate, gameEndDate, isPause]); + + // Функция срабатывания паузы на 5 секунд + const enablePause = () => { + setIsPause(true); + const openedCards = cards; + setCards( + cards.map(card => { + return { + ...card, + open: true, + }; + }), + ); + setTimeout(() => { + const newStartGame = new Date(gameStartDate.getTime() + 5000); + setGameStartDate(newStartGame); + setIsPause(false); + setCards(openedCards); + setIsEpiphany(true); + }, 5000); + }; const timeGame = timer.minutes * 60 + timer.seconds; return ( @@ -243,9 +278,64 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { )}
{status === STATUS_IN_PROGRESS ? ( - + <> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) : null}
@@ -274,6 +364,18 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) {
) : null} + {isSimpleGameReset ? ( +
+ +
+ ) : null} + {isGameEndedLeaderBoard ? (
(props.$isEpiphany ? "0.4" : "1")}; +`; diff --git a/src/components/ReserSimpleGameModal/ReserSimpleGameModal.jsx b/src/components/ReserSimpleGameModal/ReserSimpleGameModal.jsx new file mode 100644 index 000000000..9703ecbda --- /dev/null +++ b/src/components/ReserSimpleGameModal/ReserSimpleGameModal.jsx @@ -0,0 +1,28 @@ +import styles from "./ReserSimpleGameModal.module.css"; + +import { Button } from "../Button/Button"; + +// import deadImageUrl from "./images/dead.png"; +// import celebrationImageUrl from "./images/celebration.png"; +//import { useSimpleModeContext } from "../../context/hooks/useSimpleMode"; + +export function ReserSimpleGameModal({ gameDurationSeconds, gameDurationMinutes, onClick, countGame }) { + //const { simpleMode } = useSimpleModeContext(); + + // const title = isWon ? "Вы победили!" : "Вы проиграли!"; + + // const imgSrc = isWon ? celebrationImageUrl : deadImageUrl; + + // const imgAlt = isWon ? "celebration emodji" : "dead emodji"; + + return ( +
+

Осталось попыток: {countGame}

+

Затраченное время:

+
+ {gameDurationMinutes.toString().padStart("2", "0")}.{gameDurationSeconds.toString().padStart("2", "0")} +
+ +
+ ); +} diff --git a/src/components/ReserSimpleGameModal/ReserSimpleGameModal.module.css b/src/components/ReserSimpleGameModal/ReserSimpleGameModal.module.css new file mode 100644 index 000000000..9368cb8b5 --- /dev/null +++ b/src/components/ReserSimpleGameModal/ReserSimpleGameModal.module.css @@ -0,0 +1,51 @@ +.modal { + width: 480px; + height: 459px; + border-radius: 12px; + background: #c2f5ff; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.image { + width: 96px; + height: 96px; + margin-bottom: 8px; +} + +.title { + color: #004980; + font-variant-numeric: lining-nums proportional-nums; + font-family: StratosSkyeng; + font-size: 40px; + font-style: normal; + font-weight: 400; + line-height: 48px; + + margin-bottom: 28px; +} + +.description { + color: #000; + font-variant-numeric: lining-nums proportional-nums; + font-family: StratosSkyeng; + font-size: 24px; + font-style: normal; + font-weight: 400; + line-height: 32px; + + margin-bottom: 10px; +} + +.time { + color: #000; + font-family: StratosSkyeng; + font-size: 64px; + font-style: normal; + font-weight: 400; + line-height: 72px; + + margin-bottom: 40px; +} diff --git a/src/components/ReserSimpleGameModal/images/celebration.png b/src/components/ReserSimpleGameModal/images/celebration.png new file mode 100644 index 0000000000000000000000000000000000000000..d3468bc8e64622e555d5822b1b22c319ca0ec7ae GIT binary patch literal 13238 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 BdM*F} literal 0 HcmV?d00001 diff --git a/src/components/ReserSimpleGameModal/images/dead.png b/src/components/ReserSimpleGameModal/images/dead.png new file mode 100644 index 0000000000000000000000000000000000000000..1220e76957d7e657c910ad955d86026acdb4bb54 GIT binary patch literal 11789 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 { + // Стейт для определения пользовался ли пользователь прозрением + const [isEpiphany, setIsEpiphany] = useState(false); + + return {children}; +}; diff --git a/src/context/hooks/useEpiphany.jsx b/src/context/hooks/useEpiphany.jsx new file mode 100644 index 000000000..8ee291d24 --- /dev/null +++ b/src/context/hooks/useEpiphany.jsx @@ -0,0 +1,6 @@ +import { useContext } from "react"; +import { EpiphanyContext } from "../EpiphanyContext"; + +export const useEpiphanyContext = () => { + return useContext(EpiphanyContext); +}; diff --git a/src/index.js b/src/index.js index 100010b04..8081b8385 100644 --- a/src/index.js +++ b/src/index.js @@ -5,14 +5,17 @@ import { RouterProvider } from "react-router-dom"; import { router } from "./router"; import { SimpleModeProvider } from "./context/SimpleModeContext"; import { LeaderBoardProvider } from "./context/LeaderBoardContext"; +import { EpiphanyProvider } from "./context/EpiphanyContext"; const root = ReactDOM.createRoot(document.getElementById("root")); root.render( - - - + + + + + , ); diff --git a/src/utils/api.js b/src/utils/api.js index 3cd43b8df..c29bebb7d 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -1,5 +1,5 @@ export const getLeaders = async () => { - const response = await fetch("https://wedev-api.sky.pro/api/leaderboard", { method: "GET" }); + const response = await fetch("https://wedev-api.sky.pro/api/v2/leaderboard", { method: "GET" }); if (!response.ok) { throw new Error("Не получилось загрузить список, попробуй позже"); } @@ -8,7 +8,7 @@ export const getLeaders = async () => { }; export const addLeaders = async ({ name, time, achievements }) => { - const response = await fetch("https://wedev-api.sky.pro/api/leaderboard", { + const response = await fetch("https://wedev-api.sky.pro/api/v2/leaderboard", { method: "POST", body: JSON.stringify({ name, time, achievements }), }); From a48e56770ff575e2c3d0b3270cae3a401dabf85e Mon Sep 17 00:00:00 2001 From: toxicgipsy Date: Sun, 18 Aug 2024 20:24:38 +0300 Subject: [PATCH 11/13] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D1=83=20"=D0=98=D0=B3?= =?UTF-8?q?=D1=80=D0=B0=D1=82=D1=8C"=20=D0=B8=20=D0=B2=D1=8B=D0=B1=D0=BE?= =?UTF-8?q?=D1=80=20=D1=83=D1=80=D0=BE=D0=B2=D0=BD=D0=B8=20=D1=81=D0=BB?= =?UTF-8?q?=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Cards/Cards.jsx | 16 ------ .../ReserSimpleGameModal.jsx | 28 ---------- .../ReserSimpleGameModal.module.css | 51 ----------------- .../images/celebration.png | Bin 13238 -> 0 bytes .../ReserSimpleGameModal/images/dead.png | Bin 11789 -> 0 bytes src/pages/SelectLevelPage/SelectLevelPage.jsx | 52 ++++++++++++------ .../SelectLevelPage.module.css | 32 +++++++++-- 7 files changed, 63 insertions(+), 116 deletions(-) delete mode 100644 src/components/ReserSimpleGameModal/ReserSimpleGameModal.jsx delete mode 100644 src/components/ReserSimpleGameModal/ReserSimpleGameModal.module.css delete mode 100644 src/components/ReserSimpleGameModal/images/celebration.png delete mode 100644 src/components/ReserSimpleGameModal/images/dead.png diff --git a/src/components/Cards/Cards.jsx b/src/components/Cards/Cards.jsx index 3efb2b730..110d5cb14 100644 --- a/src/components/Cards/Cards.jsx +++ b/src/components/Cards/Cards.jsx @@ -10,14 +10,11 @@ import { getLeaders } from "../../utils/api"; import { EndGameLeaderBoardModal } from "../EndGameLeaderBoardModal/EndGameLeaderBoardModal"; import * as S from "../Cards/Cards.styled"; import { useEpiphanyContext } from "../../context/hooks/useEpiphany"; -import { ReserSimpleGameModal } from "../ReserSimpleGameModal/ReserSimpleGameModal"; // Игра закончилась const STATUS_LOST = "STATUS_LOST"; const STATUS_WON = "STATUS_WON"; const STATUS_LEADERBOARD_WON = "STATUS_LEADERBOARD_WON"; -// Включен упрощенный режим, есть еще попытки -const STATUS_RESET = "STATUS_RESET"; // Идет игра: карты закрыты, игрок может их открыть const STATUS_IN_PROGRESS = "STATUS_IN_PROGRESS"; // Начало игры: игрок видит все карты в течении нескольких секунд @@ -191,7 +188,6 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { }; const isGameEnded = status === STATUS_LOST || status === STATUS_WON; - const isSimpleGameReset = status === STATUS_RESET; const isGameEndedLeaderBoard = status === STATUS_LEADERBOARD_WON; // Игровой цикл @@ -364,18 +360,6 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) {

) : null} - {isSimpleGameReset ? ( -
- -
- ) : null} - {isGameEndedLeaderBoard ? (
-

Осталось попыток: {countGame}

-

Затраченное время:

-
- {gameDurationMinutes.toString().padStart("2", "0")}.{gameDurationSeconds.toString().padStart("2", "0")} -
- -
- ); -} diff --git a/src/components/ReserSimpleGameModal/ReserSimpleGameModal.module.css b/src/components/ReserSimpleGameModal/ReserSimpleGameModal.module.css deleted file mode 100644 index 9368cb8b5..000000000 --- a/src/components/ReserSimpleGameModal/ReserSimpleGameModal.module.css +++ /dev/null @@ -1,51 +0,0 @@ -.modal { - width: 480px; - height: 459px; - border-radius: 12px; - background: #c2f5ff; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -.image { - width: 96px; - height: 96px; - margin-bottom: 8px; -} - -.title { - color: #004980; - font-variant-numeric: lining-nums proportional-nums; - font-family: StratosSkyeng; - font-size: 40px; - font-style: normal; - font-weight: 400; - line-height: 48px; - - margin-bottom: 28px; -} - -.description { - color: #000; - font-variant-numeric: lining-nums proportional-nums; - font-family: StratosSkyeng; - font-size: 24px; - font-style: normal; - font-weight: 400; - line-height: 32px; - - margin-bottom: 10px; -} - -.time { - color: #000; - font-family: StratosSkyeng; - font-size: 64px; - font-style: normal; - font-weight: 400; - line-height: 72px; - - margin-bottom: 40px; -} diff --git a/src/components/ReserSimpleGameModal/images/celebration.png b/src/components/ReserSimpleGameModal/images/celebration.png deleted file mode 100644 index d3468bc8e64622e555d5822b1b22c319ca0ec7ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13238 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 BdM*F} diff --git a/src/components/ReserSimpleGameModal/images/dead.png b/src/components/ReserSimpleGameModal/images/dead.png deleted file mode 100644 index 1220e76957d7e657c910ad955d86026acdb4bb54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11789 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 { + if (selectedLevel !== null) { + navigate(`/game/${selectedLevel}`); + } else { + alert("Выбери уровень сложности"); + } + }; + return (

Выбери сложность

    -
  • - - 1 - +
  • setSelectedLevel(3)} + > + 1
  • -
  • - - 2 - +
  • setSelectedLevel(6)} + > + 2
  • -
  • - - 3 - +
  • setSelectedLevel(9)} + > + 3
- -
Перейти к лидерборду
-
+ + +
Перейти к лидерборду
+
); diff --git a/src/pages/SelectLevelPage/SelectLevelPage.module.css b/src/pages/SelectLevelPage/SelectLevelPage.module.css index 6849c8820..37b2f69c7 100644 --- a/src/pages/SelectLevelPage/SelectLevelPage.module.css +++ b/src/pages/SelectLevelPage/SelectLevelPage.module.css @@ -43,12 +43,8 @@ flex-direction: column; justify-content: center; flex-shrink: 0; - border-radius: 12px; background: #fff; -} - -.levelLink { color: #0080c1; text-align: center; font-family: StratosSkyeng; @@ -59,10 +55,15 @@ text-decoration: none; } -.levelLink:visited { +.level:visited { color: #0080c1; } +.selected { + background-color: #004980; + color: #ffffff; +} + /* Скрываем стандартный чекбокс */ input[type="checkbox"] { position: absolute; @@ -122,3 +123,24 @@ label { display: flex; justify-content: center; } + +.goLeaderBoard:hover { + color: #004d40; +} + +.playButton { + width: 276px; + background-color: #7ac100; + color: white; + border: none; + border-radius: 12px; + padding: 10px 20px; + font-size: 18px; + cursor: pointer; + transition: background-color 0.3s ease; + margin-top: 20px; +} + +.playButton:hover { + background-color: #7cb342; +} From 91dde576ecdac51e0da8cb974af98f35dbc8c997 Mon Sep 17 00:00:00 2001 From: toxicgipsy Date: Sun, 18 Aug 2024 20:26:49 +0300 Subject: [PATCH 12/13] =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c2f841a4a..9ed05fb16 100644 --- a/README.md +++ b/README.md @@ -51,4 +51,8 @@ https://skypro-web-developer.github.io/react-memo/ ### Время разработки лидерборда -Планируемое время 16 часа — фактический 10 часов \ No newline at end of file +Планируемое время 16 часа — фактический 10 часов + +### Время разработки "Прозрения" и ачивок + +Планируемое время 10 часа — фактический 8 часов From b2a9fa7702a6120f590fb49b62c28fd26528b909 Mon Sep 17 00:00:00 2001 From: toxicgipsy Date: Sun, 18 Aug 2024 20:27:29 +0300 Subject: [PATCH 13/13] =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9ed05fb16..617ecd230 100644 --- a/README.md +++ b/README.md @@ -55,4 +55,4 @@ https://skypro-web-developer.github.io/react-memo/ ### Время разработки "Прозрения" и ачивок -Планируемое время 10 часа — фактический 8 часов +Планируемое время 10 часа — фактический 8 часов \ No newline at end of file