Giter Site home page Giter Site logo

go-mud's Introduction

Домашнее задание №1

Тема

Текстовая игра

Типовой объём решения

300-400 строк.

Дедлайн

3 недели с момента лекции, на которой была выдана домашка.

Условие

В рамках выполнения задачи вы научитесь писать базовый код, поработаете со структурами, методами, функциями, if-ами, map-ами. Никаких дополнительных специфичных знаний вам не потребуется.

Основная цель задания - поупражняться в моделировании объектов.

Когда-то давно, когда компьютеры были большими, интернет - медленным, а графических ускорителей не было вовсе, уже существовали многопользовательские игры. Они имели текстовый интерфейс и назывались MUD, Multi User Dungeon.

Мы пишем простую игру, которая реагирует на команды игрока.

В реализации комнат удобно использовать анонимные функции - смотрите 1/02_functions/2_firstclass.go Так же помните, что поле структуры может быть функцией.

Игровой мир обычно состоит из комнат, где может происходить какое-то действие. Так же у нас есть игрок. Как у игрока, так и у команды есть состояние. initGame делает нового игрока и задаёт ему начальное состояние. В данной версии можно обойтись глобальными переменными для игрока и мира ( комнат )

Команда в handleCommand парсится как

$команда $параметр1 $параметр2 $параметр3

https://golang.org/pkg/strings/#Split вам в помощь

В тестах представлены последовательности команд и получаемый ответ. Задача - пройти все тесты и сделать правильно. Под правильным понимается универсально, чтобы можно было без проблем что-то добавить или убрать. например добавить/убрать двери или еще предметы не меняя ничего в коде, кроме инита игры в initGame. Но это не значит что вам просто весь код надо затолкать в initGame и сделать для каждого помещения отдельную реализацию каждой из возможных команд. Т.е. бесконечный набор захардкоженных if'ов для всего мира не подойдёт. Конкретные условия могут быть только внутри конкретной комнаты. Надо думать в сторону объектов, вызова функций, структур, которые описывают состояние комнаты и игрока, функций которые описывают какой-то интерактив в комнате. Не забывайте что вы можете создать мапу из функций. Или можно реализовать триггер (действие, выполняемое при каком-то событии). Или у структуры поле может иметь тип "функция".

Хардкодом (набором if-ов без нормального моделирования структур) это задание пишется за 3 часа. Но хардкором нельзя! Нормально вдумчиво - чуть дольше.

Глобальная мапа с полной командой от юзера - это тоже считается за хардкод, так делать нельзя

В задании специально некоторые места сделаны нелогичными, не надо писать и просить упростить. Это сделано для того чтобы вы пописали побольше кода и наработали навык.

Тестовых кейсов много. Прочитайте их внимательно, там есть результаты работы всего что вам надо. Не стесняйтесь задавать вопросы. Однако прежде чем спрашивать - попробуйте что-то сделать и четко сформулируйте, что у вас не получается. Хитрой логики тут нет, алгоритмов тоже. Только вызов методов, сохранение состояния, условия.

В идеале ваша архитектура с комнатами должна без проблем пережить добавление дополнительных комнат.

Документация по стандартной библиотеке языка: https://golang.org/pkg/

Код надо писать в main.go, если требуется - можно создавать дополнительные файлы. main_test.go править НЕЛЬЗЯ

Запускать тесты через

go test -v

находясь в папке game.

дополнительно перед сдачей надо прогнать линтеры(это программа которая проверит качество кода написанного вами). это можно сделать запуском скрипта run_lint, который проверит все папки с домашками, либо запуском по конкретной папке

# для всего
./run_lint.sh

# только для первой домашки
golangci-lint -c .golangci.yml run ./01_intro/99_hw/...

предварительно надо установить golangci-lint. это гуглится и делается в зависимости от платформы (windows/mac/linux/...)

go-mud's People

Contributors

ecoarchie avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.