Предложение по конкурсу на тему Калах, (отделено от темы Игра Калах) |
Этот раздел предназначен исключительно для проведения конкурсов. Создание новых тем пользователями тут запрещено. Ответы в разрешенные темы только по теме соответствующего конкурса и в согласии с его правилами.
Предложение по конкурсу на тему Калах, (отделено от темы Игра Калах) |
andriano |
11.12.2009 13:17
Сообщение
#1
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Кстати, Калах - хороший пример игры для конкурса. В отличие от предлагавшегося Морского боя.
При этом "игрока" можно было бы реализовать как dll, имеющую стандартный интерфейс: инициализация, финализация (нужны, если алгоритм требует чтения с диска какой-либо базы) и ход. Последний можно реализовать как функцию, принимающую два массива - лунки игрока и соперника и возвращающую номер лунки-хода. Тогда такие dll можно использовать как для игры против человека, так и друг с другом. |
andriano |
15.12.2009 19:38
Сообщение
#2
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
andriano, я почти ничего не понял... Обидно.Все-таки рискну редложить на обсуждение некоторое описание программы, которую можно использовать для проведения конкурса и простейший пример программы-конкурсанта. Цитата Игра Калах Программная реализация. Предназначена для проведения турниров программистов. Состоит из основного управляющего модуля (дальше - Доска) и двух динамически присоединяемых библиотек DLL (дальше такая DLL будет именоваться Игрок). Игроки имеют предопределенные имена KlPayer1.dll и KlPayer2.dll. Эти файлы должны располагаться в одной папке с Доской. В игре предусмотрено возможное изменение интерфейса между Доской и Ироками. Для этого вводится номер версии интерфейса. Игроки должны поддерживать все версии с 1 до их текущей. Игра происходит с интерфейсом самой старшей версии, которую поддерживают оба Игрока и Доска. Т.е, если версии игроков 2 и 4, а доски 3, то игра будет происходить по интерфейсу версии 2. Описание интерфпейса версии 1. Игрок содержит следующие процедуцры и функции: function KlInit(var KlInfo : tKlInfo) : boolean; - инициализация. Для версий 2 и выше допускается повторный вызов этой функции. структура tKlInfo = record size : longint; // (i) длина структуры в байтах ver_B : longint; // (i) версия интерфейса Доски ver_P : longint; // (o) версия интерфейса Игрока. Обязательна к заполнению, должна быть не больше, чем версия Доски. Num_P : longint; // (i) номер игрока - 1 или 2. В принципе, нужно лишь для информации, внутреннего протоколирования игрока и алгоритмов, основанных на протоколировании игры. Nholes : longint; // (i) количество лунок у каждого из игроков Nbones : longint; // (i) первоначальное колитчество камней в каждой лунке name : array[0..31]of char; // (o) имя Игрока (C-строка, заканчивающаяся нулем) creator : array[0..31]of char; // (o) разработчик (C-строка, заканчивающаяся нулем) description : array[0..255]of char; // (o) описание (C-строка, заканчивающаяся нулем) end; Игрок долже считать пол size и в дальнейшем заполнять только те поля, что не выходят за предел size. Заполение поля ver_P обязательно, при этом если версия Игрока старше версии, переданной в параметре ver_B, должно возвращаться значение ver_B. Если произошла ошибка инициализации и игра невозможно, функциия должна вернуть FALSE, а при успешном завершении TRUE. Инициализация датчика псевдослучайных чисел randomize происходит в dll независимо от основной прогшраммы, поэтому при необходисмости его нужно инициализировать. в игре используется масив лунок, причем лунки нумеруются с 1 до 6 в направлении хода, т.е. 1-го Игрока слева направо, а 2-го справа налево. tHoles : array[1..6] of longint; function KlGetTurn(MyHoles, OppHoles : tHoles; MyKalah, OppKalah, OppTurn : longint) : longint; - очередной ход. все параметры: свои лунки, лунки противника, свой Калах, калах противника, предыдущий ход противника - входные. выход - номер лунки, с которой начинается очередной ход, от 1 до Nholes. Если произошла ошибка, то 0. OppTurn - предыдущий ход противника от 1 до Nholes. Если это повторный ход, то 0. Может пригодиться, если стратегия игры основана на протоколировании. procedure OppTurnRepeat(OppTurn : longint); - в случае повторного хода противника информирует о нем, т.е. если противник делает 3 хода подряд, между KlGetTurn будет дважды вызвана OppTurnRepeat. При одиночном ходе противника не вызывается. procedure KlEndRound(MyBones, OppBones, NumTurns : longint); - вызывается при завершении текущего раунда. Информирует игрока о количестве камней у него и у противника на момент окончания игры, также о количестве ходов. Если последним был ход текущего игрока, то последний ход противника - 0. procedure KlDone; - вызывается при завершении программы для аккуратного освобождения памяти и, если нужно, сохранении статистики на диск. И простейший вариант "Игрока". Даже слишком "простейший" - делающий случайные ходы. library KlPlRnd; // игрок в калах со случайным выбором хода Сообщение отредактировано: Lapp - 17.12.2009 4:00 |
cameron |
20.12.2009 23:40
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Женский Реальное имя: Ольга Репутация: 0 |
andriano, то есть протестировать твою прогамму-конкурсанта мы можем, только самостоятельно написав модуль KlComm и библиотеку KlPlRnd...
|
andriano |
21.12.2009 11:06
Сообщение
#4
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
andriano, то есть протестировать твою прогамму-конкурсанта мы можем, только самостоятельно написав модуль KlComm и библиотеку KlPlRnd... Это, конечно, тоже вариант , но я подразумевал несколько иной. В данной теме содержится лишь предложение о создании подобного конкурса и в неявном виде вопрос - а интересно ли это будет хоть кому-то. Описание и текст DLL-ки приведены лишь затем, чтобы можно было понять, о чем идет речь. Коль скоро это вызвало интерес хоть у кого-то, все необходимые материалы будут выложены в разделе "Конкурсы" в теме !"Предложения...". Собственно, все готово, мне осталось лишь проверить компилируемость в Delphi и работоспособность полученной DLL. Единственное, есть предположение, что сейчас далеко не лучший момент для объявления конкурса в связи с начавшейся у студентов зачетной сессией. |
volvo |
21.12.2009 11:21
Сообщение
#5
|
Гость |
Цитата При этом "игрока" можно было бы реализовать как dll, имеющую стандартный интерфейс: инициализация, финализация (нужны, если алгоритм требует чтения с диска какой-либо базы) и ход. Последний можно реализовать как функцию, принимающую два массива - лунки игрока и соперника и возвращающую номер лунки-хода. А также для форматирования жесткого диска (ну, или других подобных шалостей) тому, кто рискнет положить DLL-ку себе на диск и вызывать оттуда функции. То есть, организатору конкурса... Это так, на всякий случай, чтоб потом не было претензий...Тогда такие dll можно использовать как для игры против человека, так и друг с другом. |
Lapp |
21.12.2009 13:00
Сообщение
#6
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Я выделил разговор на тему о предложении использовать Калах для конкурсного задания в отдельную тему.
Кроме этого, andriano инициировал переписку со мной в личке на эту тему. Возможно, она также представляет интерес. Если Сергей не против и кто-то проявит желание ее увидеть - я могу выложить ее тут. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
andriano |
23.12.2009 13:08
Сообщение
#7
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Kalah_Test.zip ( 83.54 килобайт )
Кол-во скачиваний: 772
Предлагаю конкурс несколько необычного формата (возможно, кто-то даже сочтет, что предлагаемое не имеет права называться конкурсом). Итак: - никаких ограничений по срокам, - никаких ограничений на используемый язык программирования, - никаких ограничений на количество файлов проекта, - никаких ограницений на содержимое файлови и набор используемых функций, - отсутствие исчерпывающего набора допустимых компиляторов, - независимость от организаторов конкурса, - возможность отладки и настройки алгоритмов в "настоящем" окружении, а не в собственной реализации, которую нужно писать самому, и которая может отличаться от той, что используют органмизаторы, Ограничения: - только Windows, - используемый компилятор должен уметь делать Windows DLL, - все конкурсные соревнования проводятся на пользовательском компьютере, - при публикации конкурсной программы в виде DLL ОБЯЗАТЕЛЬНО размещение исходников (п.9 Правил форума), а также указание используемого компилятора, его версии и настроек. Если программа использует внешние файлы, необходимо описание структуры этих файлов. Основные положения. Предмет: разработка алгоритмов для игры в Калах. Способ: алгоритм оформляется в виде Windows DLL, после чего управляющая программа подключает две DLL и проводит между ними соревнование, помещая отчет в файл. Правила проведения. Организатор размещает: - исполняемый файл: kalah.exe - консольное приложение (TMT Pascal 4.01, Windows Console, настройки по умолчанию), исходники прилагаются. - пример игрока, делающего случайные ходы, файл KlPlRnd.dll, (TMT Pascal 4.01, Windows DLL, настройки по умолчанию), исходники прилагаются. - то же самое, файл Kalah_D.dll, (Turbo Delphi, Windows DLL, настройки по умолчанию), исходники прилагаются. - исходники дополнительных модулей, необходимых для компиляции управляющей программы и DLL. - пример командного файла для проведения конкурса run.bat - поочередно запускает два раунда соревнований, меняя игроков местами (первого со вторым). - описание требований, предъявляемых к DLL, файл readme.txt. Организатор осуществляет поддержку управляющей программы, исправляя в ней найденные пользователями ошибки, и выполняя некоторые из пожеланий пользователей. Организатор НЕ запускает DLL пользователей на своем компьютере - все тестирования проводит конкурсант. Организатор обещает, что он не включил в состав программы вредоносного кода, но не гарантирует отсутствие каких-либо проблем у пользователя вследствие ошибок в программе либо заражения ее вирусами после публикации (организатор рекомендует проверять на наличие вирусов все скачиваемые из И-нета программы). Конкурсант проводит разработку алгоритма, его отладку, тестирование и проведение своей локальной части конкурса на своем компьютере, после чего размещает отчет о результатах тестов вместе с DLL и исходником на форуме. Управляющая программа позволяет проводить разработку, отладку и тестирование алгоритмов пользователя, в частности протоколирование работы как управляющей программы, так и алгоритмов пользователей с различной степенью подробности, проведение многократных игр для набора статистики, настройки управляющих коэффициентов, обучения НС и т.п. Ключи командной строки: /h:N (N - десятичное число, default = 6) - количество лунок в игре (3-6), /b:N (N - десятичное число, default = 6) - начальное количество камней в каждой лунке (3-6), /r:N (N - десятичное число, default = 1) - количество раундов (для подсчета статистики), /t:N (N - десятичное число, default = 300) - количество ходов, после которого фиксируется ничья (во избежание зацикливания), /f:xxxxxx.txt (строка без пробелов, default = 'KlLog.txt') - файл протокола, /l:NM, где N и M - цифры: N=0 для "Доски", N=1 или N=2 для "Игрока", default = 3 - уровень подробности лог-файла. M - от 0 до 5: (0 - лог-файл не создается, 1 - только интегральная по игре (KlDone), 2 - только интегральная по раунду (KlEndRound), 3 - краткая на каждом ходе, 4 - средняя на каждом ходе, 5 - самая подробная) /p:N=M (N - 1 или 2 (номер игрока), M - десятичное или 16-чное число) - настроечные параметры, передаются "Игрокам" в 10-чном /p:1=12345 или 16-чном /p:2:$12ab или /p=1:12abh виде Для участия в конкурсе достаточно: 1. Открыть один из приведенных примеров (если используется Паскаль). 2. Заменить строки, содержащие название алгоритма, имя автора и описание. 3. Заменить несколько строк в функции KlGetTurn на собственный алгоритм. 4. Сохранить под новым самостоятельно придуманным именем. 5. Откомпилировать файл, получив DLL. 6. Скопировать файл в KlPlayer1.dll или KlPlayer2.dll по своему выбору либо видоизменить командный файл run.bat под свое имя библиотеки. 7. Запустить kalah.exe или run.bat, получив протокол работы программы (точнее, три протокола: управляющей программы и по одному от игроков). 8. Разместить на форуме результат работы программы (необходимо два варианта счета: при игре 1-м и 2-м игроком) вместе с указанием, против кого она играла, исходник, саму DLL, указание компилятора и настроек. |
Lapp |
28.12.2009 0:32
Сообщение
#8
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
8. Разместить на форуме результат работы программы (необходимо два варианта счета: при игре 1-м и 2-м игроком) вместе с указанием, против кого она играла, исходник, саму DLL, указание компилятора и настроек. andriano, ситуация, когда каждый участник имеет доступ к сорсам соперников, не может рассматриваться как честная. Ты можешь говорить о добросовестности сколько угодно - напрасно. Размещать же только DLL без сорса - непозволительно (аксиома). И даже если dll размещается с сорсом, все равно должна осуществляться проверка соответствия, и эта проверка должна делаться не пользователем (участником). Значит, должно быть выделенное ответственное лицо, и мы приходим опять к стандартной процедуре. А тогда, прости, зачем все эти ухищрения?.. Кроме того, результат должен кодироваться с асимметричным ключом, чтобы ему можно было доверять. А это значит, в частности, что все dll-участницы должны иметь свою цифровую подпись.. продолжать? Я понимаю, что эти вопросы не могли ускользнуть от твоего внимания при разработке предложения. Тем самым,я прихожу к выводу, что ты заложился таки на добросовестность участников и, вероятно, приготовился спорить на эту тему. Так вот, я говорю, что я с тобой в корне не согласен и вряд ли соглашусь. И вот тогда становится понятным, что ты имел в виду под фразой Цитата возможно, кто-то даже сочтет, что предлагаемое не имеет права называться конкурсом И вот с этой-то твоей фразой (а точнее - с ее второй половиной) я как раз согласен в полной мере )).-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
28.12.2009 2:21
Сообщение
#9
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
я подредактировал свой предыдущий пост, а теперь просто обновляю время.
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
andriano |
28.12.2009 11:36
Сообщение
#10
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
andriano, ситуация, когда каждый участник имеет доступ к сорсам соперников, не может рассматриваться как честная. Цитата Ты можешь говорить о добросовестности сколько угодно - напрасно. Размещать же только DLL без сорса - непозволительно (аксиома). В данном случае согласен.Цитата И даже если dll размещается с сорсом, все равно должна осуществляться проверка соответствия, и эта проверка должна делаться не пользователем (участником). Значит, должно быть выделенное ответственное лицо, и мы приходим опять к стандартной процедуре. Если результат конкурса - приобретение участниками (победителями) каких-либо материальных либо нематериальных благ, то - безусловно. Если же не предполагается не только раздача призов, но даже подведение итогов (кстати, именно поэтому я оговорился насчет возможности отнесения данного мероприятия к конкурсам), то какой в этом смысл?Цитата А тогда, прости, зачем все эти ухищрения?.. Честно говоря, я рассматриваю предложенное не как ухищрения, а как упрощение.Цитата Кроме того, результат должен кодироваться с асимметричным ключом, чтобы ему можно было доверять. А это значит, в частности, что все dll-участницы должны иметь свою цифровую подпись.. продолжать? Нет, продолжать не нужно. Цитата Я понимаю, что эти вопросы не могли ускользнуть от твоего внимания при разработке предложения. Тем самым,я прихожу к выводу, что ты заложился таки на добросовестность участников и, вероятно, приготовился спорить на эту тему. Так вот, я говорю, что я с тобой в корне не согласен и вряд ли соглашусь. Ты ведь выложил исходники программы, играющей в калах, при том, что ее вряд ли можно использовать без накопленных баз. В конце концов интересна сама идея. Цитата И вот тогда становится понятным, что ты имел в виду под фразой И вот с этой-то твоей фразой (а точнее - с ее второй половиной) я как раз согласен в полной мере )). Ну, тогда можешь перенести эту тему из "Конкурсов" в "Игры". |
Lapp |
29.12.2009 2:40
Сообщение
#11
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Согласись, что она симметричная. Так откуда берется бесчестность? Хороший вопрос . Думаю, она берется из окружающей социологической обстанвки и не имеет никакого отношения к таким фундаментальным понятиям, как симметрия )).Вася выложил свою конкурсную работу. Петя скачал ее, раскурочил и использовал полученную информацию с целью выигрыша в конкурсе. Согласен, что Вася после этого также будет иметь шанс сделать то же самое, но ему могут помешать принципы.. Цитата Если результат конкурса - приобретение участниками (победителями) каких-либо материальных либо нематериальных благ, то - безусловно. Если же не предполагается не только раздача призов, но даже подведение итогов (кстати, именно поэтому я оговорился насчет возможности отнесения данного мероприятия к конкурсам), то какой в этом смысл? Смысл - в почете и уважении. А может - в потирании рук под столом. Какой смысл в писании вирусов? Я не знаю. Я знаю только, что возможность, если она есть, будет использована рано или поздно. Да, ничего СТРАШНОГО не произойдет, но неприятное ощущение будет. А главное - сама по себе эта самая возможность внесет коррективы в виде чьего-то аргумента не участвовать. Ну, и последнее: призы, хотя бы в виде тех же открыток с афтографом - совсем не такая уж и лишняя вещь.Цитата Честно говоря, я рассматриваю предложенное не как ухищрения, а как упрощение. Упрощений я не усмотрел. Если хочешь, проведи опрос.Цитата Кроме того, каждый результат должен быть размещен на двух носителях, основанных на разных физических принципах (например, магнитный и оптический), и в запаянных контейнерах сдан на хранение в швейцарский банк. Цитата Если честно, я буду считать свою затею удавшейся даже в том случае, если кто-то попытается что-то сделать исключительно у себя и решит не выкладывать результаты на всеобщее обозрение. Кстати, для этого я еще выложу 1-2 варианта реально играющих DLL. Заслуживает уважения.Цитата Ты ведь выложил исходники программы, играющей в калах, при том, что ее вряд ли можно использовать без накопленных баз. Это ты зря. Накопление осуществляется той же программой, так что она self consistent. И там объектом внимания является сам механизм обучения. Цитата В конце концов интересна сама идея.Ну, тогда можешь перенести эту тему из "Конкурсов" в "Игры". Все, сказанное мной - всего лишь мнение. Проверить есть только один способ .Предлагаю создать тему типа "Постоянно действующий конкурс Калах", а andriano назначить ответственным (с месячным жалованием в 0.084 спасибо и 31 плевок в душу, а также единовременной выплатой +1 в репу лично от меня в качестве подъемных)). Свистни мне, когда ты будешь готов окончательно. Я думаю, что не нужно упускать любую возможность активизировать жизнь на Форуме. Если я что-то не учитываю - продолжай обсуждение здесь или пиши мне в личку. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Rian |
31.05.2010 8:06
Сообщение
#12
|
Знаток Группа: Пользователи Сообщений: 394 Пол: Мужской Репутация: 9 |
а почему бы не завести мини сервер, через кторый проги смогут биться между собой?
я думаю веберы тут тож найдутся а команды для простоты можно даже через get отсылать, в текстовом режиме -------------------- Objective-C, Unity3d
|
Lapp |
3.06.2010 23:29
Сообщение
#13
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
а почему бы не завести мини сервер, через кторый проги смогут биться между собой? Rian, все в твоих руках. Делай. Нужна помощь - пиши тут.я думаю веберы тут тож найдутся -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Rian |
10.06.2010 10:07
Сообщение
#14
|
Знаток Группа: Пользователи Сообщений: 394 Пол: Мужской Репутация: 9 |
хорошо, после 15-го освобожусь и постараюсь занятся основательно и написать несколько скриптиков.
На этой странице так сказать общие правила: http://rian.ho.ua/?page_id=33 там и будут биться проги пока, так сказать, оцениваем концепцию, пишем воинов.... предварительное время начала дуэлей 15.07.2010 ЗЫ. сам в суть калаха не вник так что ориентировался на правила шахмат ...ага там еще пропуск хода есть... Сообщение отредактировано: Rian - 10.06.2010 10:16 -------------------- Objective-C, Unity3d
|
Lapp |
10.06.2010 10:40
Сообщение
#15
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
предварительное время начала дуэлей 15.07.2010 Гуд, заметано! ))Цитата ЗЫ. сам в суть калаха не вник так что ориентировался на правила шахмат Где пропуск хода? к калахе?? или в шахматах??? ...ага там еще пропуск хода есть... Откуда такой сдвиг терминологии? игра -> битва игроки -> воины.. а?.. из тяжелого детства? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Rian |
10.06.2010 10:55
Сообщение
#16
|
Знаток Группа: Пользователи Сообщений: 394 Пол: Мужской Репутация: 9 |
холивар, останется только один
"Если при раскладывании последний камень попал в калах, то игрок ходит еще раз. " это решается передачей нескольких ходов в одном запросе, т.е. программа делет свои ходы пока может, а когда ходы закончились передает свои решения за раз да и ход то сводится к выбору лунки например: a1+a4+a2 -------------------- Objective-C, Unity3d
|
Lapp |
10.06.2010 11:28
Сообщение
#17
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
... это решается ... Все решается, безусловно )).Короче, ты не торопись. Продумай все. И реши )). -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Rian |
30.06.2010 7:04
Сообщение
#18
|
Знаток Группа: Пользователи Сообщений: 394 Пол: Мужской Репутация: 9 |
думаю уже пора подавать заявки, проходить квалификацию;)
-------------------- Objective-C, Unity3d
|
Lapp |
1.07.2010 2:32
Сообщение
#19
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
думаю уже пора подавать заявки, проходить квалификацию;) Опиши всю процедуру в деталях, пожалуйста: что должен делать участник, как он это должен делать и чего он должен не делать. Пришли мне и volvo в личку. Жду. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
1.07.2010 9:37
Сообщение
#20
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Rian получил от меня +1 за инициативность )
Дело двигается. Следим за новостями!.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 1.11.2024 5:23 |