LINUX.ORG.RU

постоянный чит на openpref?

 ,


0

1

Приветсвую,

я тут мало-мало подебажил openpref в версии 0.1.3 (последняя из доступных), в частности функцию loadLists из файла aiplayer.cpp, по результатам дебаженья становится понятно, что AI игрок знает точно с самого начала как разложились карты у оппонентов/оппонента, то есть mCards никакие не supposed или open, а всегда open. Дебажил я по рабоче-крестьянски скопировал функции dumpCardList и cardList плюс буффер вывода плюс номер итерации.

Как то нехорошо получается и даже очень.

В тред призываются разработчики и им сочувствующие.

Важно не знание, а использование этой информации.
Так что читай код и смотри использует ли алгоритм эти данные как отправную точку или они передаются просто потому что в каком-то контейнере эти данные уже были и на кой хрен вводить новый тип данных?

JacobTwoTwo ()
Ответ на: комментарий от JacobTwoTwo

Да я уж посмотрел код, раз уж я его дебажил указанным рабоче-крестьянским способом ;-). Вот то место и используется оно там на каждом ходу AI игрока: mLeft = aLeftPlayer->mCards; mRight = aRightPlayer->mCards; for (int m = 1; m <= 4; m++) { Card *LeftMax,*RightMax,*Max=0; while (mLeft.cardsInSuit(m) || mRight.cardsInSuit(m)) { LeftMax = mLeft.maxInSuit(m); RightMax = mRight.maxInSuit(m); if (LeftMax == 0 && RightMax == 0) { Max = 0; } else if (LeftMax == 0 && RightMax != 0) { Max = RightMax; mRight.remove(Max); } else if (LeftMax != 0 && RightMax == 0) { Max = LeftMax; mLeft.remove(Max); } else if (*LeftMax > *RightMax) { Max = LeftMax; mLeft.remove(LeftMax); mRight.remove(RightMax); } else { Max = RightMax; mLeft.remove(LeftMax); mRight.remove(RightMax); } }

Так что я думаю после такого хорошо бы разработчикам обьясниться.

pustota1 ()
Ответ на: комментарий от JacobTwoTwo

А сгрузить код после мною предоставленного описания где что и как и посмотреть в любом удобном формате Заратустра не позволяет? Это во-первых. А во-вторых, ты что ли разработчик там ?

pustota1 ()
Ответ на: комментарий от pustota1

Ъ не ходят по ссылкам. Тем более по несуществующим ссылкам ради сомнительного удовольствия посмотреть на чужой код.
Так говорил Заратустра.
Это во-первых.
И во-вторых я не разработчик этой программы.
И не Заратустра.
Я — ой, гхм... чуть не проговорился...
/me уходит из треда злобно бормоча под нос проклятия.

JacobTwoTwo ()
Ответ на: комментарий от mandala

Не нравится — не читайте, никто вроде не заставляет, нет? Те кто знают этот код, получили исчерпывающую информацию, кто не знает, думаю, с ходу и так ничего субстантивного, думаю, не скажут. Но на всякий случай:

 
mLeft = aLeftPlayer->mCards;
mRight = aRightPlayer->mCards; 
for (int m = 1; m <= 4; m++) {
    Card *LeftMax,*RightMax,*Max=0;
    while (mLeft.cardsInSuit(m) || mRight.cardsInSuit(m)) {
      LeftMax = mLeft.maxInSuit(m);
      RightMax = mRight.maxInSuit(m);
      if (LeftMax == 0 && RightMax == 0) {
        Max = 0;
      } else if (LeftMax == 0 && RightMax != 0) {
        Max = RightMax;
        mRight.remove(Max);
      } else if (LeftMax != 0 && RightMax == 0) {
        Max = LeftMax;
        mLeft.remove(Max);
      } else if (*LeftMax > *RightMax) {
        Max = LeftMax;
        mLeft.remove(LeftMax);
        mRight.remove(RightMax);
      } else {
        Max = RightMax;
        mLeft.remove(LeftMax);
        mRight.remove(RightMax);
      }
    }

Очевидно, что информация используется, нет?

pustota1 ()
Ответ на: комментарий от peregrine

Не, играть не как люди и читерить это дистанция огромного размера — тут именно, что чит, поскольку есть доступ к нелегальной информации и она используется.

pustota1 ()
Ответ на: комментарий от peregrine

Это разные виды читов — один подкрутить ГСЧ, другой противнику в карты подглядывать, но и то и другое чит. Но мы тут не идиеологией заняты, а пытаемся понять, что себе авторы думали.

pustota1 ()
Ответ на: комментарий от pustota1

И всё равно это не чит. В не open pref можно крутить уровень AI, и объяснить, как оно вот так угадывает на высоких уровнях можно только тем, что AI таки всё видит. Нужно ли это? Да, безусловно, так как на средних уровнях ты постепенно понимаешь его алгоритм и становится неинтересно. Уж лучше он бы видел, чем одинаково ошибался. Карты раскладывает случайно — и это уже хорошо.

vodz ★★★★ ()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

как оно вот так угадывает на высоких уровнях можно только тем, что AI таки всё >видит.

Довольно категоричное утверждение. Многое можно обьяснить и неплохим примененным знанием комбинаторики и аккуратным отслеживанием состояния в игре.

так как на средних уровнях ты постепенно понимаешь его алгоритм и становится >неинтересно.

А есть какая то надежда, что зная, что A.I. читит, алгоритм не будет понят или причем здесь этот комментарий?

pustota1 ()
Ответ на: комментарий от pustota1

Довольно категоричное утверждение.

Там никто же не скрывал, имя такого партнера становится Рентген.

А есть какая то надежда, что зная, что A.I. читит, алгоритм не будет понят

Вы ничего не поняли. Вы не только постепенно повышаете свой уровень, но и начинаете раздражаться, так как становится понятно, что сейчас AI сделает так. Вы повышаете уровень и вам хотя-бы становится интересно играть при вероятности подсмотра 0.7...1. Алгоритм же меняется, становится менее случайным. У вас появляется интерес действительно высчитать получится ли взять свои, сделать мизер и т. д.

vodz ★★★★ ()
Ответ на: комментарий от vodz

Там никто же не скрывал, имя такого партнера становится Рентген.

В openpref, вообще то скрывал (open там про другое, особенно если посмотреть на то, как они там в закомментированном коде пытаются случайные статистические распределения раздать).

при вероятности подсмотра 0.7...1

На фоне того, что я написал вначале: вероятность посмотра _всегда_ 1, предлагаю писать кроче: Мастера всегда играют на открытых картах. Ну, чтобы чепуха была очевиднее. Почему чепуха? Потому что к оговоренным правилам и природе игры такой подход не имеет никакого отношения и таким образом существует в своей очень отдельной реальности.

pustota1 ()