Найти на форуме:
Loading




+ Ответить в теме
Показано с 1 по 4 из 4

Тема: CodeCraft – битвы программистов

  1. #1
    Единственное, что нужно для триумфа зла, это чтобы хорошие люди ничего не делали. © Эдмунд Бёрк oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал Аватар для oldengremlin

    Регистрация
    02.10.2008
    Адрес
    Київ
    Сообщений
    10,984
    Сказал(а) спасибо
    5,946
    Поблагодарили 12,493 раз(а) в 4,530 сообщениях
    Записей в дневнике
    14
    Изображения
    10

    По умолчанию CodeCraft – битвы программистов

    CodeCraft принадлежит к жанру Programming game. Многие из вас наверняка знают о проекте HabraWars или о других Programming games. То есть желание написать среду для битв программистов возникало у многих. Вот у меня, например, возникла эта идея.
    Ее отличительные черты:
    • Игровой мир — баталия двух флотов космических кораблей.
    • Необходимость стратегического превосходства над соперником
    • Управление возможно как отдельными юнитами, так и группами
    • 3 типа юнитов
    • Тактический и стратегический вид
    • 2D
    • Игроки — плагины в виде библиотек
    • 2 уровня абстракции для взаимодействия с игрой. О них позже
    • Удобная отладка
    • Максимально упрощен процесс написания игроков
    • Есть документация, мануалы, примеры


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

    Да просто я всегда представлял себе умственный поединок как соревнование стратегий, а не одиночных юнитов. Иначе программируется скорее не стратегия, а поведение, получается больше похоже на шутер.
    Намного красочнее посмотреть за алгоритмом поведения армий: ровные ряды фаланг, которые методично вытесняют врага, стаи юнитов, которые несутся напролом, хитрые маневры быстрыми юнитами, неожиданные удары с тыла, классическая победа над более сильным соперником благодаря окружению и т.д. Во многом игра навеяна рисунками из учебников истории, где отмечены условные графические изображения разных родов войск и их перемещений. На скучнейших парах воображение приводило их в движение, создавая концепцию CodeCraft.






    История



    Идея создания игры пришла мне так: нужно было разнообразить свой день рождения, где обирались тогда исключительно программисты. Так началось создание проекта. Идею поддержал и вскоре присоединился к разработке Mad_Fish. Попервах управление юнитами было чем-то подобно управлению в HabraWars. Игрок мог повернуть юнит, полететь вперед и выстрелить, если заряжен. Отличие было в возможности тарана, который для одиночных баталий почти бессмыслен, да и в управлении ускорениями, а не скоростью. Всем приглашенным на ДР было дано задание: придти со своим игроком. То есть принести его на флэшке. Оказалось, что созданные игроки были ужасно глупы – побеждал тот, кто хотя бы не палил по своим и не таранил их. Потому не стреляющий и не двигающийся игрок иногда вполне уверенно побеждал. После праздника я понял, что избежание таранов, дружественного огня и подобных вещей есть вещи рутинные, не интересные для игры.

    Простота



    На практике стала понятна необходимость крайнего упрощения управлением юнитами. Поэтому сейчас доступна возможность писать только то, что интересно. Я создал стандартные реализации для поведения юнитов и групп юнитов – библиотеку EtalonAI.
    Например, код
    foreach (UnitPilot pilot in friends)
    pilot.AttackClosest();


    * This source code was highlighted with Source Code Highlighter.
    уже является адекватным алгоритмом ведения боя. Так же юниту можно приказать держать позицию, атаковать конкретного врага, лететь в указанные координаты, либо ждать приказов. Юнит имеет список близких к нему юнитов, юнитов, врагов, которые в него целятся. А так же все юниты доступны в списках friends и enemies.
    Для контроля группы юнитов можно создать отряд. В примере создается отряд из десяти истребителей
    DestroyersSquad1 = new SquadronColonel(friends[0], game);
    for (int i=0;i<10;i++)
    DestroyersSquad1.AddUnit(friends[i]);

    Далее, весь отряд можно отправить в заданную точку
    DestroyersSquad1.GoToOrder(new GameVector(-3000, -2000));
    Можно приказать передвигаться «через атаку»
    DestroyersSquad1.AttackOrder(new GameVector(-3000, -2000));

    Можно задать тип строя – линия, прямоугольник, клин или стая(без строя).
    DestroyersSquad1.SetFormationTypeLine(WidthBetweenUnits, AngleForward);
    Создание своей геометрии построения тоже возможно.
    Также есть приказы для атаки ближайшего врага, тарана врагов (кстати, полезное дело — истребителями затаранить вражеский крейсер)

    Так же просто можно исследовать противника – класс EnemyAnalyzing периодически проводит кластеризацию врагов – то есть вы можете легко узнать, на какие отряды соперник разделил флот

    Работа с геометрией так же учтена – класс вектора GameVector содержит методы для поворота, операторы векторной математики перегружены. Есть класс Angle, который позволяет складывать углы, не опасаясь получить тыщу градусов, находить разность, расстояние между углами и т.д. подробнее – см. документацию.

    Конечно, стандартизация до такой степени исключает возможность создания уникального поведения юнита, особо крутого джедайско-чакнорриского истребителя, но ведь игра по идеологии стратегическая. К тому же, как сказано выше, есть два уровня абстракции взаимодействия с игрой: первый – высокоуровневый, где игрок указывает, кого атаковать или место, куда лететь отряду и каким строем; на втором уровне игрок указывает непосредственно линейное ускорение, ускорение поворота юнита и момент выстрела. Так юниты и контролировались до дня рождения. Получается, возможность помаяться и сделать Чака Норриса остается.

    Отладка



    Для отладки предусмотрено несколько способов
    • Вывод текста от имени игрока. У класса игры есть метод SetText(string text). Можно использовать перенос строки \n
    • Вывод текста от имени юнита. У юнита есть поле Text, содержимое которого будет выведено на экран. Также можно использовать перенос строки.
    • Вывод геометрии. У класса игры есть поле GeometryViewer, класс которого имеет методы для рисования прямоугольника, круга, линии и точки. Задается цвет (прозрачность допускается) и сама фигура. Кстати, структуры фигур тоже собственные, имеют методы расчета пересечений.




    Файл настроек позволяет
    • Включить или отключить вывод отладочной информации
    • Запускать программу в полноэкранном или оконном режиме
    • Изменять количество юнитов каждого типа для каждой стороны отдельно (например, так я узнал, что 100 истребителей «стоят» 13-15 корветов)

    Как написать игрока


    Написание «Hello world» и адекватного алгоритма занимает всего пару минут. Игрока можно написать на любом .NET языке.
    Для этого нужно:
    • Подключить библиотеку MiniGameInterfaces.dll и, по желанию, EtalonAI.dll для приятного написания.
    • Наследовать класс AI, в нем перегрузить метод Init и Update.

    Вот и все.Это почти полное руководство

    Подробности



    Игра была написана на С# с использованием XNA, так что, пардон, Windows-only. Писал ведь не рассчитывая кому-нибудь кроме друзей показать, а все-таки C# — это сплошные удобства. Mad Fish сейчас занимается портированием игры для Linux.
    Клавиши управления
    • Page up и page down – увеличение, уменьшение скорости симуляции
    • Home и end – отдаление и приближение камеры.
    • Стрелки – перемещение камеры
    • Пауза – пауза
    • Esc – выход


    Заключение



    Надеюсь развивать проект и далее. Например графику по-человечески сделать и все такое.Mad_Fish в настоящее время портирует CodeCraft на OpenGL, и говорит, что надо от Microsoft не зависеть)
    Но самое интересное — это конечно же загрузить игрока, написанного кем-то из вас; посмотреть на его тактику; придумать как его победить; загрузить своего игрока, побеждающего его и ждать ответа соперника.0
    Скачивать чужих и добавлять своих игроков можно здесь



    Ссылки




    Записи игр в CodeCraft. Учасники — примеры игроков


    Приятной игры


    http://habrahabr.ru/blogs/sport_programming/75998
    Єдина Країна! Единая Страна!
    Бандерівець це така чупакабра: ніхто його не бачив, але всі страшенно бояться.
    http://oldengremlin.blogspot.com/

  2. #2
    Не скачу lucky Святоша lucky Святоша lucky Святоша lucky Святоша lucky Святоша lucky Святоша lucky Святоша lucky Святоша lucky Святоша lucky Святоша lucky Святоша Аватар для lucky

    Регистрация
    20.09.2006
    Сообщений
    5,407
    Сказал(а) спасибо
    5,029
    Поблагодарили 3,729 раз(а) в 1,056 сообщениях

    По умолчанию

    гы я там свою игру нашел...

    http://habrahabr.ru/blogs/sport_programming/74582/

  3. #3
    Единственное, что нужно для триумфа зла, это чтобы хорошие люди ничего не делали. © Эдмунд Бёрк oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал oldengremlin Идеал Аватар для oldengremlin

    Регистрация
    02.10.2008
    Адрес
    Київ
    Сообщений
    10,984
    Сказал(а) спасибо
    5,946
    Поблагодарили 12,493 раз(а) в 4,530 сообщениях
    Записей в дневнике
    14
    Изображения
    10

    По умолчанию

    Цитата Сообщение от lucky Посмотреть сообщение
    гы я там свою игру нашел...

    http://habrahabr.ru/blogs/sport_programming/74582/
    О! Страна должна знать своих героев! :)
    Єдина Країна! Единая Страна!
    Бандерівець це така чупакабра: ніхто його не бачив, але всі страшенно бояться.
    http://oldengremlin.blogspot.com/

  4. #4
    Илита. Мастер Йада Последняя надежда человечества Мастер Йада Последняя надежда человечества Мастер Йада Последняя надежда человечества Мастер Йада Последняя надежда человечества Мастер Йада Последняя надежда человечества Мастер Йада Последняя надежда человечества Мастер Йада Последняя надежда человечества Мастер Йада Последняя надежда человечества Мастер Йада Последняя надежда человечества Мастер Йада Последняя надежда человечества Мастер Йада Последняя надежда человечества Аватар для Мастер Йада

    Регистрация
    19.09.2007
    Адрес
    The Internet. Where men are men, women are men, and underage teens are F.B.I. agents.
    Сообщений
    10,727
    Сказал(а) спасибо
    758
    Поблагодарили 1,325 раз(а) в 662 сообщениях

    По умолчанию

    Цитата Сообщение от oldengremlin Посмотреть сообщение
    О! Страна должна знать своих героев! :)
    а мы его знаем) он скрины редактора когда то показывал, только там ничего не было ясно, а тут уже бибики ездиют, стриляют))
    "I look forward to plucking the sun from your universe and watching the cold of time
    and the void of space, slowly dissolve the existence that was you , soon . .

+ Ответить в теме

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Херсонский ТОП   Рейтинг@Mail.ru МЕТА - Украина. Рейтинг сайтов

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112