Небольшая консольная текстовая игра на Go с динамической регистрацией команд через рефлексию.
Кратко: движок хранит карту действий (map[string]interface{}) и вызывает нужную функцию через reflect — аргументы команд (строки) преобразуются в целевые типы (*room.Room, *item.Item) перед вызовом. Это даёт гибкость при добавлении новых действий без изменения центрального диспетчера.
- Регистрация действий в рантайме (
registerAction). - Автоматическое преобразование текстовых аргументов команды в объекты (комната, предмет) через
convertToActionArg. - Базовые действия:
осмотреться,идти,взять,надеть,применить. - Простая архитектура: пакеты
cmd,game,room,item,player.
cmd/— точка входа (CLI).game/— основной движок игры (Game), регистрация и выполнение действий, рефлексия.room/— модель комнаты, связи между комнатами, логика дверей.item/— определения предметов иItemRegistryдля их генерации по имени.player/— модель игрока и инвентаря.furniture/— модуль мебели: структуры Furniture, список предметов на мебели, методы IsBelong и TakeItem. Используется в room при инициализации (столы, стулья и т.п.).
- Go 1.18+ (рекомендуется последняя стабильная версия).
- Модульная поддержка (go modules).
- Клонируйте репозиторий:
git clone https://github.com/mark47B/simple-test-game.git
cd https://github.com/mark47B/simple-test-game.git- Запуск напрямую:
go run main.goВ проекте используются обычные go unit-тесты. Запустить все тесты:
go test ./... -v