Программирование игр для Windows. Советы профессионала


Случайные передвижения - часть 2


Листинг 13.3. Одинокая муха. (DFLY.C).

// ВКЛЮЧАЕМЫЕ ФАЙЛЫ ////////////////////////////////////////

#include <stdio.h>

#include <graph.h>

#include <math.h>

// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ ////////////////////////////////////////

// Указатель на системную переменную, содержащую

// значение таймера. Содержимое этой 32-битовой ячейки

// обновляется 18.2 раза в секунду

unsigned int far *clock=(unsigned int far *)0x0000046C;

//////////////////////////////////////////

void Timer(int clicks)

{

// эта функция использует значение таймера для формирования

// задержки. Необходимое время задержки задается в "тиках"

// интервалах в 1/18.2 сек. Переменная, содержащая 32-битовое

// текущее значение системного таймера расположена

// по

адресу 0000:046Ch

unsigned int now;

// получить текущее время

now = *clock;

// Ничего не делать до тех пор пока значение таймера не

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

// Примечание: один "тик" соответствует примерно 55 мсек.

while(abs(*clock - now) < clicks){}

} // конец функции Timer

// ОСНОВНАЯ ФУНКЦИЯ /////////////////////////////////////

void main(void)

{

int ex=160,ey=100; // начальная позиция "Мухи"

int curr_xv=1,curr_yv=0, // текущие факторы

// преобразования Координат.

clicks=0;             // время, через которое

// "Муха" прекращает движение

//в произвольном направлении.

_setvideomode(_MRES256COLOR) ;

printf("     The Dumb Fly - Any Key to Quit");

//главный игровой цикл

while(!kbhit())

{

// очищаем точки на экране

_setcolor(0);

_setpixel(ex,ey); // перемещение "Мухи"

// "мозговой штурм"

// закончить ли движение в текущем направлении?

if (++clicks—20)

{

curr_xv = -5 + rand()%10; // от -5 до +5

curr_yv = -5 + rand()%10; // от -5 до +5

clicks=0;

} // конец задания нового направления

// перемещаем "Муху"

ex+=curr_xv;                                           

ey+=curr_yv;

// убеждаемся, что "Муха" находится в пределах экрана

if (ex>319) ex=0; if (ех<0)   ех=319;

if (ey>199) ey=0; if (еу<0)   еу=199;

// конец "мозгового штурма"                     

// рисуем "Муху"

_setcolor(12);

_setpixel(ех,еу);

// небольшая задержка...

Timer(1);                         

} // конец

цикла while

_setvideomode(_DEFAULTMODE);

} // конец функции main

Думаю, после запуска программы вы согласитесь с тем, что мы, наконец получили все необходимое для моделирования летающего «разумного существа». Несколько простых правил, шаблоны и случайные числа помогли нам создать довольно правдоподобную имитацию полета насекомого. Это просто чудесно! Теперь настало время поговорить о конечных автоматах.  




Начало  Назад  Вперед



Книжный магазин