2013-02-20 3 views
0

Я пытаюсь создать игру Checkers/Drafts на C#. Проект построен с использованием Windows Form.Событие мыши в C#

Что я сделал, это разложить игровое поле. Поэтому у меня есть класс «Board». и класс «BoardSquare» (этот класс рисует квадрат в правильном положении и цвет)

Плата построена из 8 X 8 BoardSquare.

Я думал об этом решении, квадрат должен знать, пуст он или нет, и , если он не пуст, это означает, что на нем есть «GameSoldier».

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

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

+0

Ну, вы потратили на это несколько размышлений. Свяжитесь с WinForms, посмотрите, как работает обработка событий, и вы начнете! –

+0

Звучит как домашнее задание. что ты уже испробовал? Любые фрагменты кода? В принципе, событие click вашего квадрата должно возвращать свойство position и его содержимое. – Sashenka

ответ

1

Вы можете получить координаты курсора от EventArgs, когда плата щелкнул. Чтобы перевести эти координаты на квадрат на доске, вы должны разделить плитки слева вверху слева, по строкам и сохранить их в индексированном списке или массиве.

Х координат (в «плитки») является то Math.Floor(X_Clicked/TileWidth)

И Y координата Math.Floor(Y_Clicked/TileHeight)

Например, если ваши плитки 50 пикселей в ширину и 50 пикселей в высоту, и пользователь нажимает на (329, 186), это было бы плитку по адресу:

329/50 = 6,58 = 6

186/50 = 3,72 = 3

Плитка на (6, 3) была нажата. Чтобы преобразовать это в индекс в списке/массиве:

x + (y * tiles_in_a_row) = 6 + (3 * 8) = 30, поэтому была нажата кнопка Tile [30].

Помните, что это система координат на основе нуля, поэтому первая плитка находится на (0, 0).

+0

спасибо, вся игра - это рисование по графике. , так что я сделал, это создать квадратный класс и то, что я пытаюсь сделать - добавить квадратный класс для мыши, так что пользователь сможет нажать на него – Elior

0

Что вы хотите сделать, это добавить Eventhandler для события MouseClick элемента управления, с которым вы делаете рендеринг, на котором вы находитесь. В EventArgs для этого события вы сможете получить координаты мыши. Затем вы можете объединить эту информацию с размером самого элемента управления, чтобы вычислить, какой квадрат был нажат.

Вот еще информация:

Obtain Position/Button of mouse click on DoubleClick event

(особенно ответ лосиные)

+0

Спасибо за ваш ответ. Я не использую элемент управления PictureBox. Вся игра должна быть нарисована на форме, с графикой – Elior

+0

Извините за поздний ответ, я уверен, что вы уже поняли это. Как раз для записи, это не имеет значения, в каком виде управления вы рисуете. Они все ведут себя одинаково. Таким образом, вы можете непосредственно нарисовать форму так же, как и краску в PictureBox. – b0wter

1

Существует несколько способов сделать это, ваш класс boardquare может стать препятствием для простого, поскольку он будет сфокусирован.

Когда вы нажимаете на занятый квадрат доски, это событие для мыши.Его положение на доске можно определить по Top/Height и Left/width Вооружившись этим, вы можете передать это до обработчика событий BoardSquareSelected, определенного на доске. Когда вы нажимаете на незанятую квадратную позицию мыши, это x/square width, y/square height Вам понадобится немного больше логики для первого щелчка, занятого, во-вторых, не законного перемещения и т. Д. Вы также можете посмотреть на производную перетаскивания. Но лично я бы избавился от boardquare как компонента. Если панель имеет массив квадратов размером 8x8, и вы используете Invalidate (rect), чтобы избежать перерисовки всего объекта при любых изменениях, вам это действительно не нужно. Тогда все ваши материалы выбора полностью инкапсулированы классом платы.

+0

Пользователь может выбрать размер борта , это может быть 4 X 4, 8 X 8 или 10 X 10 , поэтому я создаю класс BoardSquare – Elior

+0

Это свойство платы. Насколько большой квадрат на экране является свойством платы. Говоря, что это свойство квадрата, вы можете иметь квадраты разного размера на одной доске. Кроме того, вы просто столкнулись с квадратом, и если вы настаиваете на его сохранении, ожидайте еще нескольких. Подумайте об этом так, до 100 компонентов в вашем приложении ... –

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