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

Листинг 13.1. Программа Терминатор (TERM.С).

Листинг 11.5. Падение мяча (BALL.C). | Листинг 11.6. Идеальный газ (GAS.C). | Мнимое время, прерывания и многозадачность | Листинг 12.2. Шпионим за часами (SPY.C)._________________ | Листинг 12.3. Автономное управление светом. | Листинг 12.4. Функция ответа (PRES.C). | Листинг 12.5. Перепрограммируем системные часы (OUTATIME.C). | Листинг 12.6. Трехмерное звездное небо (STARS.C). | Листинг 12.7. Киберточка (CYBER.C)._____________________ | ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ |


Читайте также:
  1. I. УЧЕБНАЯ ПРОГРАММА ДИСЦИПЛИНЫ
  2. II Программа сроки и место проведения Форума
  3. V. ПРОГРАММА СОРЕВНОВАНИЙ
  4. VII. Программа проведения работ и ее обоснование
  5. Алгоритм 13.1. Алгоритм Преследования.
  6. Антивирусная программа
  7. Б13.1. Судебная практика

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

#include <stdio.h>

#include <graph.h>

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

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

// значение системного таймера. Это значение изменяется

// с частотой 18.2 раза в секунду

usigned 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 рх=1б0,ру=100, // стартовая позиция игрока

ex=0,ey=0; // стартовая позиция врага

done=0; //флаг окончания работы программы

_setvideomode(_MRES256COLOR);

printf(" Terminator - Q to Quit");

//сновной игровой цикл

whilе(!done)

{

// удалить точки

_setcolor(0);

_setpixel(px,py);

_setpixel(ex,ey);

// передвинуть игрока

if (kbhit())

{

// куда движется игрок?

switch(getch())

{

case 'u': // вверх

{

py-=2;

} break;

case 'n': // вниз

{

py+=2;

} break;

case 'j': // вправо

{

px+=2;

} break;

case 'h': // влево

{

px-=2;

} break;

case 'q':

{

done=1;

}break;

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

} // конец обработки нажатия клавиши

// переместить врага

// начало работы "мозга"

if (рх>ех) ех++;

if (рх<ех) ех--;

if (рy>еу) еу++;

if (рy<еу) еу--;

// конец работы "мозга"

// нарисовать точки

_setcolor(9);

_setpixel(px,py);

_setcolor(12);

_setpixel(ex,ey);

// немного подождать

Timer(2);

} // конец основного игрового цикла while

_setvideoroode(_DEFAULTMODE);

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

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

Уклонение

Пока мы еще не ушли слишком далеко в наших рассуждениях, продолжим нашу Дискуссию разговором о явлении прямо противоположном преследованию — об уклонении. Чтобы сконструировать создание, уклоняющееся от игрока, нам нужно сделать в точности противоположное предыдущим действиям. Алгоритм 13.2 в общих чертах показывает это.


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


<== предыдущая страница | следующая страница ==>
Алгоритм 13.1. Алгоритм Преследования.| Алгоритм 13.2. Алгоритм Уклонения.

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