Нужны инструкции по игре Реверси - PullRequest
3 голосов
/ 24 ноября 2008

Я пытаюсь написать игру Реверси на Python. Кто-нибудь может дать мне некоторые основные идеи и стратегии, которые просты, хороши и просты в использовании?

Буду признателен за любую помощь, потому что я зашел немного далеко, но застрял между кодами, и это тоже стало более сложным. Я думаю, что переусердствовал в какой-то части, которая должна быть довольно простой. Итак ....

Ответы [ 6 ]

4 голосов
/ 25 ноября 2008

Реверси - это элегантно простая игра. Я собираюсь использовать psuedo C # / Java langauge для объяснения некоторых понятий, но вы можете перенести их в Python.

Чтобы разбить его на самые простые компоненты, у вас есть две основные вещи:

Двумерный массив, представляющий игровое поле:

gameBoard[10,10]

И некоторая форма перечисления, которая хранит состояние каждой плитки на игровой доске:

enum tile
{
    none,
    white,
    black
}

Для рендеринга игровой доски вы перебираете массив gameBoard, увеличивая смещение размера фигуры:

for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        // The Piece to draw would be at gameBoard[i,j];
        // Pixel locations are calculated by multiplying the array location by an offset.
        DrawPiece(gameBoard[i,j],i * Width of Tile, j * width of tile);
    }
}

Аналогично, разрешение щелчка мышью обратно в местоположение в массиве будет аналогичным, используйте местоположение мыши и смещение для расчета фактической плитки, на которой вы находитесь.

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

ИИ может воспользоваться сканированием массива с помощью гипотетических ходов, сделать 10 или около того возможных ходов, а затем выбрать тот, который дает наилучший результат. Старайтесь не делать это умным, так как легко создать непревзойденного ИИ, если вы позволите ему разыграть всю игру в своей голове.

Когда в массиве больше нет свободных мест, вы заканчиваете игру.

1 голос
/ 25 ноября 2008

На странице Википедии есть все правила и несколько советов по приличной стратегии для реверси / отелло. По сути, вам нужна какая-то структура данных для представления состояния доски, то есть положение всех фигур на доске в любой точке игры. Как полагают другие, 2d-массив, вероятно, является достойным выбором, но это не имеет большого значения, если это представление, которое имеет смысл для вас. Некоторые из сложных вещей - выяснить, какие пробелы являются допустимыми движениями, а затем какие части переворачивать, но, опять же, страница в Википедии содержит все детали, поэтому ее не должно быть слишком сложно реализовать.

Если вы хотите создать ИИ для своей игры, я бы посоветовал взглянуть на какой-нибудь алгоритм минимаксного типа с отсечкой альфа-бета-версии. В интернете есть масса ресурсов для них, и ai, использующий минимакс с приличной функцией оценки, сможет довольно легко обыграть большинство игроков-людей, так как он может смотреть как минимум на 8 или 9 шагов вперед за очень небольшое время. На минимаксе есть и другие более причудливые варианты, такие как negamax или negascout, которые могут работать даже лучше, чем базовые минимакса, но я бы начал с более простых. В Википедии есть страницы по всем этим алгоритмам, и есть тонна информации по всем из них, так как многие курсы по искусственному интеллекту используют их для Отелло или чего-то подобного. Одна особенно полезная страница - это этот Java-апплет . Это позволяет вам проходить этапы минимаксного и негамаксического в дереве состояний образца с обрезкой альфа-бета и без нее.

Если ничего из этого не имеет смысла, дайте мне знать.

0 голосов
/ 09 февраля 2009

Вам даже не нужен линейный массив. Достаточно двух 64-битных длинных значений Java (одно для белых, другое для черного. Assert (white & black) == 0.

Вы можете сделать игру сильнее, считая не фигуры, которые соединены с углом, а фигуры, которые не могут быть взяты.

0 голосов
/ 09 февраля 2009

Не впадайте в решение с многомерным массивом. Я уже написал крестики-нолики с мульти-тусклой подсветкой, и она работала нормально, но затем, когда я запустил свою собственную версию othello, я сделал линейный целочисленный массив, и он почти в 2 раза быстрее.

Альтернативные / более быстрые методы преобразования целого числа в декартову координату?

У меня есть все, что в основном закодировано в PHP, но я все еще исследую идею для ИИ как решение для грубой силы, как в Tic-tac-toe, не сработает.

0 голосов
/ 26 ноября 2008

Вы также можете рассмотреть возможность применения цикла «нечеткой логики» для анализа позиций. Реверси / Отелло печально известен тем, что заставляет игроков учитывать определенные стратегические выгоды против стратегических потерь для каждого хода, а также отдавать предпочтение одному положительному ходу над другим.

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

0 голосов
/ 25 ноября 2008

Вам понадобится 2D-массив. Остерегайтесь [[0] * 8] * 8, вместо этого используйте [[0 для _ в [0] * 8] для _ в [0] * 8]

Белое должно быть 1, а черное -1 (или наоборот, конечно). Таким образом, вы можете сделать сальто с * = - 1 и оставить пустым Двойные четыре петли смогут суммировать результаты и определять, насколько хорошо игра выполнена. карта (сумма, карта (сумма, доска)) даст вам чистую оценку

Не забудьте проверить и посмотреть, может ли игрок даже двигаться в начале раунда

...