Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Секреты разработки игр в Macromedia Flash MX - Макар Дж.

Макар Дж. Секреты разработки игр в Macromedia Flash MX — М.: КУДИЦ-ОБРАЗ , 2004. — 608 c.
ISBN 0-201-77021-0
Скачать (прямая ссылка): sekretirazrabotkiigr2004.djvu
Предыдущая << 1 .. 71 72 73 74 75 76 < 77 > 78 79 80 81 82 83 .. 210 >> Следующая

двинетесь прочь. Это не все, что имеет значение, потому что столкновеш
происходят быстро, но такая ситуация возникает.
• Добавьте диагональное движение.
Код ActionScript противника
Хорошо, сейчас, наконец, наступил момент взглянуть на код ActionScript,
пр мененный в этом AI. Эта функция, baddyAI(), вызывается в каждом кадре.
Oi, проходит в цикле по массиву противников и определяет, настал ли
момент д( коррекции. Если да, то она выполняет коррекцию.
1 function baddyAI() [
2 for ( var i = 0; i<game .baddies. length; ++i) [
3 var ob = game.baddie s [ i ] ;
4 + + о b.t ime;
5 var cell x = Math.ce il(ob.x/g ame.cellWidth)
6 var cell у = Math.ce il(ob.x/g ame.cellWidth)
7 var cell over = game .tiles[ce 11 x] [с e11 у];
8 var cell x temp =
Math.ceil(ob.tempx/g ame.cellW idth);
9 var cell у temp =
Mat h.ceil (ob.tempy/g ame.cellW idth);
10 va r cell over temp =
ga me . tiles[cell x t emp][cell _y_temp];
11 if ( ! ce11 over temp .empty
1 1 ob.time == ob.ma xtime) {
12 ob.time = 0;
13 ob.maxtime = 30+r andom(30) t
14 ob.tempx = ob.x;
15 ob.tempy = ob.y;
16 var tempDir = ob. dir;
17 var xmov = 0;
г ва 9. Искусственный интеллект
231
18 var ymov = 0;
19 var speed = Math.abs(ob.speed);
20 var xsign = (game.char.x-ob . x)/
Math.abs((game.char.x-ob.x));
21 var ysign = (game.char.y-ob.у)/
Math.abs((game.char y-ob.y));
22 if (random(lO) == 0) (
23 var xsign = -l*xsign;
2 4 var ysign = -l*ysign;
25 }
26 if (xsign == ysign II xsign == -ysign) {
27 var ran = random(2);
28 if (ran == 0) {
29 var xsign = 0;
30 } else {
31 var ysign = 0;
32 }
33 }
34 if(xsign!=0){
3 5 var ymov = 0;
36 var xmov = xsign*speed;
37 if (xmov>0) {
38 var dir = "right";
39 } else {
4 0 var dir = "left";
41 }
42 } else if (ysign }= 0) {
43 var xmov = 0;
44 var ymov = ysign*speed;
45 if (ymov>0) (
46 var dir = "down";
4 7 ) else {
4 8 var dir = "up";
49 }
50 }
51 ob.dir = dir;
52 ob.cl ip.gotoAndStop(dir);
53 ob.xmov = xmov;
5 4 ob.ymov = ymov;
55 }
56 }
57 }
232__________________________________________________Часть 2.
Исследование оснс
Это довольно длинная функция, но не надо паники - здесь много
повторяющей" ся информации. По большей части из-за наличия нескольких
операторов if и по< тому, что все, что мы делаем для направления х, мы
также делаем для направлс ния у. Как и во многих файлах, созданных в этой
книге, мы здесь имеем o6beirt с именем game, который хранит информацию об
игре. Есть также массив с именем baddies, хранящийся в game, который
содержит один объект для каждом противника ("baddy") в игре. Эта функция
проходит в цикле через массш baddies и проверяет каждый объект baddy,
определяя, настало ли время для пуска коррекции. Строка 3 устанавливает
временную ссылку с именем ob на tJ кущего противника, которого мы
проверяем в массиве baddies. В слсдующе строке мы увеличиваем на единицу
переменную time в ob. Помните, что одн из условий для определения,
наступило ли время для коррекции, состоит в то" что переменная maxtime
равна time. Мы будем выполнять эту проверку в дал| нейшем ниже (строка
11). В строках 5 и 6 мы определяем, над какой ячейко| находится противник
в данный момент, а в строках 8 и 9 мы определяем, на какой ячейкой
находился бы противник в конце кадра. Ячейка, над которой про тивник
находился бы в конце кадра, задается временной ссылкой с имено
cell_over_temp. В строке 11 мы проверяем два условия, определяющие,
наста;] ли время для коррекции. Во-первых, если переменная cell_over_temp
не nycl (то есть если она содержит объект), то мы выполняем коррекцию.
Во-вторы] если значение переменной time равно значению переменной maxtime
объек< противника, то мы также делаем коррекцию.
Давайте взглянем на коррекцию (начинающуюся в строке 12). Сначала м
устанавливаем time обратно в 0, так чтобы счетчик начал считать снова.
Дал! мы наполовину случайно устанавливаем новое значение maxtime. Нет
ничег особенного в числах, выбираемых для этой рандомизации. Вы можете
измени^ их и получить другие поведения для противников. Если вы
интересуетесь изл нением приоритетов этого AI и хотите в некоторой
степени управлять уровне его сложности* то это одна из строк кода, с
которой вы могли бы поиграт В следующих двух строках мы устанавливаем
положение противника, где был в начале кадра (строки 14 и 15). Затем
сохраняем текущее направление пр^ тивника как tempDir. Это строчное
значение, которое может быть равно "left "right", "ир" или "down". Затем
мы устанавливаем значения векторных ско|>< стей х и у в 0, с тем чтобы мы
могли повторно назначить их (строки 17 и IЯ В строках 20 и 21 мы
определяем знак для направлений х и у, определяя, где п| ходится герой по
отношению к этому противнику. Помните, эти значения мом быть -1, 0 или 1.
(пава 9. Искусственный интеллект
233
В строках 22 - 24 мы вставляем случайный процесс оглупления, упомянутым
ранее в этом разделе. Он заставит скрипт перевернуть направление про-
Предыдущая << 1 .. 71 72 73 74 75 76 < 77 > 78 79 80 81 82 83 .. 210 >> Следующая