From 668209434d9a20f5def1ce8b642c72eef49536df Mon Sep 17 00:00:00 2001 From: Suhani Gurjar Date: Thu, 12 Sep 2024 16:02:24 +0530 Subject: [PATCH] Update README.md --- README.md | 59 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index f946dc4..91faeec 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,42 @@ -Задача дописать игру в крестики-нолики. - -Сейчас в коде описаны функции для рисования поля любого размера и рисования любого символа в клетке этого поля. -Твоя задача дописать код, чтобы это стало полноценной игрой в Крестики-нолики. - -1. Реши, как будешь хранить поле. Тебе нужна будет такая структура, в которой удобно понимать есть ли победитель: три клетки по горизонтали, вертикали или диагонали, заполненные одинаковыми символами. -2. Допиши функцию cellClickHandler, чтобы после клика ставился крестик или нолик в соответствующее поле. -3. Если поле, по которому кликнули, не пустое, символ ставиться не должен. -4. Если кончились ходы, выведи alert с текстом "Победила дружба". -5. Напиши функцию, которая считает: есть ли уже победитель. Если есть победитель, выведи alert с названием победителя -6. Если есть победитель, покрась победные значения в клетках в красный. -7. После победы, клик по полю больше не должен ставить крестик или нолик. -8. Обрабатывай клик по кнопке "Сначала": допиши метод resetClickHandler, чтобы поле очищалось. -9. \* Сделай так, чтобы можно было в начале игры задавать поле произвольного размера. -10. \* Напиши "искусственный интеллект" — функцию, которая будет ставить нолики с случайное пустое поле. -11. \* Напиши чуть более умный искусственный интеллект — функция, ставящая нолики в случайном месте обязана поставить нолик в такое поле, нолик в котором приведет к выигрышу "ИИ". -12. \* Сделай так, чтобы при заполнении больше половины клеток на поле, оно бы расширялось: добавлялось бы по одному ряду с каждой стороны. +# Игра "Крестики-нолики" + +В этом проекте реализована игра **Крестики-нолики**. Начальная реализация включает функции для рисования поля любого размера и отображения символов в каждой клетке. Задача — дописать код для полноценной игры с поддержкой различных функциональностей. + +## Задачи + +1. **Хранение игрового поля** + Нужно выбрать подходящую структуру данных для хранения игрового поля. Она должна быть удобной для проверки победных условий — три клетки по горизонтали, вертикали или диагонали, заполненные одинаковыми символами. + +2. **Обработка клика по клетке** + Допиши функцию `cellClickHandler`, которая должна: + - После клика ставить крестик или нолик в соответствующую клетку. + - Если клетка уже занята, символ ставиться не должен. + +3. **Проверка на ничью** + Если все ходы сделаны, и победитель не определен, нужно вывести `alert` с текстом **"Победила дружба"**. + +4. **Определение победителя** + Напиши функцию, которая будет проверять: + - Есть ли победитель, заполнивший горизонталь, вертикаль или диагональ. + - Если победитель найден, выведи `alert` с названием победителя. + - Окрась победные клетки в красный цвет. + - После победы клик по клеткам должен быть отключен. + +5. **Сброс игры** + Обработай клик по кнопке **"Сначала"**: напиши метод `resetClickHandler`, который будет очищать поле и начинать игру заново. + +## Дополнительные улучшения + +- **Поле произвольного размера** + Сделай так, чтобы в начале игры можно было задавать произвольный размер игрового поля. + +- **Искусственный интеллект (ИИ)** + Напиши функцию для "искусственного интеллекта", которая будет: + - Ставить нолики в случайное пустое поле. + +- **Улучшенный ИИ** + Допиши ИИ, который будет умнее: + - Он обязан ставить нолик в такую клетку, которая приведет к его победе, если такая клетка существует. + +- **Расширение поля** + Сделай так, чтобы при заполнении более половины клеток на поле, оно автоматически расширялось. Добавляй по одному ряду с каждой стороны поля.