На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Алгоритм преферанса
    Народ, помогить плиз найти сабж. Хотелось бы конечно исходники (на любом языке), но если нет, то хотя бы описание алгоритма, или любые ссылки, которые могут помочь в написании сабжа.

    Очень надо....
      Один совет - научись (если не умеешь играть) в преф - сядь, разложи карты, и посмотри как ты думаешь. Ну типа там длинная масть, 100\% взятки, тем более перебор раскладов как в шахматах тоже катит. Играть будет галимо, но играть должен. ;)
        В преф то я играть умею, и судя по всему очень неплохо.

        Но я же не смогу закодить алгоритм своего мышления  ;) Может кто-то посоветут хоть с чего нужно начинать написание такого алгоритма?...

        Может есть исходники какой-то похожей карточной игры?
          Да, еще достаточно важен вопрос быстродействия - ресурсы (проц и память) очень ограничены.
          Мне нужен хоть какой-то, пускай ограниченый, или даже тупой AI компа, но чтобы он играл...
            Значит так: у тебя 10 карт, у двух других тоже. В прикупе две.
              Сначала считаешь свои взятки при раскладе 1-3, 1-2, 2-0 (думаю понял). Выбираешь за козырь длинную масть и считаешь. Если у тебя четыре взятки при таких раскладах, и на руках еще парочку королей с прикрытием - играешь 6, если 5-6 - то 7, ... Думаю 10 своих ты посчитаешь. Потом выбрасываешь в прикуп две карты, которые не козырь :-) и желательно не на длинных мастях. Заказываешь.
              Если ход твой, и у тебя при четырех как минимум козырях - туз, ходишь с него, после каждого хода ведешь учет оставшихся карт у каждого игрока. Будет трудно с розыграшем. Выловить возможность например взять на третьего короля. Бывает если голый туз, или слева от тебя игроку нечем больше ходить чем в ету масть. Но думаю для начала своя игра должна строится на отборе своих взяток.
            ЗЫ. Первый етап можно упростить, как делается во всех прожках - ты же знаешь расклад :-)
              Мизер заказывать не сложно - если нету разрыва более чем в две карты, нету паровозов. Заказывать нужно явный, тоесть без прикупа.Максимум при голой восьмерке и твоем ходе. Ходишь с какойнибудь карты, которую они точно заберут (только не 7) - дальше только отвечаешь.
              Само сложно играть в распасы. Тут я даже не представляю как я сам думаю. Стараешся отдать все, кроме явных твоих, которые забираешь при первой же возможности.
            :-) После написания етого алгоритма :-) возможно что он будет всем проигрывать, или у всех выигрывать (заказ всегда явный). В любом случае интересного соперника ты никак не сделаешь.
            ЗЫЫ. Еще одна примочка - никто не говорит, что расклады должны быть случайными ;D ;D
              Цитата Sanya, 17.12.02, 19:32:52
              Значит так: у тебя 10 карт, у двух других тоже. В прикупе две.
                Сначала считаешь свои взятки при раскладе 1-3, 1-2, 2-0 (думаю понял). Выбираешь за козырь длинную масть и считаешь. Если у тебя четыре взятки при таких раскладах, и на руках еще парочку королей с прикрытием - играешь 6, если 5-6 - то 7, ... Думаю 10 своих ты посчитаешь. Потом выбрасываешь в прикуп две карты, которые не козырь :-) и желательно не на длинных мастях. Заказываешь.


              С торгами как раз все более-менее понятно. По крайней мере довольно легко можно написать простенький алгоритм, который будет торговаться только при чистых.
              Сложнее с игрой, особенно с распасами...

              Цитата Sanya, 17.12.02, 19:32:52

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

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

              Цитата Sanya, 17.12.02, 19:32:52
              ЗЫ. Первый етап можно упростить, как делается во всех прожках - ты же знаешь расклад :-)

              А вот тут я не уверен - не усложнит ли алгоритм знание карт противника ???
              (в смысле при игре)

              Цитата Sanya, 17.12.02, 19:32:52
                Мизер заказывать не сложно - если нету разрыва более чем в две карты, нету паровозов. Заказывать нужно явный, тоесть без прикупа.Максимум при голой восьмерке и твоем ходе. Ходишь с какойнибудь карты, которую они точно заберут (только не 7) - дальше только отвечаешь.

              Ну с этим понятно - тут действительно просто

              Цитата Sanya, 17.12.02, 19:32:52
                Само сложно играть в распасы. Тут я даже не представляю как я сам думаю. Стараешся отдать все, кроме явных твоих, которые забираешь при первой же возможности.

              Да, тут самая сложная часть, и у меня пока нет мыслей, как ее реализовать  :(

              Цитата Sanya, 17.12.02, 19:32:52

              :-) После написания етого алгоритма :-) возможно что он будет всем проигрывать, или у всех выигрывать (заказ всегда явный). В любом случае интересного соперника ты никак не сделаешь.
              ЗЫЫ. Еще одна примочка - никто не говорит, что расклады должны быть случайными ;D ;D

              А вот это здравая идея!   Я об этом как-то сразу и не подумал  :)
              Давай подумаем, что нам это может дать?
              В любом случае какая-то рандомность быть должна, иначе юзер заметит. Но с другой стороны можно например половину карт (или 2/3) сдавать случайно, а потом уже компу подкладывать из оставшихся наиболее подходящие для него карты, а юзеру сливать все остальное ;)

              Это реально "усиливает" AI (т.е. комп будет реже проигрывать), что уже хорошо.

              Еще какие-то идеи есть?

              ЗЫ: В любом случае спасибо уже и на этом  :D
              Сообщение отредактировано: hit -
                Надо все делать постепенно. Разбивай на подзадачи. Сразу бацнуть алгоритм преферанса не получится. Например, задайся целью реализовать алгоритм торговли при готовых картах (Можешь для начала расклады сам задавать, чтоб протестировать, потом они будут типа тасоваться). Добейся результата - из 20 раскладов 18 он закажет точно так же как заказал бы ты. Причем БК лучше не увлекаться. Я думаю поставить жесткие условия. Если твой ход, и у тебя нет передачи хода (тузы с королями и дамами) - то можно заказать БК причем ТОЛЬКО явных, во всех остальных случаях - выбирать козырь (даже если все масти по три карты). Причем для усиления АИ сделай торговлю уже с 12 твоимы картами и извесным раскладом. Тоесть комп знает что в прикупе и на руках. Тогда не попадешся на рассклад 4-0, или две 7 в прикупе.
                  После етого переходи на игру (мизеры и распасы пока откинь). Но ето потом, счас запутаешся. Кстати если компа перебивают, то выбрать вист или пас иоже не сложно - достаточно посчитать свои взятки и другого вистуещего. В етом и преимущество "известного" рассклада. Когда играю я с компом - у меня такое чувство, что так оно и есть.
                  Начни - проблемы будем решать по ходу.
                ЗЫ. Надеюсь примочки типа сложность компа ты не будешь писать?
                  Цитата Sanya, 18.12.02, 15:55:52
                  Надо все делать постепенно. Разбивай на подзадачи. Сразу бацнуть алгоритм преферанса не получится. Например, задайся целью реализовать алгоритм торговли при готовых картах (Можешь для начала расклады сам задавать, чтоб протестировать, потом они будут типа тасоваться). Добейся результата - из 20 раскладов 18 он закажет точно так же как заказал бы ты. Причем БК лучше не увлекаться. Я думаю поставить жесткие условия. Если твой ход, и у тебя нет передачи хода (тузы с королями и дамами) - то можно заказать БК причем ТОЛЬКО явных, во всех остальных случаях - выбирать козырь (даже если все масти по три карты). Причем для усиления АИ сделай торговлю уже с 12 твоимы картами и извесным раскладом. Тоесть комп знает что в прикупе и на руках. Тогда не попадешся на рассклад 4-0, или две 7 в прикупе.
                    После етого переходи на игру (мизеры и распасы пока откинь). Но ето потом, счас запутаешся. Кстати если компа перебивают, то выбрать вист или пас иоже не сложно - достаточно посчитать свои взятки и другого вистуещего. В етом и преимущество "известного" рассклада. Когда играю я с компом - у меня такое чувство, что так оно и есть.

                  Нет, ну понятно, что все сразу написать не получится - нужны абстрагирование, модульность и иерархия (как писал Гради Буч)  ;)
                  Я просто, прежде чем писать, хотел прикинуть, смогу ли я вообще такое написать (если нет, то лучше заняться чем-то другим).
                  Теперь я в общем уверен, что смогу, так что буду писать...

                  Цитата Sanya, 18.12.02, 15:55:52
                  Начни - проблемы будем решать по ходу.

                  Договорились

                  Цитата Sanya, 18.12.02, 15:55:52
                  ЗЫ. Надеюсь примочки типа сложность компа ты не будешь писать?

                  Это никогда не помешает ;)
                  Но скорее всего будет достаточно трудно написать такую "примочку", поэтому можно на нее забить.
                    Жалко, что окончательно, никто ничего не предложил.
                      Цитата Netta, 23.12.02, 20:02:03
                      Жалко, что окончательно, никто ничего не предложил.

                      Окончательно конечно не предложили, но я в общем-то своей цели добился  - выяснил, что я смогу его написать ;)
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0.0755 ]   [ 15 queries used ]   [ Generated: 6.10.26, 00:03 GMT ]