/RoboMobo

Primary LanguageJava

В качестве readme привожу письмо Аршавира. От себя добавлю, что распределение задач нужно переделывать в связи с увеличением команды проекта. В файле RoboMobo_graph.jpg набросана структура проекта в моем понимании.

Задача заключается в написании многопользовательского игрового приложения под Андроид. Изначально планируется осуществить только базовые игровые возможности. Модель игры аналогична принятой в огромном количестве браузерных mmorpg клонов. Каждый игрок стремится получить наиболее количество очков. Очки получают за победу в дуэлях (например, +1 за ничью, +2 за победу, 0 за поражение). Дуэль это процесс с участием двух игроков, управляющих своими персонажами (каждый со своего Андроид-девайса, связь по Bluetooth). После подключения девайсов друг к другу (при запуске игры) один из игроков может вызвать на дуэль другого, тот может отклонить или согласиться на сражение. Изначально весь игровой мир ограничивается только двумя игроками. Процесс сражения заключается в последовательности ходов. Чтобы совершить очередной ход, игрок выбирает что он в данный ход будет защищать (варианты: голова, корпус, ноги) и куда собирается атаковать (тоже три варианта). Задав эти два параметра, игрок нажимает на кнопку "Submit". Когда оба игрока совершили ход, на экране изменяется количество оставшихся хитпойнтов у каждого из игроков. Когда у одного из игроков заканчиваются хитпойнты, дуэль заканчивается, игрокам начисляются положенные им очки.

Основная особенность, которая призвана скрасить геймплей, это возможность завоевывать территорию. Если игрок находится вне дуэли, то он может перемещаться по некоторому игровому полю, состоящему из клеток (например, 10x10 клеток, образующих квадратное поле). Каждая клетка характеризуется двумя параметрами:
1. Кто стоит на данной клетке (варианты: игрок A, игрок B, никто). Инициировать дуэль можно только тогда, когда оба игрока находятся на одной клетке.
2. Владелец территории (варианты: игрок A, игрок B, нейтральная территория). Изначально вся территория нейтральная. Чтобы захватить клетку, нужно на ней победить соперника. Основная задача в игре — захват территории максимальной площади.
Планируется привязать игровое поле к некоторой территории (например, квадратному куску поляны на Летней школе 100x100 метров). Перемещение игрока в виртуальном пространстве должно быть привязано к координатам игрока, получаемым с помощью GPS, встроенного в девайс. Этот принцип позволит привнести в геймплей элементы дополненной реальности, т. е. необходимость со стороны игрока действий как в виртуальном игровом пространстве, так и в реальном.

Теперь, когда у нас есть модель, поговорим про разработку. Предлагаю на данном этапе разделить задачи по тому, к какой технологии они тяготеют (Bluetooth, GPS).

Разработчик системы дуэлей, основанной на Bluetooth, должен начать с реализации простейшего GUI, обеспечивающего функции модели. Используются стандартные виджеты, изначально никакой графики (надеемся в дальнейшем привлечь настоящих дизайнеров).
Этапы работы (один этап это ориентировочно 1 рабочий день):
1. Наладить всю цепочку разработки под Андроид-смартфоны. Требуется реализовать hello world и запустить его на симуляторе и на реальном девайсе.
2. Накидать виджеты, написать заготовочные классы-болванки, включая заготовку под интерфейс синхронизации игровых параметров (изначально все данные дублируются на оба девайса, потом имеет смысл реализовать хранение игровых данных на сервере).
3. Реализовать интерфейсы, управляющий параметрами игровой модели сражения. Хотелось бы, чтобы это был некоторый заранее обговоренный JSon-объект, типа {name: "Player_A", hp: 25, ...}
4. Написать эмулятор "второго" игрока, т. е. unit-test систему, принимающую данные, передаваемые от GUI через выходные интерфейсы класса, контролирующего GUI. На выходе — случайные данные в корректном формате. Таким образом надо отладить работу простейшей системы сражения (пока используя один девайс).
5. Написать hello world, пересылая простейший JSon-объект по Bluetooth. Тут уже потребуется 2 смартфона (не знаю, можно ли будет использовать эмулятор или ПК для симуляции второго игрока).
6. Прикрутить Bluetooth к имеющимся классам.
Предлагаю эту часть проекта взять Севе.

Разработчик системы навигации, основанной на GPS, должен начать с аналогичных шагов (простейшее GUI).
Этапы работы:
1. Наладить всю цепочку разработки под Андроид-смартфоны. Требуется реализовать hello world и запустить его на симуляторе и на реальном девайсе.
2. Накидать виджеты (требуется нарисовать на экране джойстик "вверх-вниз-влево-вправо" и сетку 10x10, закрашивая две нужные клетки разными цветами), написать заготовочные классы-болванки, включая заготовку под интерфейс синхронизации игровых параметров (изначально все данные дублируются на оба девайса, потом имеет смысл реализовать хранение игровых данных на сервере).
3. Реализовать интерфейсы, управляющий параметрами моделей самого поля и перемещения по нему. Хотелось бы, чтобы это были некоторые заранее обговоренные JSon-объекты, типа {"Player_A": [5, 7], "Player_B": [3, 4]} для текущего положения игроков и {"Player_A": {[1, 1], [2, 2]}, "Player_B": {[9, 9], [8, 8], [7, 7]}} для описания принадлежности каждой клетки.
4. Написать систему, эмулирующую на одном смартфоне поведение одного игрока (вторым управляет пользователь при помощи джойстика). Тут синхронизации никакой нет, т. е. перемещения одного игрока никак не зависят от второго. Эмулятор тоже может рандомно "шагать" в любом доступном направлении.
5. Тут требуется воспользоваться опытом Севы, который должен раскурить работу с Bluetooth. Требуется прикрутить его для синхронизации данных от двух девайсов. В результате надо получить игру, в которой два игрока, никак не влияя друг на друга, перемещают каждый свой квадратик по едином игровому полю (каждый видит перемещения себя и другого).
6. Написать hello world с применением GPS. Например, вывести текущие координаты на дисплей (это поддерживается симулятором, но для настоящего девайса требуются некоторые телодвижения, типа регистрации девайса и т. п.)
7. Написать приложение, которое по нажатию кнопки фиксирует на дисплее текущие координаты, полученные от GPS и рисует на дисплее точку, соответствующую этой координате (например, используя интерфейс google maps). Т. е. чтобы можно было поставить метку на карте и сохранить ее координаты в память, например в структуре вида [100500, 200600].
8. Доработать программу из предыдущего пункта, позволяя формировать границы изначального игрового поля, привязанные к географическим точкам. При начале новой игры один из игроков обходит 4 точки и регистрирует их как границы большого квадрата (точнее, его вершины). По окончании процедуры формирования границ игрового поля на карте должны появиться 4 выбранные точки.
9. Написать методы классов, которые вычисляют все необходимые данные игрового поля. Требуется преобразовывать координаты игроков, полученные от GPS, к игровым координатам вида [x, y], где x, y от 0 до 9.
10. Объединить функциональность двух полученных приложений, результат такой же, как после п. 4, но перемещение в игре не джойстиком, а ногами. При выключении режима debug джойстик вообще убирать.
Эту часть предлагаю начать Артему. Тут больше пунктов, но Артем хочет получить задачу как можно раньше. Думаю, в процессе разработки будет равновесие. Если что, взаимопомощь и даже обмен задачами в некоторых случаях вполне допустимы.

Текущее описание модели игры можно еще обсуждать, я постарался изложить "сухой остаток" изначальных обсуждений с Севой.