Алгоритм решения проблемы точек и линий? - PullRequest
1 голос
/ 07 июля 2011

Это классическая игра. Мысль объяснить игру своими словами, но вики это делает лучше,

http://en.wikipedia.org/wiki/Dots_and_Boxes

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

Но запутался относительно того, какую структуру данных и алгоритм использовать, Я сохраняю все точки как координаты в массиве, например [X1, y1, x2, y2, x3, y3, x4, у4, ....] Где x1, y1 составляют пару и координаты,

Я использую Java (Android). Как лучше хранить координаты?
Вышеуказанный метод кажется слишком простым и может усложнить ситуацию позже.

Планирование массива объектов, где каждый объект содержит координаты x, y и некоторую другую информацию
в объекте.

Какой алгоритм мне следует применять для проверки циклов, т. Е. Чтобы знать,
ход игрока закрыл очки. Это проблема с графиком?

Любые намеки на то, где я должен искать решение такого рода проблемы.

PS: На данный момент это игра для 2 игроков, поэтому не стоит беспокоиться о движении компьютера,
но больше беспокоиться о том, решит ли последний ход точки
(в основном создал цикл?, закрытый ящик)

Я проверил это,
http://en.wikipedia.org/wiki/Flood_fill

что-то похожее на то, что я должен сделать, я думаю.

Ответы [ 3 ]

0 голосов
/ 07 июля 2011

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

Я бы модель доска и коробки (квадраты).Визуализация блока - это (1) четыре точки, (2) до линий / границ двух разных цветов и (3) буква в центре.

Экземпляр класса Board имеет несколько(4,6,9) Box экземпляров.Двумерный массив Box будет достаточным.Преимущество такого массива в том, что довольно легко идентифицировать соседние блоки (вам понадобится, если игрок проведет линию, поскольку это может повлиять на два блока)Точка модели.BoxPainter может нарисовать их на экране.

Когда закрывается поле? - когда все четыре границы помечены как окрашены .Добавьте простой isFilled() метод в класс Box и вызывайте метод во всех Box экземплярах после каждого хода игрока.

0 голосов
/ 07 июля 2011

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

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

Линии могут быть легко сохранены в двумерном массиве.

0 голосов
/ 07 июля 2011

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

public class Square {
     boolean up;
     boolean right;
     boolean down;
     boolean left;

    private boolean isClosed() {
        return up && right && down && left;
    }
}

private static final int TABLE_SIZE = 5;

Square [][] table = new Square[TABLE_SIZE][TABLE_SIZE];

Все движения влияют на 2 квадрата (кроме внешней линии), устанавливают их состояния как true, а также управление для квадрата закрыто;

 // draw line  
 table[1][1].right = true;
 table[2][1].left = true;

 // Check for closed
 table[1][1].isClosed();
 table[2][1].isClosed();

Мой код не очень хорошо написан для алгоритма показа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...