06.02.2004, 15:31 | #1 |
Дмитрий Ерин
|
Игра для программистов
Битва коней
Обсуждение проекта прошу вести в ветке: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 часов. Конечно, он еще не оптимален, но чтобы убедиться в этом, требуется "боевое крещение"! Так что буду рад сразиться на конном поле боя с достойным противником. Жду Ваших откликов и предложений. С уважением, Дмитрий Ерин. |
|
06.02.2004, 15:45 | #2 |
Дмитрий Ерин
|
Собственно проект
Хе! К первому сообщению забыл прикрепить проект, а при редактировании форум этого делать не позволяет
А зря! Мало ли на свете забывчивых людей... |
|
06.02.2004, 16:36 | #3 |
Участник
|
Re: Собственно проект
Цитата:
Изначально опубликовано Ruff
Хе! К первому сообщению забыл прикрепить проект, а при редактировании форум этого делать не позволяет если есть жаление разобраться с этим вопросом, то давай в ветку обсуждени форума. |
|
06.02.2004, 16:46 | #4 |
Модератор
|
забавно, напоминает Terrarium
|
|
09.02.2004, 08:27 | #5 |
Дмитрий Ерин
|
Небольшое исправление
Выкладываю немного исправленный в соответствии с предложением Lihgt класс Knight. Если Вы уже начали писать свои классы, то после импорта этого исправления ничего не испортится, просто Вы получите небольшую дополнительную возможность в функции canMove().
|
|
|
Похожие темы | ||||
Тема | Ответов | |||
Много и хорошо об Excel для программистов | 3 | |||
игра с цветом ячеек | 5 | |||
БИТВА КОНЕЙ - Игра для программистов | 20 | |||
Введение в бухучет для программистов – источники. | 0 |
|