2009-12-01 68 views
1

因此,我創建了一個2D棋牌遊戲板,其中使用XNA庫和所有棋子。但是,如果我點擊它們,我不知道如何使這些部分移動。這是我對其中一個騎士部分的邏輯所具有的。XNA中的國際象棋邏輯

if(mouse.LeftButton == ButtonState.Pressed 
     && mouse.X == wknight1.position.X 
     && mouse.Y == wknight1.position.Y) 
{ 
} 

我該如何選擇一塊,然後讓它移動?

回答

3

我對XNA並不熟悉,但我會提出一些建議。首先,您可能想要將這些部分保留在二維數組中或類似部分,而不是將它們放在自己的變量中(如wknight1)。否則,每次用戶點擊時都必須檢查每個變量。

我假設你想要一個系統,用戶點擊一個片段來選擇它,然後點擊一個空的方塊在那裏移動它。下面是類似的東西,一些僞代碼(我用一個空板的位置在這裏意味着空方):

if(mouse.LeftButton == ButtonState.Pressed 
    && board[mouse.x][mouse.y] != null && pieceSelected == null) 
{ 
    pieceSelected = board[mouse.x][mouse.y]; 
    selectedX = mouse.x; 
    selectedY = mouse.y 
} 
else if (mouse.LeftButton == ButtonState.Pressed 
    && board[mouse.x][mouse.y] == null && pieceSelected != null) 
{ 
    board[selectedX][selectedY] == null; 
    board[mouse.x][mouse.y] = pieceSelected; 
    pieceSelected = null; 
} 

您可以進一步添加條件像isAValidMove(pieceType,運行startx,starty,finishx,完成)在那裏你檢查玩家試圖移動他們自己的棋子,這是一個合法的國際象棋移動等等。你可能也可以使這更優雅和麪向對象(和/或事件驅動)(並添加點擊和拖動等等),但我保持簡單來說明基本邏輯。

+0

我該如何設置2d數組來保存所有的塊?我有他們所有的精靈圖像。 – Sankar 2009-12-02 07:03:46

+2

這個數組實際上並不包含碎片或任何其他圖像,它保存了對碎片的邏輯引用(無論是像「white_knight」還是自定義Piece對象,或者甚至只是一個數字)。然後,您可以通過查看電路板陣列來了解如何渲染圖形板。基本上,棋盤陣列是遊戲狀態的邏輯*模型*,圖形顯示是該遊戲狀態的*視圖*。你應該儘量避免混淆模型和查看太多 - 將它們分開將使以後改變事情變得更容易。 – Ryan 2009-12-02 22:56:13