Домашнее задание №1
Тема: текстовая игра
В рамках выполнения задачи вы научитесь писать базовый код, поработаете со структурами, методами, функциями, if-ами, map-ами. Никаких дополнительных специфичных знаний вам не потребуется.
Основная цель задания - поупражняться в моделировании объектов.
Когда-то давно, когда компьютеры были большими, интернет - медленным, а графических ускорителей не было вовсе, уже существовали многопользовательские игры. Они имели текстовый интерфейс и назывались MUD, Multi User Dungeon.
Мы пишем простую игру, которая реагирует на команды игрока.
В реализации комнат удобно использовать анонимные функции - смотрите 1/2_functions/firstclass.go Так же помните, что поле структуры может быть функцией
Игровой мир обычно состоит из комнат, где может происходить какое-то действие. Так же у нас есть игрок. Как у игрока, так и у команты есть состояние. initGame делает нового игрока и задаёт ему начальное состояние. В данной версии можно обойтись глобальными переменными для игрока и мира ( команат )
Команда в handleCommand парсится как
В тестах представлены последовательности команд и получаемый ответ. Задача - пройти все тесты и сделать правильно. Под правильным понимается универсально, чтобы можно было без проблем что-то добавить или убрать. Т.е. бесконечный набор захардкоженных if'ов для всего мира не подойдёт. Конкретные условия могут быть только внутри конкретной комнаты. Надо думать в сторону объектов, вызова функций, структур, которые описывают состояние комнаты и игрока, функций которые описывают какой-то интерактив в комнате. Не забывайте что вы можете создать мапу из функций. Или можно реализовать триггер (действие, выполняемое при каком-то событии). Или у структуры поле может иметь тип "функция".
Хардкором (набором if-ов без нормального моделирования структур) это задание пишется за 3 часа. Но хардкором нельзя! Нормально вдумчиво - чуть дольше.
Глобальная мапа с полной командой от юзера - это тоже считается за хардкод.
Тестовых кейсов много. Прочитайте их внимательно, там есть результаты работы всего что вам надо. Не стесняйтесь задавать вопросы. Однако прежде чем спрашивать - попробуйте что-то сделать и четко сформулируйте, что у вас не получается. Хитрой логики тут нет, алгоритмов тоже. Только вызов методов, сохранение состояния, условия.
В идеале ваша архитектура с комнатами должна без проблем прежить добавление дополнительных комнат.
Документация по стандартной библиотеке языка: https://golang.org/pkg/
Код надо писать в main.go, если требуется - можно создавать дополнительные файлы. main_test.go править не надо
У вас обязательно должен быть хоть какой-то код в main.go - на него ориентируется запуск тестов в gitlab-ci.
Запускать тесты через go test -v
находясь в папке game
.
========================