| Lapp |
6.12.2006 15:27
Сообщение
#1
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Всем привет,
сыграем в Калах? Эта игра меня давно занимает, причем с определенной точки зрения. Но сначала о том, что это за игра (не все, может, знакомы). Она очень древняя, пришла (как чуть ли не все игры) с Востока. Известна также под названием Ман-Кала, а также иногда пишут два "л": Каллах. Играют двое на специальной доске камнями. Доска имеет два ряда лунок (по шесть), а по бокам две большие лунки (именно они и называются "калах"). Доска ставится между двумя игроками. Ближайший ко мне ряд лунок - мой, другой - противника. Правый калах - мой, левый - противника. В начале игры во всех лунках (кроме калахов) лежит по шесть камней. Ход заключается в том, что игрок берет все камни из любой своей лунки (не из калаха) и раскладывает их по одному в направлении против часовой стрелки, начиная с ближайшей правой, и тут уже включая свой калах - но не калах противника, который пропускается. Если при раскладывании последний камень попал в калах, то игрок ходит еще раз. Если последний камень попал в свою пустую лунку, а в противоположной лунке противника есть камни, то этот последний камень перекладывается в калах и все камни из противоположной лунки тоже перекладываются в калах игрока (если противоположная лунка была пуста, ничего не происходит). Игра заканчивается либо когда в одном из калахов скопилось более половины всех камней (то есть больше 36), и тогда этот игрок выиграл, либо когда в лунках игрока кончились камни, и тогда он проиграл. Вот, кажется, и все правила. На рисунке изображено состояние после моего хода лункой №1. Сейчас снова мой ход. Игра продавалась у нас, наверняка продается и сейчас. Играть интересно, ситуация на доске меняется иногда молниеносно, предсказать игру на пару ходов очень нелегко. Разумеется, есть и программные реализации (поройтесь в сети). В свое время все сотрудники нашего головного предприятия по производству ЭВМ были страстно увлечены ее электронной версией, проводились соревнования.. Вот именно эта особенность (малое количество ходов) и привлекла меня. Теперь расскажу о другом.. Когда-то давно я прочитал в книжке моего кумира Мартина Гарднера, как сделать машину для игры крестики-нолики. Ничего удивительного, если не сказать, что это было написано где-то в 60-е годы.. По сути, это был метод кнута и пряника. Нужно было записывать все комбинации, возникающие в игре, зарисовывать их каждую на отдельном коробке. При игре 3х3 это возможно После достаточного количества сыгранных партий "машина" готова к игре - разумеется, вашими руками, но своим "мозгом". Игрок, играющий за машину должен всякий раз открывать все коробки, соответствующие текущему положению на доске, и выбрать из них тот, в котором больше всего гороха. Затем сделать тот ход, который обозначен на этом коробке. Не правда ли, все просто? Если мое объяснение вам таковым не показалось, найдите книжку Гарднера Итак, я решил применить тот же принцип к Калаху. Это было давно, жутко давно - когда я впервые дорвался до персоналки. Тогда я это сделал на Бейсике. И ведь работало! Конечно, полный вариант мне был тогда не по зубам - не хватало ни памяти, ни производительности - но я извернулся. Придумал калах-3. Как вы, может, уже догадались, это вариант игры с тремя лунками, в каждой из которых в начале лежит 3 камня. Да, не очень интересно.. Именно поэтому я помнил это и ждал момента, когда машины подрастут. Тогда я делал все на машине с памятью 512 КБ (аналог DEC Pro 350, кажется). Нынешние машины имеют памяти примерно на три порядка больше (а моя и вообще в 4000 раз). Так что я решил, что момент настал. И сделал все заново. Теперь на Паскале (с прицелом, чтоб выложить сюда Ну вот, теперь несколько слов о самой проге, да и хватит пока - устал долбить по клаве, однако.. Собсно, а что там говорить? Разберетесь.. Это Калах-4 (легко превращающийся в Калах-5,6 и т.д. заменой одной констаныт). Интерфейс крайне уродский, но не хочу доводить его до ума в текстовой версии. Во время игры можно только вводить номер лунки. Между играми можно кое-что еще (хелп по нажатии h). Советую переходить в режим картинки (буква p). Код непричесанный, невычищенный - короче, рабочий, не судите строго. Извиняюсь за отсутствие комментариев. Если будет интерес - снабжу. Enjoy, как грится! Да, забыл сказать.. Программа сама по себе страшно тупая - она ходит случайным образом. Чтоб ей поумнеть, нужен файл с накопленными данными. Файл у меня есть (для Калах-4), он весит почти 30 МБ - но вы можете сделать его и сами. Самый интересный вопрос - оценка памяти, необходимой для обучения Калах-5 и 6. Я пока не соображу, как правильно оценить. Если верно, что каждый новый уровень требует примерно на 2.5-3 порядка большей памяти (как при переходе от 3 к 4), то для Калаха-5 потребуется больше 10 ГБ.. И такого количества операционки у меня пока нету.. Но мне кажется, что множитель не постоянен, он растет, но не спец по этим вопросам.. Итак - ваши соображения, господа?.. Старый вариант программы удален! Новый в посте №16 -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
| Lapp |
13.01.2010 6:43
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
не знала что на форуме можно писать пост без входа в систему. ... Можно отвечать, нельзя начинать тему. У пользователей все же есть довольно много преимуществ. Например, можно повышать репутацию другим (после 25 постов) я подумала, что достану тебя, если буду задавать слишком много вопросов, а их у меня много. Вполне возможно, что достанешь переменная Num: boolean? ll: longint? о каких линиях идет речь: 'Lines: ', ll? Ну, это все несущественно.. Num - это признак того, нужно ли выводить общее число сыгранных игр за сессию. В программе есть вещи, которые служат не для алгоритма, а для вывода информации, например. А еще есть такие вещи, которые я уже не использую в последнией версии, но из программы еще не удалил. ll - количество записей в БД. По терминологии баз данных это lines, то есть линии. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
| cameron |
13.01.2010 14:23
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Женский Реальное имя: Ольга Репутация: 0 |
Цитата Вполне возможно, что достанешь преподаватель еще не видел программы, вопросы мои. по-моему, очень много усилий пошло на Picture, хотя режим без "картинки" тоже хорош. Но ты не пошел по пути наименьшего сопротивления |
lapp Игра Калах 6.12.2006 15:27
Archon Знаю эту игру! На нокиа 3310 она была среди ст... 10.12.2006 22:54
Творец Хотелось бы посмотреть на комментарии кода проги ... 12.05.2007 21:05
Lapp
посмотреть на комментарии кода проги
Творец, обя... 12.05.2007 22:50
Творец
Творец, обязательно сделаю. На вскидку - в ближа... 13.05.2007 18:25
Творец Lapp пока хотя бы примерно что к чему поясни пожал... 20.05.2007 20:37
Lapp
Lapp пока хотя бы примерно что к чему поясни пожа... 23.05.2007 10:59
Творец
Я посмотрел прогу :), и решил, что писать коммент... 27.05.2007 20:06
RathaR Популярная это всётаки игрушка :) Описали и алгори... 11.10.2009 16:34
Lapp Популярная это всётаки игрушка :) Описали и алгори... 12.10.2009 6:56
cameron Lapp, огромное спасибо Вам за написание сей програ... 10.12.2009 22:02
Lapp очень интересует общий принцип работы и назначение... 11.12.2009 11:07
Lapp Выполняя обещание, я пересмотрел программу, и.. н... 14.12.2009 6:35
RathaR Lapp, не так давно, я втечении примерно двух недел... 14.12.2009 19:52
cameron Lapp, все верно, для курсовой работы! ну и сам... 15.12.2009 17:54
Lapp Lapp, все верно, для курсовой работы! ну и сам... 21.12.2009 12:47
cameron Lapp, спасибо, что ответил скоро!
сейчас буду ... 21.12.2009 21:13
Lapp [b]Lapp, спасибо, что ответил скоро!
сейчас бу... 22.12.2009 6:00
andriano Большинство из этих проблем решаются, если использ... 22.12.2009 22:22
Lapp плохо поняла назначение функций HexDig, AddRec, Fi... 23.12.2009 6:11
andriano Вряд ли медленнее, чем чтение/запись мегабайтного ... 23.12.2009 11:30
Lapp - если объем файла один считать за 1.0, то объем б... 23.12.2009 13:01
andriano Этим можно пренебречь. При размере БД около 500 Г... 23.12.2009 13:42
cameron плохо поняла назначение функций HexDig, AddRec, Fi... 22.12.2009 20:30
Гость Lapp, можешь, пожалуйста, обьяснить мне роль масси... 10.01.2010 13:02
cameron Lapp
Каково назначение у процедуры Teach?
С ее пом... 10.01.2010 18:47
Lapp Lapp, можешь, пожалуйста, обьяснить мне роль масси... 11.01.2010 0:49
cameron Lapp
благодарю, теперь понятно, учитывая и твой от... 11.01.2010 19:36
Гость
да, спасибо, очень доходчиво объяснил. У меня еще... 11.01.2010 21:56
Lapp что за переменная р?
а массивы tBoard (лунки и 2 ... 11.01.2010 23:33

Lapp
Гм. Псмотрю.Посмотрел.. Что ж ни у кого язык не... 12.01.2010 0:51
Lapp а массивы tBoard (лунки и 2 калаха?), tKalahНет. ... 12.01.2010 9:37
Гость пардон, tBoard ты объяснил. 11.01.2010 22:02
cameron
честно говоря, не знала что на форуме можно писат... 12.01.2010 19:19
cameron переменная Num: boolean?
ll: longint? о каких лин... 12.01.2010 19:56
Lapp преподаватель еще не видел программы, вопросы мои.... 13.01.2010 14:41
cameron на счет записей в БД.
Store[NStore]^.Len:=0 - тут... 13.01.2010 15:29
Lapp Store^.Len:=0 - тут мы создаем пустой блокДа, имен... 14.01.2010 6:08
Lapp Как хороши, как свежи были розы.. (С) 3.02.2010 1:50![]() ![]() |
|
Текстовая версия | 9.12.2025 1:31 |