Вторжение! [Игра для Windows Phone 7]

Грэг Дункан

Прошло тысячи лет (хорошо, много секунд, по крайней мере…) с момента нашего прошлого XNA-сообщения, прошли века с момента публикации последней игры (хорошо, несколько сообщений) и значительное время, когда мы имели дело с Windows Phone 7… нда .. хм... вроде… ну хорошо, хорошо… ладно. clip_image002

До сих пор я думал, что это крутая XNA-игра для Windows Phone, рассказывающая о том, чего я не представлял – о переносе с намного более старых версий Windows с помощью управляемого DirectX на Windows Phone 7 и XNA. Также мне понравилось, как этот проект иллюстрирует концепцию «стоять на плечах гигантов», и вместе с тем он другие фрагменты открытого кода.

И кому не понравиться играть во «Вторжение» на Windows Phone 7.x, имея все исходники?

Игра «Вторжение» на XNA для Windows Phone 7

«Вторжение» – это игра-стрелялка по НЛО, первоначально сконструированная Мауричо Риттером (Mauricio Ritter). В статье описывается моё портирование этой игры для Windows (C# и Managed-DirectX) на Windows Phone 7 (C# и XNA 4.0). Предоставляется полный исходный код игры.

Возвращаясь в 2002 год, Мауричо Риттер публикует свою игру «Вторжение» на CodeProject. Она была написана на С++ и использовала API DirectDraw из DirectX 7, который Microsoft удалил в DirectX 8. В следующем году Стив Майер (Steve Maier) перенес игру на C# с Managed DirectX и также опубликовал ее на CodeProject. Managed DirectX ушел после 2005 года и был заменен XNA. Обе эти устаревшие версии запускалиь на Windows XP. В статье описывается мой, занявший неделю, процесс портирования версии с Стива с Managed DirectX на Windows Phone 7, использующий XNA 4.0.

clip_image004

Я преследовал несколько целей, занимаясь переносом этой игры, кроме очевидной «чтобы можно было играть на Windows Phone 7». Эти цели следующие:

  • Перепроектировать код в более управляемые классы
  • Сделать код более читаемым, чтобы в нем могли разобраться новички
  • Упростить код за счет использования возможностей C# и классов платформы XNA
  • Навести глянец на игру, чтобы ее можно было разместить на Windows Phone Marketplace
  • Сохранить игру свободно доступной и с открытым исходным кодом
  • Но по-прежнему завершить процесс переноса за неделю!

Принимая во внимание мое свободное время (которое я растянул на несколько дней), я лишь частично надеялся на успех. Версию 1.0 я поместил на Marketplace сегодня и рассматриваю ее как «незавершенный проект».

Я упоминал о других проектах с открытым кодом?

Заимствованный открытый исходный код

Было несколько дополнительных моментов, которые я хотел бы добавить в игру и, к счастью, у меня уже были готовые файлы кода, что позволило включить их в проект легко и быстро. Эти файлы можно найти в пространствах имен ImproviSoft проектов Diagnostics, Drawing, и System. Не дайте пространству имен ввести вас в заблуждение – этот код свободно доступен и моя компания (ImproviSoft) не писала его большую часть. Файлы содержат комментарии, указывающие на первоисточники кода – главным образом это команда XNA Microsoft, XNAWiki.com, Эльберт Перез (Elbert Perez) из OccasionalGamer.com. Спасибо им большое! Вот список этих файлов:

  • FrameRateCounter . cs – выводит на экран количество фреймов в секунду для отладочных целей, от Шауна Хардгривза (Shawn Hargreaves) из команды Microsoft XNA.
  • SimpleShapes . cs – класс для прорисовки двумерных примитивов (например, Rectangle), от XNAWiki.com (хотя возможно упомянут еще где-то).
  • Accelerometer . cs – класс управления вводом акселерометра, от create.msdn.com (команда Microsoft XNA).
  • Camera2D . cs – класс для оперирования двумерной камерой (создания экранотрясения!), от Эльберт Переза из OccasionalGamer.com – Спасибо, Эльберт!
  • InputState . cs – класс для управления всеми типами устройств ввода, включая сенсорный экран, от create.msdn.com (команда Microsoft XNA).
  • MusicManager.cs – класс для проигрывания фоновой музыки, от от create.msdn.com (команда Microsoft XNA).
  • RandomManager . cs – простой класс для генерации случайных чисел – Хорошо, возможно его написал я, затратив пару минут.
  • SoundManager . cs – простой класс-оболочка для вызовов SoundEffect.Play для звуков с установленным максимальным уровнем громкости.
  • VibrationManager . cs – класс, заставляющий телефон вибрировать по команде (для форсирования ответа), от create.msdn.com (команда Microsoft XNA).

clip_image006

Вот снимок решения:

clip_image008

И, наконец, снимок работы на эмуляторе...

clip_image010