Здравствуйте уважаемые ботописатели, сегодня я вам расскажу какими ещё способами можно улучшить игру бота.
Сегодня будем программировать на Delphi. И перед тем как что-то начать делать надо внести все изменения из SimpleBot v1.1 (С++) в исходник на Delphi.
Итак, что мы имеем? В начале бот проверяет состояние базы, если оно плохое то выбирает проект ремонта базы. Далее он проверяет условия начального развития базы (когда батарей, рудников и лабораторий совсем мало). Потом проверяет условия усиленного развития базы, и только потом атакующие проекты, и в самом конце если ни одно условие не выполнилось, то случайно выбирает проект.
Что можно изменить в первую очередь? Условия начального развития базы слишком жёсткие : база должна быть не менее 35 единиц и щит должен быть не нулевой. Также слишком жёсткие условия усиленного развития базы. Вот их нам и надо изменить, вот что у меня получилось
if IsProjectAvail(BuildMineProject,aAvailProjects) and
(aGame[aPlayerNumber].Mines<3) and
(aGame[aPlayerNumber].Base>25) then
begin
Result:=BuildMineProject;
exit;
end;
if IsProjectAvail(BuildBatteryProject,aAvailProjects) and
(aGame[aPlayerNumber].Battery<4) and
(aGame[aPlayerNumber].Base>25) then
begin
Result:=BuildBatteryProject;
exit;
end;
if IsProjectAvail(BuildLabProject,aAvailProjects) and
(aGame[aPlayerNumber].Labs<3) and
(aGame[aPlayerNumber].Base>25) then
begin
Result:=BuildLabProject;
exit;
end;
//????????? ???????? ????
if IsProjectAvail(BuildBatteryProject,aAvailProjects) and
(aGame[aPlayerNumber].Battery<7) and
(aGame[aPlayerNumber].Base>40) and
(aGame[aPlayerNumber].Shield>10) then
begin
Result:=BuildBatteryProject;
exit;
end;
if IsProjectAvail(BuildMineProject,aAvailProjects) and
(aGame[aPlayerNumber].Mines<6) and
(aGame[aPlayerNumber].Base>40) and
(aGame[aPlayerNumber].Shield>10) then
begin
Result:=BuildMineProject;
exit;
end;
if IsProjectAvail(BuildLabProject,aAvailProjects) and
(aGame[aPlayerNumber].Labs<5) and
(aGame[aPlayerNumber].Base>40) then
begin
Result:=BuildLabProject;
exit;
end;
Немного хотелось бы сказать про количество лабораторий, их количество увеличивается только до 5, так как строительство больше пяти лабораторий требует дополнительного строительства базы. Вообще проекты спроектированы так что на шпионские проекты надо много электроэллементов, и если у вас мало электроэллементов вы не сможете использовать сильные шпионские проекты. Правильное развитие на лаборатории и использование шпионских проектов может стать решающим фактором в победе вашего бота.
Теперь посмотрим список проектов выбираемых ботом:
Удалим 28 проект и добавим (31) СуперАтака 4. En 26, Me 16, El 10 : ->49 в итоге получаем такой список проектов
const
STRATEGY:array[0..MaxProjectsToPLayer-1] of integer =
(
5, 6, 11, 13, 16, 18, 20, 28, 31, 33, 34, 35, 44, 45, 46
);
Теперь вставим проверку использования 31 проекта перед всеми атакующими проектами, т.е. его наличие будет обрабатываться в первую очередь.
if IsProjectAvail(31,aAvailProjects) then
begin
Result:=31;
exit;
end;
if IsProjectAvail(46,aAvailProjects) then
begin
Result:=46;
exit;
end;
if IsProjectAvail(29,aAvailProjects) then
begin
Result:=29;
exit;
end;
Проверку наличия проектов 45 и 44 оставим без изменения, а вот в конце при случайном выборе проекта изменим число 15 на 8, таким образом случайно будут выбираться только первые 8 проектов из списка доступных проектов, а именно проекты мелких атак и ремонта базы.
repeat
Result:=aAvailProjects^[random(8)];
until Result<>0;
Компилируем и смотрим результаты
Результат выигрыш более 60% игр.