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


Моделирование реального мира - часть 3


В качестве последнего примера рассмотрим упругое столкновение. Программа текст которой приведен в Листинге 11.6, создает группу атомов, сталкивающихся в замкнутом пространстве. Когда атомы сталкиваются со стенкой резервуара, они отскакивают, сохраняя при этом свою кинетическую энергию. Мы могли бы использовать систему физических уравнений, однако нам надо только, чтобы это хорошо выглядело. Если вы посмотрите на столкновение бильярдных шаров с портиком стола, то увидите, что они всегда отскакивают под тем же углом, под которым ударились (то есть их угол падения равен углу отражения), как это показано на рисунке 11.10.


Таким образом, чтобы смоделировать это, мы должны только отразить значение скорости атома и все будет выглядеть «корректно с точки зрения физики». Текст программы приведен в Листинге 11.6.

Листинг 11.6. Идеальный газ (GAS.C).

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

#include <dos.h>

#include <bios.h>

#include <stdio.h>

#inciude <math.h>

#include <conio.h>

#include <graph.h>                             

// ОПРЕДЕЛЕНИЯ /////////////////////////////////////////

#define NUM_ATOMS 300

// СТРУКТУРЫ ///////////////////////////////////////////////

// структура атома

typedef struct ant_typ

{             

int x,y;            // позиция атома

int xv,yv;        // скорость атома

} atom, *atom_ptr;

// ГЛОБАЛЬНЫЕ

ПЕРЕМЕННЫЕ' ///////////////////////////////////

unsigned char far *video_buffer = (char far *)0xA0000000L;

// указатель

на видеобуфер

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

// указатель на внутренний таймер

// наши

атомы

atom atoms[NUM_ATOMS];

// ФУНКЦИИ /////////////////////////////////////////////////

void Timer(int clicks)

{

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

// 32-битовое значение этого таймера находится по адресу 0000:046Ch

unsigned int now;

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

now = *clock;

// Ожидаем до истечения указанного периода времени.


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



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