Освой Android играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Создание игр - это увлекательное занятие для программиста. Но все игры строятся по общему сценарию. Есть несколько экранов для взаимодействия с пользователем:
Это типичный пример стандартной игры. Естественно, вы можете отказаться от каких-то экранов или, наоборот, добавить еще, но в целом картина ясна. Таким образом нам нужно реализовать шесть активностей:
У каждого класса активности должен быть собственный файл разметки со своим набором элементов. Ваша задача научиться управлять состоянием приложения, пользоваться настройками, запускать нужные активности.
Также удобно создать ещё один базовый класс активности с общедоступными компонентами, например, BaseActivity.
Контекст приложения - это основа работы любого приложения, в том числе и игры. Он служит для получения доступа к настройкам и ресурсам, используемым несколькими экземплярами активностей.
Получить доступ к контексту приложения текущего процесса можно через метод getApplicationContext():
Context context = getApplicationContext();
Поскольку класс Activity происходит от класса Context, вы можете использовать ключевое слово this вместо явного указания контекста приложения.
Разобравшись с функциональностью будущей игры, можно приступить к её реализации.
Мы знаем, что класс Activity - это основной класс любого приложения на Android. Значит, нам понадобится пять различных классов Activity для нашей цели. В процессе игры пользователь будет переходить из одной активности в другую (кроме первой активности, где будет предусмотрен автоматический переход).
Есть несколько вариантов запуска активностей
Сама заставка должна появиться на несколько секунд. Обычно на неё помещают картинку, название игры, номер версии, автора и т.д. В некоторых случаях уместно использовать небольшую анимацию.
Экран меню игры служит для навигации по различным экранам игры. Меню появляется сразу после экрана-заставки и предоставляет пользователю выбор дальнейших действий - перейти сразу к игре, прочитать инструкцию, посмотреть таблицу рекордов и так далее.
На данном экране пользователь может ознакомиться с правилами игры. Поэтому здесь нужно отобразить текст справки с возможностью прокрутки.
В таблице рекордов пользователь может видеть текущий игровой счёт с перечнем игроков, заработавших наибольшее количество очков. Иными словами, здесь выводится статистика лучших игровых достижений или вывод текущего счета.
На этом экране пользователь может редактировать и сохранять различные параметры, например, своё имя или аватар.
Здесь происходит основное действие игры. Если игра завершена, то нужно осуществить переход к экрану таблицы рекордов, чтобы посмотреть на результат игры.
Создадим новый проект с активностью 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();