AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.02.2004, 15:31   #1  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Игра для программистов
Битва коней

Обсуждение проекта прошу вести в ветке:http://www.axforum.info/forums/showt...7653#post27653
Здесь лежит его описание, будут выкладываться версии, и, возможно, результаты игр (если таковые состоятся).

Предисловие

Предлагаю вашему вниманию игру для программистов под названием "Битва коней". Наверняка в нечто подобное Вы когда-нибудь уже играли на листочке бумаги с одноклассниками в школе или в гордом одиночестве. Но тогда думали Вы сами, а теперь Вам предоставляется возможность "передать свои знания" искусственному интелекту.

Цель игры

Написать наиболее оптимальный алгоритм "хода конем", побеждающий другие аналогичные алгоритмы.

Правила игры

Игровое поле состоит из 400 ячеек (20х20), которые вначале игры являются пустыми. Играют 4 игрока (красный, зеленый, синий и черный), которые располагаются по углам поля. Очередность хода игроков определяется случайным образом (на каждом шаге по-разному).
За один ход игрок может переместиться на любую свободную клетку по правилу шахматного коня. После перемещения "коня", клетка, с которой он шагнул становится "занятой" и закрашивается цветом его "следа" (например, у красного игрока след розовый, у синего - голубой). Клетка, на которую переместился конь, также считается занятой, то есть кони не могут "запрыгивать" друг на друга .
Если возможных вариантов продолжения пути нет, то конь считается "запертым" и на этом игра для него заканчивается. Остальные продолжают ходить до тех пор, пока не будет заперт последний конь. После этого подсчитывается количество шагов, сделанных каждым конем, и набравший наибольшее количество очков побеждает в раунде.
Так как в игре не последнюю роль играет элемент случайности, то для выявления действительно сильнейшего алгоритма можно проводить несколько раундов. В этом случае очки, набранные в разных раундах суммируются.

Программная реализация

Игра написана на Аксапте 3.0 (SP1).
Все необходимые для игры элементы содержатся в проекте KnightsBattle (см. прикрепленный файл). Чтобы начать игру, нужно открыть форму KnightsForm (см. скриншот).
На данной форме Вы увидите игровое поле, кнопки запуска симуляции и очистки результатов, а также сами результаты (очки) и четыре списка выбора "породы" коня. В базовой "конюшне" игры существует всего два алгоритма: Knight и DrunkKnight.

Knight - конь-прародитель. Можно сказать Адам . Ужасно бестолковый и непригодный для реальных скачек. Ходит на первую попавшуюся свободную клетку, тем самым обычно загоняя себя в тупик на ранней стадии игры. Работает по принципу тупого перебора возможных продолжений в строго заданном порядке. По этой причине продолжительность его жизни сильно зависит от расположения его начального угла.

DrunkKnight - пьяный коняга. Отличается от папаши тем, что выбирает свободную клетку случайным образом. Тем самым избавляя себя от зависимости от угла. Характеризуется своей непредсказуемостью и хаотическими прыжками по всему полю.




Как играть?

Чтобы вступить в конную битву, Вам необходимо "вывести" новую породу и добавить свое животное в конюшню.
Для этого Вы должны создать в Аксапте новый класс, унаследованный от класса Knight. Вы можете как угодно расширять возможности класса-наследника (добавлять переменные, методы). Но обязательным условием является необходимость перекрытия метода container step(). Данный метод должен возвращать (в контейнере) координаты ячейки, на которую хочет прыгнуть Ваш конь. Первым элементом должен быть столбец, вторым - строка. Анализировать положение на игровом поле Вы можете, используя следующие переменные:

int Col; - столбец текущего положения коня
int Row; - строка коня
KnightsField field; - объект игрового поля. Используйте метод field.getCell(int _Col, int _Row) для определения содержимого ячейки. Возвращаемые методом значения могут быть четырех типов:
KnightsCell::empty - свободная ячейка;
KnightsCell::knight - конь (свой или чужой);
KnightsCell::trace - след от коня;
KnightsCell::оut - ячейка "за границей" поля (например, getCell(2, -3)).

Есть еще ряд вспомогательных методов и переменных, с которыми можно ознакомиться по исходникам игры. Хотя перечисленного выше должно хватить для вычисления следующего шага.
Примером наследования коня может служить описанный выше класс DrunkKnight.
Вторым шагом Вы должны определить коня в конюшню, то есть добавить в перечисление ( BaseEnum) Stable новый элемент, свойство Label которого должно совпадать с именем созданного Вами класса. Обратите внимание - именно свойство Label а не Name!
Если все сделано правильно, то ваш конь должен будет появиться в выпадающих списках на форме. Выбирайте его, выбирайте противников и жмите "Старт!".

С кем играть?

А вот этот вопрос самый интересный. В игре сражаются алгоритмы, но создают их все же люди. Поэтому предлагаю (и призываю!) обмениваться созданными "конями" на этом форуме, добавлять их в свою конюшню и пытаться переплюнуть "экспортные" породы своими родными. И сделав это выставлять новых и новых рысаков на общее обозрение.
Или же можно сделать по-другому. Не выкладывать файлы в открытый доступ, дабы не бояться, что конкуренты попросту будут воровать ваши ноу-хау при написании собственных алгоритмов. Можно выбрать независимого арбитра (например, из авторитетных участников этого форума) и доверить ему проводить соревнования и публиковать результаты, пересылая ему свои породы по почте.
Вобщем, это требует обсуждения. Главное, чтобы нашлись желающие, а уж придумать форму соревнований - дело техники.

Вызов

Что ж, господа программисты и не только! Не хотите ли "размять мозги"?! Отдохнуть немного от номенклатурных аналитик, двухвалютного склада и т.п.? Времени, думаю, эта игрушка много не отнимет. Я, например, писал свой алгоритм (который пока не выкладываю, ожидая соперников) около 3 часов. Конечно, он еще не оптимален, но чтобы убедиться в этом, требуется "боевое крещение"!
Так что буду рад сразиться на конном поле боя с достойным противником. Жду Ваших откликов и предложений.

С уважением, Дмитрий Ерин.
Вложения
Тип файла: img27654-1 (455.8 Кб, 793 просмотров)
Старый 06.02.2004, 15:45   #2  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Собственно проект
Хе! К первому сообщению забыл прикрепить проект, а при редактировании форум этого делать не позволяет
А зря! Мало ли на свете забывчивых людей...
Вложения
Тип файла: xpo knightsbattle.xpo (62.0 Кб, 541 просмотров)
Старый 06.02.2004, 16:36   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: Собственно проект
Цитата:
Изначально опубликовано Ruff
Хе! К первому сообщению забыл прикрепить проект, а при редактировании форум этого делать не позволяет
а что говорит? на самом деле позволял.
если есть жаление разобраться с этим вопросом, то давай в ветку обсуждени форума.
Старый 06.02.2004, 16:46   #4  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
забавно, напоминает Terrarium
Старый 09.02.2004, 08:27   #5  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Небольшое исправление
Выкладываю немного исправленный в соответствии с предложением Lihgt класс Knight. Если Вы уже начали писать свои классы, то после импорта этого исправления ничего не испортится, просто Вы получите небольшую дополнительную возможность в функции canMove().
Вложения
Тип файла: xpo knight.xpo (2.3 Кб, 567 просмотров)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Много и хорошо об Excel для программистов Gustav DAX: База знаний и проекты 3 16.09.2010 10:54
игра с цветом ячеек amball DAX: Программирование 5 29.10.2007 17:48
БИТВА КОНЕЙ - Игра для программистов Ruff DAX: Прочие вопросы 20 16.02.2004 16:45
Введение в бухучет для программистов – источники. sguryev DAX: Программирование 0 25.12.2001 07:02

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:10.