Какой самый простой способ создать интерактивную сетку для игры на C ++? - PullRequest
2 голосов
/ 24 апреля 2010

Я давно не использовал C ++, поэтому я решил взять небольшой проект, чтобы снова ознакомиться с ним. Я пытаюсь сделать игру для китайских шашек, но у меня нет опыта разработки GUI на C ++. Есть ли действительно простой способ просто сделать сетку (то есть шестиугольники растровых изображений или что-то в этом роде), которая при нажатии даст мне номер индекса той, на которую я нажал? Если у кого-то есть примеры того, как это сделать, даже с помощью 2D-сетки квадратов, это было бы полезно. Любая помощь приветствуется, спасибо!

Ответы [ 5 ]

1 голос
/ 24 апреля 2010

Зависит от того, что вы берете за простой способ .

Qt может быть простым способом, но потребуется время, чтобы привыкнуть к нему (если вы этого не сделаете).

На вашем месте я бы создал простое приложение winapi, написал обработчики для WM_CLICK сообщений и добавил бы простое средство рендеринга сетки.

0 голосов
/ 24 апреля 2010

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

POINT grid_loc = POINT(click.x / grid.cell.width, click.y / grid.cell.height);

Конечно, это игровая сетка с нулями.

0 голосов
/ 24 апреля 2010

Обычно GUI takeit позволит вам переопределить (например, через виртуальные функции) обработчик событий виджета, представляющего доску, поэтому вы будете обрабатывать событие щелчка мыши, вызывая некоторую собственную функцию, например MouseClicked (int x , int y), где обработчик также даст вам координаты мыши x и y.

Если это прямоугольная сетка, просто целочисленное деление координаты на ширину ячейки в пикселях.

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

0 голосов
/ 24 апреля 2010

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

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

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

0 голосов
/ 24 апреля 2010

Прежде всего необходимо решить, какой API вы собираетесь использовать для своего приложения. Qt? SDL? Win32? OpenGL? Я рекомендую использовать Qt и его класс QGraphicsView (вы можете начать с одного из примеров приложений Qt, который использует QGraphicsView и изменить его по своему вкусу).

...