Rambler's Top100
 
 
  01 декабря 2008 года Компьюлента
CIO
Терралаб
Бизнес-журнал
в поле зрения | обзоры и тесты | своя игра | интерактив
DiNGS – программирование игр в домашних условиях. Часть 6
Автор: Александр Супрунов
Опубликовано 19 февраля 2003 года

Загрузка фона в игре.

LOADBMP "fon.bmp"

Фоном может служить любая картинка. Чтобы она покрывала весь экран размер должен соответствовать 640х480. Что на ней изобразить зависит только от девелопера данной игры.

Команду LOADBMP необходимо поставить до начала цикла While ... Wend

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

Коллизия – столкновение спрайтов. В DiNGS за это отвечает оператор BOXCOLL.

В качестве аргументов BOXCOLL получает значение 1 если между двумя указанными объектами произошло столкновение и 0 – если столкновения не было.

BOXCOLL col, ballX, ballY, 16, 16, bitaX, bitaY, 20, 50

Col = переменная при столкновении объектов получающая значение 1.
ballX – координата Х первого объекта – мяча
ballY - координата Y первого объекта – мяча

16 - размер объекта по Х
16 - размер объекта по Y
То есть мяч имеет размер 16 на 16 пикселей. Это можно узнать, открыв картинку в графическом редакторе (Photoshop, GIMP) и посмотрев «размер изображения».
bitaX - координата Х второго объекта – биты
bitaY - координата Y второго объекта – биты>

20 - размер биты по Х
50 – размер биты по Y

Разместив BOXCOLL в цикле мы обеспечим постоянную проверку на столкновение 2-х объектов – биты и мяча. Но как этим воспользоваться?

Прочитать значение переменной col и в соответствии с ее значением произвести определенные действия – изменить направление полета мяча и тд.

Пример:

IF col=1
 // если произошло столкновение

PRINT "COLLISION YES", 320, 240
  //Вывести надпись: Collision yes
        
ENDIF

Давайте напишем программу, где мяч будет отлетать от стен, а мы его к тому же сможем отбивать битой. Если мы пропустим мяч, то потеряем одну из 3-х жизней. При потере последней жизни игра завершится, выведя известную всем игрокам надпись «GAME OVER». Это уже действительно игра, в которую можно играть и она имеет смысл. Итак, начало:

//Инициализируем переменные

LIVES=3  //жизней 3 
Minus_Lives=0  //обнуляем триггер 

//Загружаем спрайты в память

LOADSPRITE  "ball.bmp", 0 
       // загрузить картинку мяча в ячейку № 0
LOADSPRITE  "bita.bmp", 1 
       // загрузить картинку биты в ячейку № 1


// задаем первоначальное направление полета – влево вверх
UP=1    
LEFT=1

// задаем первоначальные координаты мяча
Ball_X=640/2    //середина экрана
Ball_Y=480/2    //середина экрана

// задаем первоначальные координаты биты

Bita_X=600    // у правого края экрана
Bita_Y=480/2    //середина экрана

//Загрузим фоновую картинку в игру размером 640х480

LOADBMP "fon.bmp"


// НАЧАЛО ИГРЫ
WHILE KEY(1)=0 
         //начало цикла игры – ее сердце

SPRITE 1, Bita_X,Bita_Y,0 
     //  вывести спрайт биты 
SPRITE 0, Ball_Х,Ball_Y,0 
      //  вывести спрайт мяча (шара)

//Проверяем мяч и биту на столкновение

BOXCOLL Сol, Ball_X, Ball_Y, 16, 16, Bita_X, Bita_Y, 20, 50

// Если столкновение произойдет, то переменная Col станет равна 1


//УПРАВЛЕНИЕ БИТОЙ В ИГРЕ

IF KEY(200)=1 THEN Bita_Y=Bita_Y-1
  //если нажата клавиша – уменьшить координату биты по Y
IF KEY(205)=1 THEN Bita_Y=Bita_Y+1 
// увеличить координату биты по Y

//////////////////////////
//Описываем условия, по которым движется мяч
// Если вверх, то уменьшать Y
If UP=1 
Ball_Y=Ball_Y-1
ENDIF

// Если вниз, то увеличивать Y
If UP=0
Ball_Y= Ball_Y+1
ENDIF


// Если влево, то уменьшать Х
If LEFT=1
Ball_X= Ball_X-2
ENDIF

// Если вправо, то увеличивать Х
If LEFT=0
Ball_X= Ball_X+2
ENDIF


// Описываем условие, переключающее триггеры.

IF Ball_X<=0 THEN LEFT=0

IF Ball_X>=640   //если мяч упустили
Minus_Lives=1    // задействуется спец-триггер
ENDIF

IF Ball_Y>=480 THEN UP=1
IF Ball_Y<=0 THEN UP=0

//Действия при срабатывании спец-триггера

IF Minus_Lives=1  // если сработал триггер
LIVES=LIVES-1     // уменьшить количество жизней
PRINT "Live destroy",640/2,480/2
 //Вывести надпись – «Жизнь уничтожена» в середину экрана
PRINT "Press any key for Continue", 640/2, 520
 //Вывести надпись: «Нажми клавишу мыши для продолжения игры»
MOUSEWAIT  // Игра остановится до щелчка мышью
//Щелчок произведен, сбросим мяч в середину экрана
Ball_X=640/2
Ball_Y=480/2
LEFT=1  //пусть начнет двигаться удаляясь от биты
Minus_Lives=0  //обнулим триггер
ENDIF

//Опишем ситуацию когда жизни кончились

IF LIVES<=0 
PRINT "GAME OVER", 320,240 
 // Надпись: «Игра окончена» 
PRINT "YOU LUSER", 320,300
  // Надпись: «Ты проиграл» 

PRINT "PRESS MOUSE"
  // Надпись: «Нажми клавишу мыши» 
MOUSEWAIT
   //ожидание нажатия мыши – требуется для того,
// чтобы  игрок смог прочитать надписи на экране 
GOTO GAME_END
 //Прыгнуть на метку GAME_END для выхода из игры
ENDIF

// Описываем условие, переключающее триггеры при столкновении с битой

if Col=1  //Если есть столкновение
LEFT=1    // разрешить движение влево
Col=0     // переменную Col обнулить
ENDIF     // конец IF

SHOWSCREEN   // Показать все на экране монитора

WEND    // переход в начало цикла к оператору WHILE

metka  GAME_END:

END                                                   

С натяжкой вышеприведенный текст можно назвать игрой. Мне пришлось несколько искусственно решить некоторые проблемы, т.к. я еще не объяснял вам, что такое счетчики. Поэтому я применил оператор MOUSEWAIT. Метки были введены в текст в качестве иллюстрации их использования – как раз та самая золотая середина, когда мы ими не злоупотребляем. Хотя справедливости ради стоит отметить, что на самом деле проще задать выход из игры при потере последней жизни в условии оператора WHILE...WEND.

Может также вызвать недоумение, почему это мы вдруг стали увеличивать координату X сразу на 2: «Ball_X=Ball_X+2», в то время как Ball_Y лишь на единицу. Дело в том, что, меняя число приращения мы можем изменять угол полета мяча. Для любопытных и экспериментаторов упомяну, что если задать изменение этих величин в игре динамически, то мы можем получить очень интересные траектории движений. Впрочем, об этом можно будет прочесть ниже. Помимо простейших траекторий, вы сможете узнать какая замечательная вещь для полетов мяча – синусы. Они используются практически во всех играх и позволяют получать очень красивые эффекты и траектории.

Наконец мы подошли к одной из интереснейших глав в этом обучении – АНИМАЦИИ!!! Настало время заставить ожить мир нашей игры. Добавим анимированные объекты движущиеся по своим траекториям и делающим полет мяча непредсказуемым, т.к. сталкиваясь с ними мяч, изменяет направление полета.

(продолжение следует)

ТАКЖЕ В РАЗДЕЛЕ
 
SQL Server 2008 - это шифрование баз данных, регулятор ресурсов, управление серверами на основе Политик Администрирования, а также готовность управлять большими объемами данных.

TechDays.ru - окунитесь в мир технологий Microsoft
Более 50 технических докладов для ИТ-специалистов и разработчиков. Узнайте самое интересное по каждой технологии за 15 минут. Если интересно - прослушайте дополнительные доклады.

Театр ИТ-кошмаров
Ваша ИТ-инфраструктура не способна выдерживать темп развития бизнеса? Не прячьтесь от реальности. Загляните в Театр ИТ-кошмаров и посмотрите правде в глаза.

САМОЕ ПОПУЛЯРНОЕ
Такие разные спутники
Александр Трухачев, директор российского представительства MIO Technology, завел свой блог на "КТ-Онлайн", чтобы рассказать об особенностях рынка потребительской электроники в России. Но для начала - о GPS и ГЛОНАСС.
Топ 5: Самые жестокие компьютерные игры
Хотите кровушки? Получайте... World of Warcraft: Lich King (правда-правда), - Mortal Kombat (здравствуй детство), - Postal (куда ж мы без Чувака), - Manhunt (режь-убивай), - Thrill Kill (адское месиво).
Тонкости анонимного серфинга в Сети
Сегодня мы будем учиться заметать следы. Правда, не настоящие, а виртуальные, всякий раз оставляемые пользователем при работе в Интернете и с большим удовольствием потребляемые всевозможными онлайновыми сервисами.
Текстовые развлечения
Поработаем в жанре ASCII Art и расскажем, как научиться рисовать при помощи символов, как переводить изображение любого формата в текстовый файл и как взглянуть на интерфейс Windows сквозь призму псевдографики.
/  бумажный номер

Тема номера: Кризис в ИТ Читайте на сайте тему номера "Кризис в ИТ" и другие статьи из журнала "Компьютерра" от 04 ноября 2008 года
  Архив номеров журнала

О проекте | Реклама на сайте | Рассылки сайта | КПК–версия | RSS-трансляция

© ООО «Компьютерра–Онлайн», 1997 — 2008.
При цитировании и использовании любых материалов ссылка на портал «Компьютерра–Онлайн» обязательна (для Интернет–изданий — www.computerra.ru)
Редакция сайта: site@computerra.ru
Техподдержка сайта: websupport@computerra.ru
Редакция журнала: inform@computerra.ru
Отдел рекламы: reklama@computerra.ru
Телефон: (495) 232–22–61, (495) 232–22–63
Работает на «Битрикс: Управление сайтом»
Почта защищена сервером «СПАМОРЕЗ»
Трилан — продвижение сайта,
поисковая оптимизация сайта

Сайт работает на сервере DEPO Computers
Rambler's Top100