tanner / hangman
Game Hangman
Requires
- gabordemooij/redbean: ^5.7
- wp-cli/php-cli-tools: ^0.12.6
Requires (Dev)
README
Описание проекта
Программа для консольной игры "Виселица".
В данной лабораторной работе (ЛР-5) игра доработана:
- для хранения данных по партиям используется база данных SQLite;
- доступ к базе реализован через ORM-библиотеку RedBeanPHP (без прямых SQL-запросов и ручного
PDO).
Правила игры
Компьютер загадывает слово из 6 букв (английский алфавит). Игрок должен угадать слово, по одной вводя буквы с клавиатуры.
После каждой попытки программа:
- открывает все позиции угаданной буквы в слове;
- если буквы нет в слове — увеличивает количество ошибок и дорисовывает часть человечка на виселице;
- показывает текущее состояние виселицы, слова и список уже использованных букв.
Игрок выигрывает, если успевает открыть все буквы слова до того, как будет полностью дорисован человечек. Если количество ошибок достигает 6, игрок проигрывает.
Сохраняемая информация
Информация о каждой игре сохраняется в базе данных SQLite (через ORM RedBeanPHP):
- дата и время игры;
- имя игрока;
- загаданное слово;
- исход игры (угадал / не угадал);
- список всех попыток:
- номер хода;
- введённая буква;
- результат (угадал букву / не угадал).
Режимы работы программы
Программа поддерживает несколько режимов работы.
-
Новая игра
Запускает новую партию:- спрашивает имя игрока;
- выбирает случайное слово из таблицы слов;
- запускает игровой цикл до победы или поражения;
- сохраняет результаты партии и все ходы в базе данных.
-
Список сохранённых игр
Выводит список всех сыгранных партий:- ID игры;
- дата и время;
- имя игрока;
- загаданное слово;
- результат (угадал / не угадал).
-
Повтор сохранённой партии
Позволяет просмотреть ход любой сохранённой игры по её ID:- пошаговая визуализация виселицы;
- отображение текущего состояния угадываемого слова;
- вывод используемых букв и результата каждого хода.
-
Интерактивное меню (по умолчанию)
При запуске без параметров программа открывает консольное меню:- Новая игра
- Список сохранённой игры
- Повтор сохранённой игры
- Выход
Также поддерживаются ключи командной строки (без меню):
php bin/hangman.php --newилиphp bin/hangman.php -n— новая играphp bin/hangman.php --listилиphp bin/hangman.php -l— список игрphp bin/hangman.php --replay IDилиphp bin/hangman.php -r ID— повтор игры с указанным IDphp bin/hangman.php --helpилиphp bin/hangman.php -h— справка по режимам
Особенности реализации в ЛР-5
- Вся работа с базой данных перенесена на ORM RedBeanPHP:
- подключение выполняется в
Database::init()черезR::setup('sqlite:...'); - таблицы создаются и изменяются автоматически в "fluid"-режиме;
- операции чтения/записи выполняются с помощью функций
R::dispense(),R::store(),R::findAll(),R::find(),R::load()и т.п.; - прямые SQL-запросы (
SELECT,INSERT,UPDATE,CREATE TABLEи т.д.) в коде не используются.
- подключение выполняется в
- Логика работы с БД изолирована в классе
Game:- создание игры;
- добавление попыток;
- завершение игры (win/lose);
- выборка списка игр и одной игры с её попытками.
Требования для запуска проекта
- PHP >= 8.1 (CLI-режим)
- Composer (глобально установленный)
- SQLite (для хранения данных)
- Интернет/локальный доступ к пакету gabordemooij/redbean (устанавливается через Composer)
Установка и запуск
1. Клонировать репозиторий
git clone https://github.com/ИМЯ_ПОЛЬЗОВАТЕЛЯ/402_DBAppTech_CHumakov_VA.git
cd 402_DBAppTech_CHumakov_VA/Task05/hangman
(адрес репозитория и путь можно скорректировать под вашу структуру)
2. Установка зависимостей
composer install
3. Сгенерировать автозагрузку
composer dump-autoload -o
4. Запуск проекта
Интерактивное меню:
php bin/hangman.php
Примеры запуска конкретных режимов:
- Новая игра:
php bin/hangman.php --new
- Список игр:
php bin/hangman.php --list
- Повтор игры с ID = 3:
php bin/hangman.php --replay 3
Структура проекта
Task05/
└─ hangman/
├─ bin/
│ └─ hangman.php # Запускной скрипт игры (CLI, меню/режимы)
├─ src/
│ ├─ Game.php # Логика игры и работа с БД через RedBeanPHP (модель)
│ ├─ Controller.php # Управление режимами, игровой процесс
│ └─ View.php # Отображение и взаимодействие с пользователем (консоль)
├─ vendor/
│ └─ ... # Зависимости Composer (включая RedBeanPHP)
├─ .gitignore
├─ composer.json # Настройки Composer, автозагрузка (PSR-4), зависимости (RedBeanPHP)
├─ composer.lock
└─ README.md # Документация проекта для ЛР-5
Автор
SakatoGin(Chumakov VA)