воскресенье, 15 апреля 2012 г.

1. Выбираем задачу

В настоящее время не имеется недостатка в статьях про разработку приложений под Android. К сожалению, при всей их полезности, большинство их них слишком концентрируется на вопросах кодирования, оставляя за кадром другие, не менее важные для начинающего программиста вопросы разработки.В этом цикле статей я постараюсь последовательно рассмотреть все практические вопросы, возникающие при разработке, взяв, в качестве примера, не сложное игровое приложение и обращая внимания на специфичные, для платформы Android, моменты.

 1. Выбираем задачу


Первым, и наиболее важным, вопросом является постановка задачи. При имеющейся на сегодняшний день конкуренции, крайне непросто придумать что-то новое, заинтересовав тем-самым потенциального потребителя.
Помимо новизны, приложение не должно отпугивать пользователя непривычными концепциями или неудобным интерфейсом и, что самое главное, должно быть для него полезным.
Разумеется невозможно удовлетворить запросы всех потенциальных потребителей и, по этой причине, важно четко представлять на кого ориентировано разрабатываемое приложение.

Помимо перечисленных аспектов, ориентированных на потребителя, не менее важно отдавать себе отчет в имеющихся ограничениях собственных возможностей. Дабы не тратить времени на придумывание чего-то крайне полезного потребителю, но, при этом, не реализуемого имеющимися в наличии силами, начнем свой анализ с обобщенного портрета разработчика:

  1. Разработчик имеет опыт разработки приложений на Java, но, на текущий момент,   слабо знаком со спецификой разработки приложений под Android
  2. Имеющиеся ресурсы крайне ограничены (имеется 1 Java-разработчик, нет   дизайнера и специалиста по звуковому оформлению)
Очевидно, что в условиях ограниченных ресурсов, неразумно замахиваться на трудоемкие проекты, связанные, например, с 3d-графикой или реализацией игрового AI.
Также, вследствие слабого знакомства с целевой платформой, вряд-ли удастся осчастливить потенциальных пользователей какой либо удобной для них утилитой.

Идеальной, в этих условиях, выглядит разработка какой либо головоломки, не требующей сложных визуальных эффектов, звукового сопровождения, AI и т.п.
Попытаемся проанализировать потенциального потребителя:

  1. Наш Потребитель имеет довольно высокий IQ и хорошо знаком с существующими  головоломками
  2. Потребитель (в целом довольно занятый человек) в настоящий момент имеет  вынужденно много свободного времени, например находясь в общественном транспорте или очереди в поликлинику
Это может показаться очевидным, но такому потребителю не очень интересны игры, содержащие в себе соревновательный элемент. Находясь в транспорте, более важно потратить свободное время чем свои нервы, соревнуясь с кем-то.
В этих условиях, не интересны серии мелких головоломок (уровней), решаемых двумя - тремя движениями. Иными словами, мы собираемся использовать не концепцию последовательности уровней, а скорее коллекцию головоломок, всегда находящихся под рукой.

Необходимость звукового сопровождения, для нашего приложения, сомнительна (если наш Пользователь, решая головоломку хочет послушать любимую музыку, он может включить MP3-плейер, которому не должны мешать посторонние звуки). 

Сформируем требования к нашей игре:

  1. Предоставляемых игрой головоломок может быть не очень много, но они должны быть достаточно сложными
  2. Должна иметься возможность автоматического сохранения текущего состояния. Прервав игру, Пользователь должен иметь возможность при следующем  включении продолжить ее с того места где он остановился
  3. Все предоставляемые головоломки должны быть изначально доступны. Пользователь должен иметь возможность выбрать интересную ему задачу, а не пытаться доказать себе или кому-то еще, что он ее достоен, решая задачи ему не интересные
  4. Не должно быть контроля времени ни в каком виде! Пользователь едет на работу в трамвае, он и так нервный! незачем нервировать его еще больше :) Оценивать решение головоломки можно по количеству выполненных ходов, при этом, имеет смысл предоставить возможность отката ходов на любую глубину, вплоть до начальной позиции
  5. Игра должна допускать возможность добавления новых головоломок (возможно самим Пользователем)
Имеется большое количество известных головоломок, соответствующих нашим требованиям. Мы остановим свой выбор на пятнашках :)
Разумеется, с учетом того, что пятнашки, в наше время, не писал только ленивый, имеется несметное количество имеющихся их реализаций. Имеющиеся реализации пятнашек разнообразны и временами удивительны и мы вряд-ли сможем в этом с ними соревноваться.

К счастью, имеется целый класс головоломок незаслуженно обойденных вниманием разработчиков. В 80-90-е эти головоломки были очень популярны у нас и за рубежом и выпускались "в пластике". 
В книге известного популяризатора математики Мартина Гарднера "Математические досуги" (изд. "Мир" 1972 г.), в числе прочих аналогичных головоломок описывается головоломка "Рыжий осел".



На рисунке представлена начальная позиция. Перемещая плашки на свободное место, следует переместить большую квадратную плашку максимально вниз, расположив ее по центру.
Эта головоломка достаточно сложна (кратчайшее известное решение требует выполнения 81 хода).

Ее разработкой я и предлагаю заняться в следующих статьях.

Комментариев нет:

Отправить комментарий