Освой Android играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Разработка типичной игры

Создание игр - это увлекательное занятие для программиста. Но все игры строятся по общему сценарию. Есть несколько экранов для взаимодействия с пользователем:

Экран-заставка
Заставка с изображением логотипа компании, сценки из игры, версии и т.д. Появляется на несколько секунд, а затем исчезает. Может воспроизводиться фоновая музыка
Меню
Второй экран, на котором пользователь может переходить по пунктам меню, например, Играть, Счёт, Настройки, Справка
Основной экран
Здесь собственно происходит игровой процесс
Настройки
Экран настроек параметров игры
Счет
Окно, на которое можно перейти из меню. Здесь можно отображать статистику достижений, таблицу рекордов
Справка
Выводится инструкция по игре: описание, управление, советы

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

  • SplashActivity - активность по умолчанию. Выводится на несколько секунд. После нее должна выводиться активность MenuActivity
  • MenuActivity - содержит кнопки, картинки и другие элементы, с помощью которых можно запустить другие активности
  • GameActivity - основной экран игры, где выводится графика, идет подсчет очков и т.д.
  • SettingsActivity - сохраняем различные настройки дли игры
  • ScoresActivity - загружает данные о достижениях игроков и выводит его пользователю для просмотра
  • HelpActivity - выводит справочную информацию. Если текст большой, то нужно также предусмотреть прокрутку

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

Также удобно создать ещё один базовый класс активности с общедоступными компонентами, например, BaseActivity.

Контекст приложения

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

Получить доступ к контексту приложения текущего процесса можно через метод getApplicationContext():


Context context = getApplicationContext();

Поскольку класс Activity происходит от класса Context, вы можете использовать ключевое слово this вместо явного указания контекста приложения.

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

Мы знаем, что класс Activity - это основной класс любого приложения на Android. Значит, нам понадобится пять различных классов Activity для нашей цели. В процессе игры пользователь будет переходить из одной активности в другую (кроме первой активности, где будет предусмотрен автоматический переход).

Есть несколько вариантов запуска активностей

  • Через указание в файле манифеста - так запускается активность по умолчанию. В нашем случае это Splash-заставка
  • C помощью контекста приложения при помощи startActivity()
  • Запуск дочерней активности из родительской активности

Заставка-экран

Сама заставка должна появиться на несколько секунд. Обычно на неё помещают картинку, название игры, номер версии, автора и т.д. В некоторых случаях уместно использовать небольшую анимацию.

Меню игры

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

Экран справки

На данном экране пользователь может ознакомиться с правилами игры. Поэтому здесь нужно отобразить текст справки с возможностью прокрутки.

Счет или таблица рекордов

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

Экран настроек

На этом экране пользователь может редактировать и сохранять различные параметры, например, своё имя или аватар.

Основной экран

Здесь происходит основное действие игры. Если игра завершена, то нужно осуществить переход к экрану таблицы рекордов, чтобы посмотреть на результат игры.

Реализация прототипа приложения

Создадим новый проект с активностью SplashActivity, которая будет вызываться первой. Далее нам нужно создать файлы макетов для каждой активности. Так как первой у нас будет вызываться заставка, то переименуйте файл main_activity.xml в splash.xml. Затем можно сделать пять копий splash.xml и дать им новые имена: game.xml, help.xml, menu.xml, scores.xml и settings.xml.

Чтобы не путаться в экранах, рекомендую создать строковые ресурсы с именами экранов и сопоставить их с нужными экранами в TextView. Создаём ресурсы:


<string name="splash">Splash Screen</string>
<string name="game">Game Screen</string>
<string name="menu">Menu Screen</string>
<string name="help">Help Screen</string>
<string name="scrores">Scores Screen</string>
<string name="settings">Settings Screen</string>

Теперь открываем каждый файл разметки и меняем строчку android:text="@string/hello" на android:text="@string/splash" и т.п. После этой операции вы не будете путаться в экранах.

Сразу можно позаботиться о новом значке для игры и добавить его в папку drawable.

Мы уже договорились, что у нас будет основной класс BaseActivity. Создайте файл класса BaseActivity.java и вставьте минимальный код:


package ru.alexanderklimov.tomorpussy;

import android.app.Activity;

public class BaseActivity extends Activity {
	public static final String GAME_PREFERENCES = "GamePrefs";
}

Вернитесь к файлу SplashActivity.java и расширьте его из класса BaseActivity вместо класса Activity.

Скопируйте активность SplashActivity и создайте новые классы MenuActivity, HelpActivity, ScoresActivity, SettingsActivity и GameActivity.

В каждом созданном классе нужно заменить в строчке setContentView(R.layout.splash); ресурс макета на соответствующий, например, для экрана настроек, это будет R.layout.settings.

Далее необходимо прописать все созданные классы в манифесте приложения.

Для проверки можно запустить проект на эмуляторе. Если все сделано правильно, то в окне эмулятора появится экран Заставки, который содержит текст Splash Screen.

Создание экрана-заставки

Наша задача - создать экран, который исчезнет сам после короткой паузы. Для игры можно использовать анимационную заставку, а также выводить информацию о версии, разработчике и т.д. Напоминаю, что для макета заставки у нас используется файл splash.xml в папке layout.

После анимации нужно запустить новый экран с меню и закрыть текущий экран.


startActivity(new Intent(SplashActivity.this,
		MenuActivity.class));
SplashActivity.this.finish();
Реклама