Форум: "Потрепаться";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
ВнизRoboWarz Найти похожие ветки
← →
cyborg © (2004-06-22 18:12) [0]Сделал войнушку ботов написаных в DLLках.
Работает так:
Вы пишете своего бота (DLL) по шаблону, там в принципе только одно сообщение DLLке приходит, что нужно обработать бота.
В этой процедуре боту нужно давать команды: двигаться, сканировать рядомстоящую клетку, клонировать себя или просто проигнарировать и выйти из процедуры для накопления очков хода и залечивания.
Сделал ещё 4 ячейки памяти каждому боту - 4 Cardinal. Можно их использовать по своему усмотрению, для запоминания чего нибудь.
Память бота пока не тестировал, но должно работать.
Сделал тестовые два бота:
Кролик - только стоит и размножается;
Терминатор - бегает (атакует) и размножается.
Загрузить клиент для показа битвы, обработчик ботов и два тестовых бота можно тут:
Исходники
http://www.cyborghome.ru/download/RoboWarz/RoboWarzSrc.zip
12 кило
Скомпиллированные файлы
http://www.cyborghome.ru/download/RoboWarz/RoboWarzEXE.zip
251 кило
Глюков вроде пока нет, но возможны!
Сейчас напишу подробнее как работает.
← →
cyborg © (2004-06-22 18:31) [1]Бот:
При загрузке DLL-ки бота вызывается процедура
CreateBotProc( MaxPoints, MovePoints, ScanPoints, ClonePoints : Longint;
Var Defence, Attak : Longint;
ProcMove,ProcScan,ProcClone : Pointer;
Var BotName : String[20])
MaxPoints - Максимально возможное распределение очков на защиту, атаку и жизнь
MovePoints - Сколько очков хода тратится на передвижение
ScanPoints - Сколько очков хода тратится на сканирования соседней клетки
ClonePoints - Сколько очков хода тратится на клонирование себя
В Defence и Attak вы должны передать значения защиты и атаки вашего бота.
Кол-во жизни бота считается обработчиком так:
Жизнь = MaxPoints - Defence - Attak;
Например защита=5, нападение=10, тогда жизнь будет равна MaxPoints-5-10
ProcMove,ProcScan,ProcClone передают вам адреса функций команд.
В BotName вы должны поместить имя своего бота.
Впринципе у бота процедура CreateBotProc уже готова и изменять её не нужно.
← →
cyborg © (2004-06-22 18:41) [2]Обработка бота:
Только эту процедуру вам и нужно писать!
ProcessBotProc(Var Bot : Cardinal;
Var Mem1,Mem2,Mem3,Mem4 : Cardinal;
Count : Longint);
Каждый раз, когда нужно обработать бота, обработчик вызывает эту процедуру для каждого вашего бота.
Bot - идентификатор данного бота, для передачи в функции: ProcBotMove, ProcBotScan, ProcBotClone
Mem1,Mem2,Mem3,Mem4 - ячейки памяти, можете читать и писать в них чего хотите, используются только вашим конкретным ботом.
Count - кол-ва оставшегося хода. Смотрите например: если очков хода хватит на клонирование, то клонироваться
if ClonePointsCount<=Count then ProcBotClone(Bot);
что и делает бот - Кролик :)
← →
Piter © (2004-06-22 18:42) [3]Помню где-то был онлайн сайт. Можно было писать скрипт своего робота и сражаться на сайте с другими роботами, написанными другими пользователями...
← →
cyborg © (2004-06-22 18:48) [4]Особенности:
Ходы тратятся даже если не удалось их исполнить!
Например вы отдали команду клонироваться, но все рядомстоящие клетки заняты, тогда кол-во очков хода на клонирование вычетется из имеющихся, но бот не клонируется. В таких случаях функции возвращают результат RetDummy.
Если вдруг вашего бота убило при выполнении задания, то функция вернёт начение RetDie
Если при движении ваш бот натолкнётся на врага, то он его атакует, при этом функция вернёт значение RetAttak или RetDie в зависимости от исхода :).
Если функция возвращает значение RetNotPoints значит на выполнение команды не хватает очков.
Если функция исполнилась нормально, то вернётся значение RetOk
← →
cyborg © (2004-06-22 18:56) [5]Команды всего три:
Сканирование клетки:
Function ProcBotScan(Var Bot : Cardinal; LookTo : TMove) : Cardinal;
Сканирует рядомстоящую клетку в указанном направлении LookTo
Направления такие: Up,Down,Left,Right
Возвращает значения:
ScanNull : Cardinal = 0; //Клетка пуста
ScanFrend : Cardinal = 1; //Клетка занята другом
ScanAlien : Cardinal = 2; //Клетка занята врагом
ScanNotPoints : Cardinal = $FFFFFFFF; //нет очков на обработку команды
Перемещение бота:
Function ProcBotMove(Var Bot : Cardinal; LookTo : TMove) : Cardinal;
Передвигает бота в указанном направлении LookTo
Направления такие: Up,Down,Left,Right
Возвращает Ret-флаги
Function ProcBotClone(Var Bot : Cardinal) : Cardinal;
Клонирует бота в случайной рядомстоящей клетке, если есть свободные.
Возвращает Ret-флаги
Ret-флаги:
RetOk : Cardinal = $0; //команда обработалась нормально
RetDie : Cardinal = $FFFFFFFC; //Бот убит
RetAttak : Cardinal = $FFFFFFFD; //Атаковали куда ходили
//профукал свой ход
//по какой-то причине нельзя выполнить команду, но ход потрачен,
//например пошёл в клетку где свой находился
RetDummy : Cardinal = $FFFFFFFE;
RetNotPoints : Cardinal = $FFFFFFFF; //нет очков на обработку команды
← →
cyborg © (2004-06-22 19:05) [6]Там система битв пока фиговая
Повреждения считаются так:
кол-во повреждения = Атака - Защита
Если получившееся повреждение меньше или равно нулю, то рендомно 50/50 отбирается один чирик у врага.
Также при атака с вероятностью 50/50 можно получить ущерб от противника в 1 чирик :).
← →
pasha_golub © (2004-06-22 19:19) [7]Короче, победит такой бот: двигаться рендомно, стрелять рендомною
← →
cyborg © (2004-06-22 19:27) [8][7] pasha_golub © (22.06.04 19:19)
Сейчас напишу Терминатор 2, умный будет :)
← →
pasha_golub © (2004-06-22 19:47) [9]cyborg © (22.06.04 19:27) [8]
Я где-то слышал, что как ни пиши, все равно набьют :-)
← →
Zeqfreed © (2004-06-22 20:15) [10]http://j-group.narod.ru/zbot.rar
Вот тут выложил своего бота, главной целью при создании было побить терминатора ), вроде удалось...
p.s. надеюсь добавлять в процедуре свои локальные переменнные не запрещено?
← →
cyborg © (2004-06-22 20:19) [11]Сделал Терминатор2, мочит первого :)
http://www.cyborghome.ru/download/RoboWarz/BotTerminator2.zip
← →
cyborg © (2004-06-22 20:20) [12]
> надеюсь добавлять в процедуре свои локальные переменнные
> не запрещено?
Нет, что хочешь то и делай там ;)
Сейчас посмотрю побьёт ли он моего Терминатора 2 :)
← →
Zeqfreed © (2004-06-22 20:21) [13]упс... а исходники ещё нада да?
← →
cyborg © (2004-06-22 20:23) [14]Терминатор 2 завалил твоего :)
Ход: 662
1 - ZBot_a by Zeqfreed (КРС)
Всего клонов : 6577
Живые : 0
Погибло : 6577
Уничтожено : 4203
2 - Terminator2 (cyborg) (ЗЕЛ)
Всего клонов : 6700
Живые : 2497
Погибло : 4203
Уничтожено : 6577
3 - (СИН)
Всего клонов : 0
Живые : 0
Погибло : 0
Уничтожено : 0
4 - (ЖЁЛ)
Всего клонов : 0
Живые : 0
Погибло : 0
Уничтожено : 0
← →
cyborg © (2004-06-22 20:24) [15]
> упс... а исходники ещё нада да?
Не обязательно, но желательно ;)
← →
Zeqfreed © (2004-06-22 20:26) [16]Ну я же сказал, что его задача валить 1-ого терминатора =) и всё...
ладно, от этого бота исходники не буду показывать слишком простые, буду думать дульше )
← →
Zeqfreed © (2004-06-22 20:41) [17]http://j-group.narod.ru/newZBot.rar
Очередной релиз ZBot`а теперь с исходником, смотрите шпиёны... =)
← →
Zeqfreed © (2004-06-22 20:43) [18]Хех, к сожалению оказалось, что он мочит терминотора 2, но очень уступает терминаторру 1 =)) вот так...
← →
cyborg © (2004-06-22 21:01) [19][17] Zeqfreed © (22.06.04 20:41)
Круто но иногда мой побеждает, хотя чаще проигрывает :)
← →
cyborg © (2004-06-22 22:18) [20]Суперкиборг номер один:
http://www.cyborghome.ru/download/RoboWarz/BotSuperCyborg.zip
Мочит всё :), медленно, но верно.
Использует ячейки памяти для экономии ходов.
← →
ProgrammeR_SC (2004-06-22 23:24) [21]Хехе, даже ЭТО?
http://starclicker.narod.ru/ProgSC.rar
Там есть что оптимизировать, так что это только начало :))
← →
Zeqfreed © (2004-06-23 15:10) [22]Моя новейшая разработка, "умный" (добавил хоть какой-то анализ игровой ситуации) бот:
http://j-group.narod.ru/smart_zbot.rar ;)
Ход: 1267
1 - Super cyborg №1 (КРС)
Всего клонов : 1707
Живые : 0
Погибло : 1707
Уничтожено : 1914
2 - ProgrammeR_SC (ЗЕЛ)
Всего клонов : 5627
Живые : 0
Погибло : 5627
Уничтожено : 4448
3 - ZBot_b by Zeqfreed (СИН)
Всего клонов : 3618
Живые : 2478
Погибло : 1140
Уничтожено : 5259
4 - (ЖЁЛ)
Всего клонов : 0
Живые : 0
Погибло : 0
Уничтожено : 0
← →
cyborg © (2004-06-23 16:11) [23]Ну вы монстры
мои терминаторы с киборгами в глубокой Ж. :)
Кстати я забыл константы по умолчанию сказать в обработчике, думаю будет полезно знать.
Максимальное кол-во очков хода бота накапливается до 20, дальше очки переходят в жизни пока не залечится до конца, когда очков хода и жизнь бота максимальны, новые добавляемые очки хода пропадают.
За 1 ход прибавляется 4 очка хода.
Очков распределения характеристик 20. Например вы указали при инициализации защита = 10, атака = 5, то на жизнь останется 5 очков.
Затрачиваемые очки на действия: сканирование 1 очко, движение 3 очка, клонирование 10 очков.
← →
cyborg © (2004-06-23 16:16) [24]И ещё чего-то статистика там хромает, иногда значения уничтожено ботом и погибло у противника не совпадают. Где-то криво считаю чтоли.
← →
Bless © (2004-06-23 16:42) [25]Прикольно :)
Минут 20 назад стравил двух первых терминаторов.
До сих пор дерутся, причем с переменным успехом. Интересно, чем все это закончится.
← →
cyborg © (2004-06-23 17:49) [26]Нашёл глюк со статистикой, исправил. Там оказывается умершие боты залечиваться могли.
Исходники
http://www.cyborghome.ru/download/RoboWarz/RoboWarzSrc.zip
14 кило
Скомпиллированные файлы со всеми вышеприведёнными ботами, и в клиенте сделал цвета кнопочкам и именам ботов, чтобы видно было сразу кто где:
http://www.cyborghome.ru/download/RoboWarz/RoboWarzEXE.zip
284 кило
← →
jack128 © (2004-06-23 18:39) [27]
> Интересно, чем все это закончится.
первый терминатор выиграет ;-)
← →
ProgrammeR_SC (2004-06-23 18:55) [28]ооо, баланс пофиксили %)) сейчас че нибудь мощное забабахаю
← →
ProgrammeR_SC (2004-06-23 19:17) [29]Собсна вот. Мочит все кроме своего оригинала. Размножаеться быстрее кролика раза в 2-3
http://starclicker.narod.ru/ProgSCv2.rar
имха надо че то менять с системой боя. а то сейчас все сводиться к эксперементам с attack&defence. Это слишком банально.
← →
cyborg © (2004-06-23 19:19) [30][29] ProgrammeR_SC (23.06.04 19:17)
Давай свои предложения какие характеристики бота и функции действия ввести?
Как систему боя сделать?
← →
ProgrammeR_SC (2004-06-23 20:09) [31]Для начала можно замутить определитель кол-ва хелсов у близстоящих ботов, и возможность передачи своих союзнику. И сканирование на несколько клеток. По моему этого будет пока достаточно. А там посмотрим...
← →
ProgrammeR_SC (2004-06-23 21:39) [32]Нашел чит. PBot(Bot).Life:=100;
← →
Рыба © (2004-06-23 23:04) [33]Все, кроме ProgSCv2, нервно курят в коридоре.
Рыба-убийца выходит на войну. :)))
http://www.kufa.nm.ru/fish.zip (сначала появится страница, как на народе)
← →
ProgrammeR_SC (2004-06-24 00:56) [34]Долго парился, но вроде получилось. Уничтожает ВСЕХ! включая предшественников. Без читов. %)
http://starclicker.narod.ru/ProgSCv3.rar
← →
Рыба © (2004-06-24 01:14) [35]>ProgrammeR_SC (24.06.04 00:56) [34]
В компании с тремя рыбами-убийцами он сдох на 1800-ом ходу. :))
Хотя один на один он силён, нечего сказать..
← →
cyborg © (2004-06-24 09:15) [36][32] ProgrammeR_SC (23.06.04 21:39)
Не стал морочиться с таблицами, сделал так, надеюсь только на совесть и самоуважение программиста.
;)
← →
(AD)acid (2004-06-24 10:13) [37]Ну и ни чего себе чем народ занимается! Вот и я сегодня этим займусь.
← →
ProgrammeR_SC (2004-06-25 13:40) [38]up
← →
bar (2004-06-25 15:33) [39]Видел подобное на
http://kol.mastak.ru/narod/AutoWars.htm
там ещё можно сообщения между ботами пересылать (у вас кажись такого нет). Теоритически AutoWars медленнее чем RoboWarz, но зато никакого вреда системе не нанести (из dll-ки можно в принципе и диск форматнуть)
Хотя если развить RoboWarz и играть честно, то можно сделать крутую игрушку.
← →
ProgrammeR_SC (2004-06-25 23:17) [40]Знаем, знаем. Мне только там не хватало переменных.
Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.061 c