2013-02-20 69 views
0

我正嘗試在C#中構建一個跳棋/草稿遊戲。 該項目是使用Windows窗體構建的。C中的鼠標事件#

我做的是分解遊戲板。所以我有 「董事會」類。 和「BoardSquare」類(本課在正確的位置和顏色上畫一個正方形)

該板由8 X 8 BoardSquare構建。

我想過這個解決方案,廣場需要知道它是否爲空,如果它不是空的,這意味着它上面有一個「GameSoldier」。

因此,當我想將士兵移動到另一個廣場時,我需要點擊當前的 廣場才能獲得GameSoldier,然後按下目標廣場。

所以我想要做的是將鼠標功能添加到BoardSquare類,以獲得正方形的屬性,如位置。有任何想法嗎?

+0

那麼,你已經花了一些思考。與WinForms取得聯繫,瞭解事件處理如何工作,您將獲得一個開始! – 2013-02-20 15:45:27

+0

聽起來像一個家庭作業。你試過什麼了?任何代碼片段?基本上,廣場的點擊事件應返回位置屬性及其內容。 – Sashenka 2013-02-20 15:45:31

回答

1

你可以將光標從EventArgs的座標被點擊的板時。要將這些座標轉換爲棋盤上的正方形,您必須從左上角到右下角佈置棋子,跨行並將它們存儲在索引列表或數組中。

X座標(在「磚」)隨後Math.Floor(X_Clicked/TileWidth)

和Y座標是Math.Floor(Y_Clicked/TileHeight)

例如,如果你的瓦片50個像素寬,50個像素高,並且用戶點擊在(329,186),這將是在瓷磚:

五十○分之三百二十九= 6.58 = 6

五十○分之一百八十六= 3,72 = 3

點擊(6,3)處的瓦片。將其轉換爲列表/數組中的索引:

x +(y * tiles_in_a_row)= 6 +(3 * 8)= 30,因此Tile [30]被點擊。

請記住,這是一個基於零的座標系,所以第一個圖塊位於(0,0)。

+0

謝謝,所有的遊戲都是由圖形繪製的。 所以我做了什麼,就是創建一個方形的課程,我想要做的是 是增加方形類的鼠標功能,所以用戶 就能按下它 – Elior 2013-02-22 09:59:11

0

你想要做的是爲你正在渲染的控件的MouseClick事件添加一個Eventhandler。 在該事件的EventArgs中,您將能夠檢索鼠標座標。 然後,您可以將該信息與控件本身的大小進行組合,以計算哪個方塊已被點擊。

下面是一些更多的信息:

Obtain Position/Button of mouse click on DoubleClick event

(特別是麋鹿的答案)

+0

感謝您的回答。 我沒有使用PictureBox控件..所有的遊戲都需要在圖形上繪製,圖形 – Elior 2013-02-20 15:52:17

+0

很抱歉,對於遲到的答案,我相信你已經知道了。只是爲了記錄,不管你在畫什麼樣的控制。他們都表現一樣。所以你可以直接在一個窗體上繪製,就像繪製到一個PictureBox一樣。 – b0wter 2013-04-30 13:13:33

1

有幾種方法可以解決這個問題,您的Boardquare課程可能會影響到簡單課程,因爲它會佔用重點。

當你點擊一個被佔用的板子廣場時,它會發生鼠標事件。它在板上的位置可以通過它的頂部/高度和左/寬來識別 然後可以將其傳遞給板上定義的BoardSquareSelected事件處理程序。 當您點擊一個未佔用的方形鼠標位置是x /平方寬度,y /平方高度 您需要多一點邏輯,第一次點擊被佔用,第二個不合法移動等。 您也可以查看拖放派生。但個人而言,我會擺脫板塊作爲一個組件。 如果棋盤上有一個8x8的正方形陣列,並且您使用Invalidate(rect)來避免任何更改時重繪整個事物,那麼您並不需要它。然後,所有你選擇的東西都​​完全由板級封裝。

+0

用戶可以選擇板子大小。它可以是4 X 4,8 X 8或10 X 10 這就是爲什麼我創建BoardSquare類 – Elior 2013-02-20 16:38:08

+0

這是董事會的財產。屏幕上的廣場有多大是董事會的財產。說它是方形的屬性意味着你可以在同一塊板上有不同大小的方格。除此之外,如果你堅持保持這一點,你就會碰到方方面面,期待更多。以這種方式想想,在您的應用程序中最多可減少100個組件 – 2013-02-20 20:36:43