А теперь вы сможете догадаться, сколько растровых изображений вам понадобится? Если вы сказали шесть, то вы очень близки к правильному ответу. Ниже перечислены семь спрайтов, необходимые в игре:
► фоновое изображение шоссе;
► изображение цыпленка (рис. 7.2);
Рис. 7.2. Изображение цыпленка состоит из двух фреймов, на которых цыпленок идет вправо
► четыре изображения автомобилей (рис. 7.3);
Рис. 7.3. Все изображения автомобилей ориентированы вертикально, потому что они будут перемещаться вверх или вниз
► маленькое изображение головы цыпленка (рис. 7.4).
Рис. 7.4. Маленькая голова цыпленка символизирует число оставшихся жизней
Вы, вероятно, посчитали все эти изображения за исключением последнего. Маленькое изображение головы цыпленка используется, чтобы сообщить игроку, сколько жизней осталось. Например, в начале игры в нижнем правом углу экрана отображаются три маленьких головы цыпленка. Если цыпленок погибает под колесами автомобиля, то число жизней уменьшается на одну; игра продолжается до тех пор, пока хоть один цыпленок жив.
Теперь, когда вы имеете представление о графических объектах, используемых в игре, давайте рассмотрим, что еще нужно для игры. Во-первых, очевидно, понадобится отслеживать число жизней. Также, вероятно, вы захотите увеличивать число очков, если цыпленок удачно преодолел шоссе. Булевская переменная будет следить, завершена игра или нет.
Есть еще одна переменная, о необходимости которой можно сказать, прежде чем приступить к разработке и тестированию. Я говорю о задержке считывания ввода, эта величина поможет улучшить реакцию на пользовательский ввод. Если в каждом игровом цикле будет реакция на нажатия клавиш, то цыпленок будет перемещаться по экрану с неимоверной скоростью. Чтобы ограничить скорость его перемещения и понизить частоту обработки ввода, вы можете ввести специальную переменную и проверять нажатые клавиши, например, на каждом третьем игровом цикле.
...
В копилку Игрока
Точно определить задержку ввода нельзя, ее можно установить методом проб и ошибок, поэтому вы можете подобрать любое значение. Главное, чтобы обработка пользовательского ввода производилась на частоте, близкой к частоте нажатий клавиш игроком. Также помните, что величина задержки обработки пользовательского ввода может изменяться от одной игры к другой в зависимости от аппаратных ресурсов и скорости выполнения мидлета.
Давайте подведем итог. Первоначальная разработка игры Henway говорит о том, что в процессе игры мы должны управлять следующими элементами:
► числом жизней цыплят;
► счетом;
► булевской переменной окончания игры;
► переменной задержки пользовательского ввода.
Помня об этом, вы готовы перейти дальше к разработке кода игры Henway.
Разработка игры
Я надеюсь, что к настоящему моменту вы поняли, из чего состоит игра Henway. В следующих разделах речь пойдет о разработке кода этого мидлета. Это достаточно просто, поскольку большая часть кода основана на рассмотренных ранее примерах.
Написание кода
Неудивительно, что код игры Henway начинается с написания класса специального холста, производного от класса GameCanvas. Я говорю о классе Hcanvas, который ответственен за реализацию всей логики игры. Давайте рассмотрим один из его фрагментов. Ниже приведено объявление переменных класса:
private Display display;
private boolean sleeping;
private long frameDelay;
private int inputDelay;
private Random rand;
private Image background;
private Image chickenHead;
private Sprite chickenSprite; //Спрайты в игре Henway – это спрайт цыпленка и 4 спрайта автомобилей
private Sprite[] carSprite = new Sprite[4];
private int[] carYSpeed = new int[4]; //Поскольку автомобили движутся вертикально, не нужно хранить горизонтальные составляющие их скоростей
private boolean gameOver;
private int numLives;
private int score;
Первые две переменные и переменная rand должны быть вам знакомы по созданным ранее программам UFO. Четвертая переменная – новая. Переменная inputDelay контролирует чувствительность пользовательского ввода в игре. Оказывается, что если цыпленок сможет перемещаться очень быстро с одной стороны шоссе на другую, то в игру будет не так уж и весело играть. Чтобы ограничить скорость цыпленка, просто используйте переменную inputDelay.
Две переменные – объекты класса Image – используются для хранения фонового изображения и изображения головы цыпленка, жизни. Хотя эти изображения очень важны в игре, все же сердце Henway – это спрайты. Переменная chickenSprite – это спрайт цыпленка, а массив carSprite хранит спрайты всех четырех автомобилей. Поскольку при нажатиях на клавиши цыпленок перемещается на равные расстояния, то нет необходимости создавать переменную скорости. Однако автомобили движутся с различными скоростями, поэтому необходим массив carYSpeed – массив скоростей автомобилей вдоль оси Y.
Читать дальше
Конец ознакомительного отрывка
Купить книгу