форум программистов


Организатор конкурса - Форум программистов programmersforum.ru

20 Май 2010 | Автор: admin

SimpleBot v1.2

8 июня 2010 | Автор:

Здравствуйте уважаемые ботописатели, сегодня я вам расскажу какими ещё способами можно улучшить игру бота.

Сегодня будем программировать на 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% игр.

Скачать Fortress 2 build 2026 beta + SimpleBot v1.2

Комментарии закрыты