Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Листинг 11.5. Падение мяча (BALL.C).

Функция № 14: PostAudioPending | Функция № 18: Адрес флага ожидания и адрес «семафора» DIGPAK | Функция № 21: Установка режима обратной записи DMA | Функция № 25: SetDPMIMode | Функция № 18: PollMidPak | Функция № 23: ReportSequenceNumber | АЛГОРИТМЫ, СТРУКТУРЫ ДАННЫХ И МЕТОДОЛОГИЯ ВИДЕОИГР | Алгоритм 11.1. Контроль столкновений с помощью описанных прямоугольников. | Листинг 11.2. Структура данных игрока. | Листинг 11.3. Функции полета мухи. |


Читайте также:
  1. ITEM 11.5. MODAL VERBS. REVIEW
  2. Взлет и падение
  3. Взлет и падение Византийской цивилизации
  4. Вопрос: Правильно ли я понял, что к изменению внутренней структуры цен нас подталкивает ее несовпадение с мировой структурой?
  5. Выпадение волос, облысение
  6. Глава 2. Нападение грабителей
  7. Глава 5. Падение Вавилона

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

#include <stdio.h>

#include <math.h>

#include <graph.h>

//определения //////////////////////////

#define EARTH_GRAVITY 9.8

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

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

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

// функции ///////////////////////////////

void Timer(int clicks)

{

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

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

unsigned int now;

// получаем текущее время now = *clock;

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

// каждый "тик" имеет длительность примерно в 55мс.

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

} // конец Timer

// ОСНОВНАЯ ПРОГРАММА ////////////////////////////////

void main(void)

{

float ball_x = 160, ball_y = 50, ball_yv = 0, ball_acc = EARTH_GRAVITY;

int done=0, key;

// используем графические функции Си

_setvideomode(_MRES256COLOR);

_settextposition(0,0);

printf("Q to quit, use +,- to change gravity.");

while(!done)

{ // была ли нажата клавиша?

if (kbhit())

{

// какая клавиша была нажата?

switch(getch())

{

case ' -':

{

ball_acc-=.1;

} break;

case '=':

{

ball_acc+=.1;

} break;

case 'q':

{

done=1;

} break;

} // конец оператора switch

// сообщим игроку новое значение ускорения

_settextposition(24,2);

printf("Gravitational Constant = %f",ball_асc);

} // конец оператора if

// стираем изображение мяча

_setcolor(0);

_ellipse(_GBORDER, ball_x,ball_y,ball_x+10,ball_y+10);

// перемещаем мяч

ball_y+=ball_yv;

// увеличиваем ускорение

ball_yv+=(ball_acc*.1);

// проверим, не достиг ли мяч пола

if (ball_y>190)

{

ball_y=50;

ball_yv=0;

} // конец оператора if

// рисуем мяч

_setcolor(l);

_ellipse(_GBORDER, ball_x,ball_y,ball_x+10,ball_y+10);

// немного подождем

Timer(2);

} // конец while

// восстановить начальный видеорежим

_setvideomode(_DEFAULTMODE);

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

Физические модели нужны для того чтобы все происходящее в игре выглядело более реально и, кроме того, для того чтобы представлять себе, как наш объект будет взаимодействовать со статическими объектами.

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


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


Дата добавления: 2015-07-12; просмотров: 110 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Листинг 11.4. Муравейник (ANTS.С).| Листинг 11.6. Идеальный газ (GAS.C).

mybiblioteka.su - 2015-2024 год. (0.007 сек.)