Lost_Ghost | Дата: Пятница, 22 Апреля 2016, 21:39 | Сообщение # 1 |
уже был
Сейчас нет на сайте
| AI War-игра для программистов. Пиши AI для одной из 4-х команд и сражайся с программами других игроков!
Небольшая предыстория: Большинство любителей RTS когда-нибудь обязательно сталкивалось с ситуацией, когда AI разработчиков игры оказывается настолько сильным, что человек просто не в состоянии уследить за всеми его действиями и отреагировать на них. У него просто не хватает рук и глаз, чтобы успеть за компьютером! У меня тоже такое было, но, к счастью, я программист и у меня родилась отличная идея о написанию игры для программистов. Но ответ на вопрос, как её реализовать, пришёл ко мне не сразу. Я долго искал игры подобного рода и нашёл одну- AutoWar. Это был очень перспективный проект, но очень старый(но качество его реализации это компенсирует) и единственный его исходник, который можно было найти был под DOS. Но меня привлекла сама идея, и ,после 2-х месяцев стараний я сделал игру AI War. Кстати, похоже, версия Autowar для windows осталась только у меня...
Описание игры: Игра написана на Pascal, чтобы быть доступной для максимально широкой аудитории. Компилятор- PascalABC.NET(с ним вы и должны работать). Итак, вот что вы увидите, запустив игру: экран поделен на 16 клеток. Камера изначально установлена в верхнем левом углу экрана(координаты камеры в том же углу). Синий квадратик- это база команды 1, цвет означает принадлежность к команде, сверху слева- 1-я, сверху справа- 2-я, снизу справа- 3-я, снизу слева- 4-я. В игре есть всего 2 типа юнитов- сами юниты и здания. Отличие у них лишь в том, что юниты могут двигаться, а здания зарабатывать деньги, и наоборот. Юниты могут строить здания, а здания- юнитов(но не наоборот). Игровое поле 200*200 состоит из клеток. В каждой из клеток 200 очков пространства. 1 юнит занимает 5 очков, здание-10. Здесь будут описаны только те переменные и функции, к которым вы имеете(должны) иметь доступ(R-читать,W-писать). $Variables$ tm: integer; //R эта переменная показывает, какой номер у вашей команды (проще- в каком углу у вас база). Диапазон значений 1..4 mwact,mwhp,mwdef1,mwdam1,mwranges,mwrangef,mwx,mwy,mwparam1,mwparam2: array[1..250] of integer;//R показывает информацию о всех ваших юнитах //Соответственно, тип действия(чё делать),жизни,защита(%),атака,дальность зрения,огня,координаты:х и у,параметры действия: 1-й и 2-й. mwparam1,mwparam2: array[1..250] of integer;//RW То же самое, только RW mbact,mbhp,mbdef1,mbdam1,mbranges,mbrangef,mbx,mb,,mbparam1,mbparam2,mbres: array[1..150] of integer;//R и о зданиях //Соответственно, тип действия(чё делать),жизни,защита(%),атака,дальность зрения,огня,координаты:х и у,параметры действия: 1-й и 2-й,сколько $$$ //зарабатывает за 1 ход. mbparam1,mbparam2: array[1..250] of integer;//RW То же самое, только RW mres: integer;//R ваши миллионы($$$$$$$) warmy: array[1..200] of integer;//R результат выполнения процедуры getunits(описание ниже) barmy: array[1..200] of integer;//R результат выполнения процедуры getunits(описание ниже) mwnum,mbnum: integer;//R space: integer;//R результат выполнения процедуры getfreespace(описание ниже) a: integer;//R номер текущего хода errcode: integer//R КОД ПОСЛЕДНЕЙ ОШИБКИ(крайне полезная вещь) $Procedures & Functions$ procedure ai1;// ИМЕННО СЮДА ВЫ И БУДЕТЕ ПИХАТЬ СВОЙ AI { Всего таких процедур 4(ai1,ai2,ai3,ai4), в зависимости от номера игрока. Каждая из них выполняется по 1 разу за ход перед его реализацией, и перед их выполнением меняются значения всех переменных и массивов с первой буквой названия m и переменная tm. Что вы можете, как это делать, wtf всё это прочитайте ниже. } procedure create(gt,x,y:integer);// Используется для того, чтобы кого-нибудь нанять, или что-нибудь построить { Параметры x и y- место, где вы хотите что-нибудь создать(там обязательно должно что-то быть(для зданий-юнит, для юнитов-здание)) gt-что вы хотите сделать(1-здание;2-юнита) Разумеется, это стоит денег: дом-200, юнит-100. Также в той ячейке должно быть >=10 места для здания и >=5 места для юнита, и не должно быть превышено ограничение по количеству юнитов(250) и зданий(150). } getfreespace(x,y:integer)//Сколько места есть в клетке { Для использования этой функции вам нужно хотя бы видеть клетку, которую передаёте в качестве параметра. Результат выполнения в переменной space//R } function cansee(x,y:integer):boolean; { Возвращает true если клетку видно(для вас). } procedure setaction(gt,n,t,param1,param2: integer);//Задать для юнита/здания действие(выполнится на текущем ходу) { gt- 1=здание, 2=юнит. n- номер юнита(1..250)/здания(1..150) t- 1=атака, 2=движение(только для юнитов), 3=улучшение. param1 -1й параметр. param2 -2й параметр. } Вот пример AI(мой) Что я вставил в программу:
Код var pbol: array[1..30] of boolean; //... procedure ai1; begin if pbol[1]=false then begin create(2,1,1); setaction(2,1,2,1,0); pbol[1]:=true; end; if a>2 then if mwx[1]<200 then if mres>200 then begin setaction(2,1,2,1,0); setaction(1,mbnum,3,2,20); create(1,mwx[1],mwy[1]); end; textout(1,30,'ERRCODE:'+inttostr(errcode)); textout(1,50,'$$$'+mres); sleep(1000); end;
Что я должен выставить на битву:
Код var pbol: array[1..30] of boolean; //... procedure ai1; begin if pbol[1]=false then begin create(2,1,1); setaction(2,1,2,1,0); pbol[1]:=true; end; if a>2 then if mwx[1]<200 then if mres>200 then begin setaction(2,1,2,1,0); setaction(1,mbnum,3,2,20); create(1,mwx[1],mwy[1]); end; end;
Что (я) кто-то другой должен выслать мне(зачем-читайте ниже):
Код //GLOBAL pbol: array[1..30] of boolean //1 team only if pbol[1]=false then begin create(2,1,1); setaction(2,1,2,1,0); pbol[1]:=true; end; if a>2 then if mwx[1]<200 then if mres>200 then begin setaction(2,1,2,1,0); setaction(1,mbnum,3,2,20); create(1,mwx[1],mwy[1]); end;
//1 team only- потому, что мой код только для первой команды. //GLOBAL- глобальные переменные ЗАЧЕМ ВЫСЫЛАТЬ: Во-первых, версия, доступная для скачивания не имеет защиты от читерства, игрок может узнать то, чего знать не должен(или сделать), а я гарантирую защиту. Во-вторых, если вы не хотите, чтобы противник(или 3-е лицо, устраивающее битву) раскрыл все секреты вашего AI. Оф. сайт игры: http://catcut.net/ccL0 (там капча, не пугайтесь) Скачать игру можете оттуда. Проект находится в разработке потому, что мне нужны отзывы и предложения.(и люди в команду).
NOTHING
|
|
| |