Создать игру без счетчиков можно, но… Есть причины, по которым это крайне не желательно!
Счетчики применяются, чтобы:
игра с одинаковой скоростью шла на Celeron 266 и на P4 3000Mh;
анимация разных героев в игре различалась по скорости;
перемещение объектов происходило с определенной скоростью;
чтобы, к примеру, именно на 20 секунде первого уровня пошел дождь или поднялся ветер в игре.
На самом деле применение счетчиков еще более пространно, но остановимся на этом.
При анимации бабочки мы видим - скорость анимации велика. Для замедления ее используются счетчики.
Посмотрим использование счетчиков на примере:
//Блок инициализации переменных
Speed_anim=10
//скорость анимации. Число подбирается экспериментально.
I=0 //счетчик кадров анимации
//Загрузка графики
LOADSPRITE "babochka.bmp",0
LOADSPRITE "babochka2.bmp",1
LOADSPRITE "babochka3.bmp",2
LOADSPRITE "babochka4.bmp",3
// Начало цикла
WHILE TRUE //повторять вечно. На самом деле выход по ESC
SPRITE i, 320, 240, 0 //Вывести спрайт i в координаты 320х240.
IF Speed_anim=10 //если скорость анимации =10
i=i+1 // показать следующий кадр
Speed_anim=0 //сбросить счетчик анимации в 0
ENDIF
Speed_anim=Speed_anim+1 //увеличить счетчик анимации
IF i=4 THEN i=0 //см. предыдущий пример
SHOWSCREEN
WEND
END
Действительно, мы теперь можем изменять скорость анимации.
В нашей программе крутится счетчик Speed_anim. Он циклически изменяется от 0 до 10. Этого мы достигаем конструкцией вида Speed_anim=Speed_anim+1.
Когда счетчик достигает значения 10, срабатывает логический оператор IF.
IF Speed_anim=10
если скорость анимации = 10 , тогда увеличиваем номер кадра картинки для отображения следующего спрайта в анимации и обнуляем счетчик Speed_anim, чтобы он опять начал потихоньку приращиваться на 1.
В итоге изменение картинки на экране происходить только когда счетчик Speed_anim достигает значения 10. Если скорость по-прежнему достаточно высока, подставьте в место 10 – 20 или даже 50. Скорость упадет.
Но как не сложно заметить простое изменение одного значения заставляет нас лазить по всему тексту выискивая места кода, подлежащие изменению. Все происходить лишь из-за не совсем продуманного кода.
Подсказка: значения, которые фигурируют во многих местах кода и которые могут потребовать изменение значения желательно выделять в отдельные переменные (константы).
Пример 1.
Вывести в середину экрана спрайт (разрешение экрана 800х600):
SPRITE 1,400,300,0
Такой стиль написания кода не сулит ничего хорошего и требует от вас вычислений. Этого можно избежать, введя в начале программы 2 переменные содержащие максимальное значение экрана:
Max_X = 800
Max_Y = 600
Теперь запись верхнего примера будет выглядеть следующим образом:
SPRITE 1, Max_Х/2, Max_Y/2,0
Продолжение читайте завтра…