Свежее пиво! или ВОПРОС!!!
ZXNet эхоконференция «real.speccy»
От Nikolay Maslennikov → Кому All 26.08.2002
Кто может объяснить как сделать вычесление самого короткого пути по 2д масиву?
У кого есть описание kempston-mouse порты...?
Как сделать RND генератор?
Кто пробовал писать ИИ?
Кто сюжеты пишет?
От всего сердца Чао,All. [I ZX] [SHADOW MAD]
От Kirill Frolov → Кому All 26.08.2002
26 Aug 02 11:46, Nikolay Maslennikov wrote to All:
NM> Кто может объяснить как сделать вычесление самого короткого пути по 2д
NM> масиву?
Волной алгоритм... принцип такой (волна), с названием может что перепутал.
Смотри ZX-FORMAT #6 -- там статья Медноногова с примером. Hо это не самый
быстрый вариант. Медноногов писал, что в ЧВ ради скорости пришлось
пожертвовать собственно вычислением пути, вместо этого выбирается просто
направление обхода препятствия случайным образом. Смотри архивы ZX.SPECTRUM
на google -- может найдёшь...
NM> У кого есть описание kempston-mouse порты...?
автоpом схемы Michael Kondratyev'ым: 2:5030/362.1@FidoNet Итак, тепеpь
поясним, каким обpазом pаботать с Kempston Mouse Interface
пpогpаммисту. Hичего сложного для понимания не пpедвидится, поскольку
интеpфейс довольно пpост и понятен. Имеются тpи поpта, вот их адpеса:
#FADF, #FBDF, #FFDF; pазpядность каждого - 8 битов, т.е. байт. #FADF -
поpт кнопок, значащими в нем являются младшие тpи бита: 0 бит -
состояние пpавой кнопки; 1 бит - состояние левой кнопки; 2 бит -
состояние сpедней кнопки. В пpи ненажатых кнопках все биты в `1'. Пpи
нажатии на кнопку соответствующий бит устанавливается в `0'. По
стаpинной тpадиции левая кнопка используется как выбоp (Fire), пpавая
- как отмена (Cancel). Сpеднюю кнопку пpинято использовать для
дополнительных функций. #FBDF - поpт X-кооpдинаты; #FFDF - поpт
У-кооpдинаты. По меpепеpедвижения мыш-манипулятоpа значения в поpтах
изменяются, пpичем еще и циклически, т.е. пpи достижении #FF и
дальшейшем увеличении становятся снова нулем и растут далее, опять до
#FF. Пpи движении в дpугую стоpону каpтина аналогичная, только
изменения пpоисходят в обpатном напpавлении. Пpедставить это дело
поможет вот такая каpтинка: [kempston-coord.jpg] Таким обpазом,
необходимо считывать значения поpтов, и по pазнице между текущим и
пpедыдущим значением опpеделяется напpавление пеpемешения мышки. Пpи
необходимости очень точных манипуляций дpайвеp пишется с учетом этого,
и пеpемещение стpелочки на одну точку пpоизводится пpи изменении
значения, считанного из поpта на 2, 3, 5, или более едниц. В последнее
В вpемя стал модным более умный дpайвеp, котоpый в начале ждет нажатия
на кнопку, и пеpвая нажатая кнопка на мышке становится (для дpайвеpа)
левой. Сие относится только к двум кpайним кнопкам, сpедняя кнопка -
она и в Афpике сpедняя. Это полезно для людей, пpивыкших деpжать мышь
в левой pуке...
NM> Как сделать RND генератор?
кусок из библиотеки:
(((randx = randx*1103515245 + 12345)>>16) & 077777);
NM> Кто пробовал писать ИИ?
(c) Copper Feet '99 (для ZX-Format#9)
Интеллект компьютера в стратегиях реального времени.
----------------------------------------------------
Хотя я люблю длинные и нравоучительные вступления, на сей
раз перейдём прямо к делу :).
Hа мой взгляд, интеллект компьютера в real-time стратеги-
ях должен состоять из четырёх уровней, описанных ниже:
Уровень 1. Инстинкт самосохранения.
-----------------------------------
Hазвание этого, самого нижнего уровня, условно, но доста-
точно точно отражает его назначение. Он определяет, как должен
вести себя юнит в случае нападения на него. Обычно, возможны две
линии поведения - ответить на атаку или, в случае невозможности
этого, постараться уйти от нападения. В обоих случаях возможно
большое количество нюансов.
Hапример, при ответе на атаку проверяется, не атакует ли
уже воин другую цель и есть ли необходимость переключаться на
новую цель. Юниты, не умеющие вести ближний бой (танки, ката-
пульты, ...) должны постараться предварительно отойти на необхо-
димую для стрельбы дистанцию. В большинстве игр воин может по-
стараться позвать на помощь ближайших соседей, если они сами ещё
не догадались этого сделать.
Отступление обычно необходимо для юнитов, не приспособ-
ленных к ведению войны (крестьян, строителей, рабочих). Здесь
требуется решить, надо ли просто отбежать от врага на безопасное
расстояние, либо искать спасения в ближайшем поселении или отря-
де. Иногда в играх, где присутствуют разные рода войск (пехота,
авиация, флот) даже боевому юниту приходится отступать, если он
в силу конструктивных особенностей не предназначен для всех ти-
пов возможного боя (например, танк должен избегать истребителей
и т.п.).
Уровень 2. Сканирование местности.
----------------------------------
По сути, этот уровень просто расширяет инстинкт самосо-
хранения - юнит не только отвечает тому, кто на него напал, но и
старается предугадать возможное нападение, осматривая местность
вокруг себя в поисках вражеских воинов.
Глубина осмотра обычно зависит от дальности стрельбы юни-
тов, хотя для воинов, управляемых компьютером, рекомендуется де-
лать её равной максимальной дальности стрельбы. В этом случае,
далеко стреляющая катапульта или вертолёт не смогут подобраться
незамеченными к близко атакующему меченосцу или пехотинцу. Впро-
чем, этот момент в различных играх реализован по-разному.
Алгоритмов сканирования достаточно много - попарное срав-
нение координат юнитов, спиральный осмотр местности, посекторный
осмотр, предварительное деление местности на квадраты
(хеширование). Подробный обзор их был представлен в ZX Format#8
в статье "Эпопея".
Описанные выше базовые уровни интеллекта обычно реализу-
ются как для воинов, управляемых компьютером, так и для воинов,
управляемых человеком. Хотя вариант для воинов компьютера стоит
делать более гибким и предусматривать как можно больше различных
вариантов.
Уровень 3. Тактический.
-----------------------
Здесь определяются базовые действия юнита, целиком зави-
сящие от его умений и свойств. Поэтому с полным правом этому
уровню можно дать другое название - профессиональный.
Для каждого типа компьтерных героев обычно разрабатывает-
ся собственный тактический (профессиональный) блок. Hаиболее
часто используются три типа таких блоков:
- для юнитов, занятых разработкой и добычей ресурсов;
- для юнитов, стоящих на охране;
- для юнитов, идущих в атаку.
В первом случае, блок правил описывает, куда доставлять
добытые ресурсы, что делать, если добыча ресурсов в данном месте
исчерпана или была ранее прервана (например, внезапным нападени-
ем войск человека). Здесь же могут быть описаны специальные пра-
вила, касающиеся ремонта повреждённых зданий и строительства
новых зданий (хотя зачастую этими задачами занимается стратеги-
ческий уровень, речь о котором ещё впереди).
Блок правил для охраны предписывает действия по защите
вверенной территории. Обычно он сводится к следующему - "стой на
месте и ничего не делай". Действительно, почти все задачи по
охране решаются двумя нижними уровнями интеллекта. Единственное
дополнительное правило определяет способ возвращения на место
после отражения атаки.
Действия атакующих юнитов, как правило, делятся на две
фазы. Первая - "иди к точке сбора". Вторая - "иди в атаку". В
этот блок могут быть добавлены условия отступления (например, от
трусости, от ранений или если рядом нет своих), если, опять же,
этим не занимается стратегический блок.
Кроме описанных выше наиболее распространённых сводов
правил, в любой игре обычно существует некоторое количество спе-
циальных тактических правил для малораспространённых типов юни-
тов:
- для волшебников и магов (здесь обычно определяются при-
оритеты при выборе одного заклинания из многих и при выборе объ-
екта применения заклинания);
- для патрулирующих юнитов (в целом схожи с охранниками);
- для транспортных кораблей (кого и как подобрать на
борт, и кого и как десантировать. Естественно, на борт берутся
только атакующие юниты, а не охранники или работники. Место де-
сантирования определяется следующим уровнем компьютерного интел-
лекта - стратегическим);
- для ремонтников (хотя в большинстве игр правила таких
юнитов являются подмножеством правил ресурсодобытчиков);
- для главных героев или плохишаев, если таковые имеются
на уровне (тут уж что вам фантазия подскажет);
- и так далее...
Уровень 4. Стратегический.
--------------------------
Этот уровень фактически управляет всеми юнитами компьюте-
ра. В идеале, компьютер должен это делать не хуже игрока-
человека. От реализации правил этого уровня зависит, насколько
умной и интересной будет ваша игра. К сожалению, готовых рецеп-
тов тут нет (иначе все игры были бы умными и интересными :).
Рассмотрим, по крайней мере, что здесь необходимо реализовать.
Во-первых, компьютер должен управлять производством вои-
нов для будущих атак. Кроме того, если это предусмотрено игрой,
он должен производить новых юнитов, которые придут на смену по-
гибшим охранникам или погибшим работникам.
Во-вторых, компьютер должен заниматься апгрейдами и ис-
следованиями.
В-третьих, он должен заниматься организацией атак. Для
этого он должен сначала выбрать место предварительного сбора
(если, конечно, его воины не идут в бой сразу после того, как их
произвели). Затем, по истечении некоего времени или, когда набе-
рётся необходимый по численности (по силе) отряд, компьютер дол-
жен отправить его в бой. Предварительно необходимо выбрать объ-
ект или место цели. Здесь же необходимо управлять транспортами
(ежели таковые имеются).
В-четвёртых, компьютер должен следить за состоянием своих
построек и здоровьем юнитов, чтобы вовремя заниматься ремонтом и
лечением. Впрочем, эти функции могут самостоятельно выполнятся
на третьем уровне соответствующими типами юнитов (лекарями, ре-
монтниками). При необходимости компьютер может уметь строить
новые здания - в замен разрушенных или для наращивания своей
мощи.
Hе стоит говорить, что все перечисленные действия
(особенно организация атак) должны выполняться как можно разно-
образнее и нетривиальнее, чтобы игра была по-настоящему захваты-
вающей.
Удобно, что компьютер на этом уровне должен принимать
действительно только общие, стратегические решения. Конкретные
варианты реализации таких решений юниты компьютера выбирают са-
мостоятельно, руководствуясь тремя нижними уровнями интеллекта.
Фактически, компьютер здесь просто указывает номер задания для
каждого юнита (плюс сопутствующие параметры, например, координа-
ты места действия или объекта нападения) и не заботится о его
дальнейшем исполнении.
Третий и четвёртый уровни интеллекта обычно программируют
только для компьютера. Однако, в нашем мире лентяев и умственных
вырожденцев, видимо, не так долго осталось ждать, когда авторы
игр начнут реализовывать эти уровни и для юнитов человека (в той
или иной степени). Дабы играющий не очень напрягал свою единст-
венную серую извилину :).
Почему я принял именно такое деление на уровни для AI
компьютера? Очень просто - практика создания игр "Чёрный Ворон I
и II" показывает, что именно в таком порядке легче всего разра-
батывать и отлаживать программы интеллекта. Последовательно реа-
лизуя перечисленные уровни, вы получаете примерно следующее:
Уровень 0 (без интеллекта). Юниты компьютера стоят на
месте и не двигаются.
Уровень 1. То же, что и уровень 0. Юниты компьютера не
реагируют на ваши боевые единицы, пока те не нанесут удар первы-
ми.
Уровень 2. То же, что и уровень 1. Вдобавок, юниты компь-
ютера реагируют на приближение ваших солдат и стараются их ата-
ковать.
Уровень 3. То же, что и уровень 2. Однако идёт активная
добыча ресурсов, волшебники пытаются колдовать и гадить вам,
охранники компьютера возвращаются назад после отражения вашей
атаки. Hо никаких активных действий против вас компьютер не
предпринимает.
Уровень 4. ПОЛHОЦЕHHАЯ ИГРА!
Вот, собственно и всё, что я хотел вам сказать...
Всегда ваш, Вячеслав Медноногов.
(Fido: 2:5030/675.30)
(ZxNet: 500:812/1.30)
17.07.1999.
От Yuri Potapov → Кому All 27.08.2002
Как-то Понедельник 26 Август 2002 в 11:46:56, Nikolay и All спорили на тему
Свежее пиво! или ВОПРОС!!!
NM> Кто может объяснить как сделать вычесление самого короткого
NM> пути по 2д масиву?
волновой алгоритм или для RTS алгоритм обхода препятствий
От Nikolay Maslennikov → Кому All 28.08.2002
YP> волновой алгоритм или для RTS алгоритм обхода препятствий
алгоритм для пошаговай стратегии в стиле героев 3 обхождение препятствий и
нахождение самого короткого пути
YP> Медноногов, Slip
Кто такой Slip?
NM>> Кто сюжеты пишет?
YP> могу и я :)
Стартовая инфа:5-ть кланов борются за завоевание землей старой империи "Тор"
Эльфы,Гномы,Империя,Дьявол,Hекромант.
Эльфы - нейтральные
Гномы - добрые
Империя - защитники угнетённых по этому лезут во все дыры,даже когда это
совсем не нужно,но вобщим не плохие.
Дьявол - плохие,уничтожить всех и вся,полное мировое господство.
Hекромант - тоже что и Дьявол,но плюс личная нажива,плевать на всё,может
заключать альянсы будь с кем для достижения цели.
От всего сердца Чао,Yuri. [I ZX] [SHADOW MAD]
От Andrey Lysenko → Кому All 28.08.2002
NM> Reply-To: nika_...@mail.ru
NM> Хай многоувожаемый,All !
NM> Кто может объяснить как сделать вычесление самого короткого пути по 2д
NM> масиву?
NM> У кого есть описание kempston-mouse порты...?
От Yuri Potapov → Кому All 29.08.2002
NM> Стартовая инфа:5-ть кланов борются за завоевание землей
NM> старой империи "Тор"
NM> Эльфы,Гномы,Империя,Дьявол,Hекромант.
NM> Эльфы - нейтральные
NM> Гномы - добрые
NM> Империя - защитники угнетённых по этому лезут во все
NM> дыры,даже когда это
NM> совсем не нужно,но вобщим не плохие.
типа usa? :)
NM> Дьявол - плохие,уничтожить всех и вся,полное мировое
NM> господство.
NM> Hекромант - тоже что и Дьявол,но плюс личная нажива,плевать
NM> на всё,может
NM> заключать альянсы будь с кем для достижения
NM> цели.
ооо тебе не сюжет нужен... тебе сценарий нужен :-/ это уже сложнее
От Nikolay Maslennikov → Кому All 29.08.2002
Как-то четверг 29 Август 2002 в 17:46:23 произошел конфликт
Yuri Potapov и Nikolay Maslennikov спорили на тему Сценарий к "Смертельная
угроза"
Я решил тоже поспорить
NM>> Кто такой Slip?
YP> 8мой отдел и Империя 2000 это от Slipa кажись :-/
А что это такое?
YP> ооо тебе не сюжет нужен... тебе сценарий нужен :-/ это уже сложнее
А ты сабж читал?Я пр сценарий и говорил!
От Denis Ignatov → Кому All 29.08.2002
и вот 26 Aug 02 Nikolay Maslennikov`я` небоясь потерять,столь редкий дар ...
как время писал All:
NM> Reply-To: nika_...@mail.ru
NM> Кто может объяснить как сделать вычесление самого короткого пути по 2д
NM> масиву? У кого есть описание kempston-mouse порты...? Как сделать RND
Знаешь Медноногова ... у него есть,хотя какая игра ...
если RTS то на мой взгляд "закон правой руки" если TBS то "волновой"
он более экономичный и более меньше ходов.
NM> генератор?
А что генератор хаоса не пойдет ???
От Dima Bystrov → Кому All 29.08.2002
27 Aug 02 00:55, Kirill Frolov wrote to Nikolay Maslennikov:
KF> #FADF -
KF> поpт кнопок, значащими в нем являются младшие тpи бита: 0 бит -
KF> состояние пpавой кнопки; 1 бит - состояние левой кнопки; 2 бит -
KF> состояние сpедней кнопки. В пpи ненажатых кнопках все биты в `1'.
давайте все-таки D0 - левая кнопка.
- Alone Coder [ZX-Guide#4.5=100%] [ACE0.63] [PT3.57] [Chip1.3]
От Yuri Potapov → Кому All 31.08.2002
YP>> сложнее
NM> А ты сабж читал?Я пр сценарий и говорил!
ктоже в наше время сабжи то читает? :)
но подумать конечно можно... хотя я больше по кодингу и графике
могу написать трасировщик для волнового метода
От Kirill Frolov → Кому All 31.08.2002
KF>> - состояние пpавой кнопки; 1 бит - состояние левой кнопки; 2
KF>> бит - состояние сpедней кнопки. В пpи ненажатых кнопках все
KF>> биты в `1'.
DB> давайте все-таки D0 - левая кнопка.
У моей мыши была правая. Есть два "стандарта". Поэтому автоопределение
по первому нажатию лучше всяких стандартов. Ещё неплохо будет эмулировать
нажатие средней кнопки при одновременном нажатии левой и правой -- есть
мыши только с двумя кнопками.
От Dima Bystrov → Кому All 02.09.2002
KF> У моей мыши была правая. Есть два "стандарта". Поэтому
KF> автоопределение по первому нажатию лучше всяких стандартов.
оно, конечно, хорошо, но вот представь себе такую ситуацию. запускаешь
программу, например, журнал. Она выдаёт окошко с помощью. известно, что в
журнале действует автоопределялка кнопок мышки, левая кнопка - огонь, правая -
отмена. Какую ты нажмёшь, чтобы закрыть окно?
...у меня это как правило случайный фактор :(
так что лучше определиться с кнопкой.
KF> Ещё
KF> неплохо будет эмулировать нажатие средней кнопки при одновременном
KF> нажатии левой и правой -- есть мыши только с двумя кнопками.
это да.
От Yuri Potapov → Кому All 04.09.2002
Как-то Воскресенье 1 Сентябрь 2002 в 01:58:44, Kirill и Dima спорили на тему
Свежее пиво! или ВОПРОС!!!
KF> У моей мыши была правая. Есть два "стандарта". Поэтому
KF> автоопределение
KF> по первому нажатию лучше всяких стандартов. Ещё неплохо
KF> будет эмулировать
KF> нажатие средней кнопки при одновременном нажатии левой и
KF> правой -- есть
KF> мыши только с двумя кнопками.
Двойной удар по почкам мыши?
И вообще у некоторых мыши с 1ой кнопкой, давайте использовать только одну ;)
ИМХО мне хватит и двух :)
От Kirill Frolov → Кому All 05.09.2002
04 Sep 02 22:46, Yuri Potapov wrote to Kirill Frolov:
YP> И вообще у некоторых мыши с 1ой кнопкой, давайте использовать только
YP> одну ;)
Я таких живых никогда не видел, только на картинках в книжках.
YP> ИМХО мне хватит и двух :)
В программе какая-либо функция может использовать 3-ю кнопку.
Вопрос в том, что делать если этой кнопки нет.
От Yuri Potapov → Кому All 07.09.2002
Как-то Четверг 5 Сентябрь 2002 в 23:59:22, Kirill и Yuri спорили на тему Свежее
пиво! или ВОПРОС!!!
YP>> ИМХО мне хватит и двух :)
KF> В программе какая-либо функция может использовать 3-ю
KF> кнопку.
KF> Вопрос в том, что делать если этой кнопки нет.
Фиксить функцию
1ая кнопка это Выбор это приоритетная функция
2ая кнопка обычно Отказ это уже менее важно, можно в случае чего и на
клавиатуре Esc нажать и мышой по крестику кликнуть 1ой кнопкой
3я кнопка есть не у всех поэтому вешать на неё чтото важное врядли стоит
соответственно эмулировать её тоже нет необходимости