diff --git a/.gitignore b/.gitignore index 4d29575de..e5bd9abd7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. +/.idea + # dependencies /node_modules /.pnp diff --git a/README.md b/README.md index 9b90842c4..169d95ae7 100644 --- a/README.md +++ b/README.md @@ -44,3 +44,10 @@ https://skypro-web-developer.github.io/react-memo/ Запускает eslint проверку кода, эта же команда запускается перед каждым коммитом. Если не получается закоммитить, попробуйте запустить эту команду и исправить все ошибки и предупреждения. + +### Доработка + +- Планируемое время: 10 часов +- Фактическое время: 20 часов +- Цель: Запускает eslint проверку кода, эта же команда запускается перед каждым коммитом. +Если не получается закоммитить, попробуйте запустить эту команду и исправить все ошибки и предупреждения. diff --git a/src/components/Cards/Cards.jsx b/src/components/Cards/Cards.jsx index 7526a56c8..89ad2906e 100644 --- a/src/components/Cards/Cards.jsx +++ b/src/components/Cards/Cards.jsx @@ -1,10 +1,12 @@ import { shuffle } from "lodash"; -import { useEffect, useState } from "react"; +import { useContext, useEffect, useState } from "react"; import { generateDeck } from "../../utils/cards"; 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 { LivesContext } from "../context/livesContext"; +import { EasyModeContext } from "../context/easymodeContext"; // Игра закончилась const STATUS_LOST = "STATUS_LOST"; @@ -50,6 +52,11 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { const [gameStartDate, setGameStartDate] = useState(null); // Дата конца игры const [gameEndDate, setGameEndDate] = useState(null); + //Режим трех попыток + const { easyMode } = useContext(EasyModeContext); + console.log(easyMode); + //Счетчик жизней + const { lives, setLives } = useContext(LivesContext); // Стейт для таймера, высчитывается в setInteval на основе gameStartDate и gameEndDate const [timer, setTimer] = useState({ @@ -73,6 +80,7 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { setGameEndDate(null); setTimer(getTimerValue(null, null)); setStatus(STATUS_PREVIEW); + setLives(3); } /** @@ -126,12 +134,30 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { const playerLost = openCardsWithoutPair.length >= 2; // "Игрок проиграл", т.к на поле есть две открытые карты без пары - if (playerLost) { + if (playerLost && !easyMode) { finishGame(STATUS_LOST); return; } // ... игра продолжается + if (playerLost && easyMode) { + setLives(lives - 1); + nextCards.map(card => { + if (openCardsWithoutPair.some(opencard => opencard.id === card.id)) { + if (card.open) { + setTimeout(() => { + setCards(prev => { + return prev.map(el => (el.id === card.id ? { ...el, open: false } : el)); + }); + }, 1000); + } + } + }); + if (lives === 1) { + finishGame(STATUS_LOST); + return; + } + } }; const isGameEnded = status === STATUS_LOST || status === STATUS_WON; @@ -164,6 +190,8 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { // Обновляем значение таймера в интервале useEffect(() => { + if (status === STATUS_LOST || status === STATUS_WON) return; + const intervalId = setInterval(() => { setTimer(getTimerValue(gameStartDate, gameEndDate)); }, 300); @@ -209,6 +237,7 @@ export function Cards({ pairsCount = 3, previewSeconds = 5 }) { /> ))} + {easyMode ?
Осталось попыток: {lives}
: ""} {isGameEnded ? (