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

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

SimpleBot v1.1 напишем вместе!

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

В этой статье я покажу как добавив несколько строк кода можно очень сильно изменить игру бота в лучшую сторону.
Итак, приступим! Для разнообразия будем писать на C++.
Что мы сделаем в первую очередь? Изменим набор проектов. Смотрим строку в коде которая содержит список проектов
const int Projects[MaxProjectsToPlayer] = {5, 6, 11, 13, 16, 18, 20, 28, 33, 34, 35, 44, 45, 46, 50};
Что тут можно изменить? В принципе можно тут изменить всё, но заморачиваться мы не будем, просто удалим проект номер 50 и вставим (29) СуперАтака 2. En 16, Me 14, El 6 : Base-20, Shield-15. В итоге получаем такой список проектов
const int Projects[MaxProjectsToPlayer] = {5, 6, 11, 13, 16, 18, 20, 28, 29, 33, 34, 35, 44, 45, 46};

Теперь смотрим функцию хода бота.


    if (!aAvailProjects) return 0;
    int OPP = GetOtherPlayer(aPlayerNumber);

    if ((IsProjectAvail(20,aAvailProjects)) and
       (aGame[aPlayerNumber].Base<25))
    return 20;

    if ((IsProjectAvail(18,aAvailProjects)) and
       (aGame[aPlayerNumber].Base<20))
    return 18;

    if ((IsProjectAvail(16,aAvailProjects)) and
       (aGame[aPlayerNumber].Shield<5))
    return 16;

Первые две строки это проверка на уведомление о пропуске хода и получение индекса противника. Потом идёт проверка доступности проектов 20, 18, 16


(16) Ремонт 2. En 9, El 2 : SS+10
(18) Ремонт 4. Me 7, El 2 : SB+9
(20) Ремонт 6. Me 8, El 5 : SB+12

т.е. у бота приоритет : сначала проверить состояние базы, если состояние плохое выбираем ремонтный проект. изменять здесь ничего не будем.
Смотрим далее. Далее идут при проверки и использование проектов увеличения количества батарей, рудников и лабораторий


    if (IsProjectAvail(34,aAvailProjects) and
       (aGame[aPlayerNumber].Mines<3) and
       (aGame[aPlayerNumber].Base>35) and
       (aGame[aPlayerNumber].Shield>2))
    return 34;

    if (IsProjectAvail(33,aAvailProjects) and
       (aGame[aPlayerNumber].Battery<4) and
       (aGame[aPlayerNumber].Base>35) and
       (aGame[aPlayerNumber].Shield>2))
    return 33;

    if (IsProjectAvail(35,aAvailProjects) and
       (aGame[aPlayerNumber].Labs<3) and
       (aGame[aPlayerNumber].Base>35) and
       (aGame[aPlayerNumber].Shield>2))
    return 35;

т.е. если состояние базы нормальное то можно увеличить количество батарей, рудников и лабораторий. Но как видно что количество батарей, рудников и лабораторий будет не больше 4,3,3 соответственно. Эти строчки мы менять не будем, добавим дополнительные строчки отвечающие за усиленное развитие базы


    if (IsProjectAvail(34,aAvailProjects) and
       (aGame[aPlayerNumber].Mines<6) and
       (aGame[aPlayerNumber].Base>45) and
       (aGame[aPlayerNumber].Shield>10))
    return 34;

    if (IsProjectAvail(33,aAvailProjects) and
       (aGame[aPlayerNumber].Battery<7) and
       (aGame[aPlayerNumber].Base>45) and
       (aGame[aPlayerNumber].Shield>10))
    return 33;

    if (IsProjectAvail(35,aAvailProjects) and
       (aGame[aPlayerNumber].Labs<5) and
       (aGame[aPlayerNumber].Base>45) and
       (aGame[aPlayerNumber].Shield>5))
    return 35;

Теперь количество батарей, рудников и лабораторий будет увеличиваться до 7,6,5 соответственно. Развитие базы будет осуществляться только в том случае если состояние базы очень хорошее.

В набор проектов мы добавили проект номер 29, вопрос куда вставить его обработку чтобы не ухудшить игру бота. После проверок на развитие базы есть такие строки

 
    if (IsProjectAvail(46,aAvailProjects)) return 46;
    if (IsProjectAvail(28,aAvailProjects)) return 28;

в первую очередь обрабатывается наличие проекта номер 46 а потом 28. Вставим проверку проекта номер 29 между ними.

 
    if (IsProjectAvail(46,aAvailProjects)) return 46;
    if (IsProjectAvail(29,aAvailProjects)) return 29;
    if (IsProjectAvail(28,aAvailProjects)) return 28;

Компилируем бота, запускаем игру, ставим 500 игр и смотрим результат
Результат игры
Результат очевиден, выигрыш в 84% игр

Скачать исходники SimpleBot v1.1. (C++)

Скачать Fortress 2 build 2026 + FortUI build 1004

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