Документация к игре монополия, написанной в ходе прослушивания курса «Технология программирования», преподаватель: Кленин Александр Сергеевич. Работу выполнил студент 246 группы Дзема Дмитрий Борисович dmitriy@dzema.name
Для работы игры необходимы:
- ruby 1.8.6. тестировалось на версии ruby 1.8.6 (2007-09-24 patchlevel 111) [powerpc-darwin8.11.0]
- rubygems:
- mongrel
- rake (для запуска немногочисленных тестов и спек)
- active_support
- JSON
- camping
- evma_httpserver
Запуск игры
Для запуска игры предназначены 2 файла.
interface.rb
Запускает клиент игры и веб-интерфейс. Принимает следующие аргументы командной строки
- -p --port Локальный порт, на котором клиент ждет запросы (default: 8080)
- -h --host ip-адрес, на котором клиент ждет запросы (default: localhost)
- -d --default После запуска начинать игру с параметрами по умолчанию (правила buxter.js, имя игрока "Default Player"). Полезно для тестирования
После запуска начинает ждать входящих запросов по указанным ip-адресу и порту. Интерфейс доступен по адресу http://$host:$port/interface/
greedy_robot.rb
Запускает игровой AI. Он подсоединяется по указанному адресу как игрок и ведет себя как обычный удаленный игрок, за исключением того, что у него нет веб-интерфейса и он ходит самостоятельно. Аргументы командной строки:
- -p --port Локальный порт, на котором робот ждет запросы (default: 9999)
- -a --address ip-адрес, на котором робот ждет запросы (default: localhost)
- -n --name Имя робота в игре (default: Greedy Bot)
- --host HOST:PORT Адрес игрока, к которому подключается робот (default: localhost:8080)
Описание архитектуры
Игра состоит из нескольких компонент, которые реализованы в виде классов ЯП Ruby. Основной идеей было разделение логики игры от сетевого интерфейса.
- rules.rb Класс инкапсулирует работу с правилами, преобразует имена полей вида StartingMoney в starting_money
- game_state.rb Инкапсулирует работу с изменяющимся состоянием игры, таким как порождение состояние игры из правил, создание игроков и т.д.
- player.rb Инкапсулирует работу с недвижимостью игрока, его банкротством и т.д.
- core.rb Инкапсулирует в себе правила игры, кто в какой момент может ходить, как закладывается недвижимость и т.д. Работает с сущностями типа «игрок»
- network.rb Все, связанное с работой по сети: отпарвка и отсылка запросов по внутреннему протоколу игры, установление соответствия между сетевыми адресами и сущностями «игрок». Содержит класс Monopoly::Request для отправки запроса удаленным клиентам.