2013-06-01 2 views
0

Я делаю настольную игру под названием «Go» на основе реальной настольной игры. В основном, есть 2 игрока (белый и черный), и они по очереди помещают белые и черные камни на пересечения сетки игровых автоматов.Рисование 2D-массива на сетке

До сих пор я мог нарисовать камень, чередовать между игроками и изменить значение в своем 2D-массиве, где 0 = открытое пятно, 1 = белый и 2 = черный.

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

Это то, что я использую, чтобы сделать камень следовать моей мыши

if (turn == 1) { 
    g2d.drawImage(s.getBlackStone(), 
        s.getBlackX() - Frame.frameLocation.x - 15, 
        s.getBlackY() - Frame.frameLocation.y - 35, null); 
} else { 
    g2d.drawImage(s.getWhiteStone(), 
        s.getWhiteX() - Frame.frameLocation.x - 15, 
        s.getWhiteY() - Frame.frameLocation.y - 35, null); 
} 

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

+0

Является ли 'Frame 'переменной или классом? Если это переменная, ее следует называть 'frame'. Если это класс, тогда (a) вы не должны использовать статические переменные для местоположения и (b) вы не должны скрывать 'java.awt.Frame'. Кроме того, графические контексты рисуют относительно компонента, а не экрана. – wchargin

+0

Это звучит уместно. Получите местоположение сетки и поместите/нарисуйте камень там. Не уверен, что еще вы действительно сделали – greedybuddha

+0

Также рассмотрите перечисления: используйте 'public enum Player {WHITE, BLACK}' в сочетании с 'if (turn == Player.WHITE)'. – wchargin

ответ

2

Обычно я делаю класс Stone, который имеет переменные, такие как статус (черный, белый или пустой), количество вольностей и местоположение в массиве. 2D-массив - это всего лишь массив экземпляров класса Stone. Если переменная статуса не пуста, я рисую черный или белый камень на ячейке, соответствующий местоположению в массиве.

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

В ответ на ваш вопрос найдите местоположение их щелчка по сетке, обновите все затронутые камни в массиве, а затем перерисуйте массив.

Смежные вопросы