2009-12-01 6 views
1

그래서 XNA 라이브러리와 모든 것을 사용하여 모든 조각으로 구성된 2D 체스 게임 보드를 만들었습니다. 그러나 나는 그들을 클릭하면 조각을 움직이는 방법을 모르겠습니다. 이것이 기사 조각 중 하나의 논리에 대한 것입니다.XNA의 체스 로직

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

어떻게 조각을 선택하여 움직일 수 있습니까?

답변

3

저는 XNA에 익숙하지 않지만 몇 가지 제안을하겠습니다. 예를 들어, wknight1과 같이 자신의 변수에두기보다는 2D 배열이나 그와 비슷한 모양으로 조각을 유지하고 싶을 것입니다. 그렇지 않으면 사용자가 클릭 할 때마다 모든 변수를 확인해야합니다.

사용자가 조각을 클릭하여 선택한 다음 비어있는 사각형을 클릭하여 이동하는 시스템이 필요하다고 가정합니다. 여기에 같은 일부 의사 코드 (나는 여기에 빈 사각형을 의미하는 널 보드 위치를 사용하고 있습니다)입니다 :

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 같은 추가 조건을 추가 할 수 있습니다, finishy) 플레이어가 자신의 작품을 움직이고 있는지 확인하고 합법적 인 체스 이동 등을 할 수 있는지 확인합니다. 좀 더 우아하고 OO (및/또는 이벤트 중심)로 만들 수도 있습니다 (클릭 앤 드래그 등)하지만 기본 논리를 설명하기 쉽도록 유지하고 있습니다.

+0

모든 조각을 담을 수있는 2D 배열을 어떻게 설정합니까? 나는 그들 모두를위한 스프라이트 이미지를 가지고있다. – Sankar

+2

배열은 실제로 조각의 이미지를 보유하지 않으며 조각에 대한 논리적 참조 ("white_knight"와 같은 문자열 또는 사용자 정의 Piece 객체 또는 숫자 만 포함)를 보유합니다. 그런 다음 보드 배열을보고 그래픽 보드를 렌더링하는 방법을 알 수 있습니다. 기본적으로 보드 배열은 게임 상태의 논리적 * 모델 *이며 그래픽 디스플레이는 해당 gamestate의 *보기 *입니다. 모델을 섞어서 너무 많이 보지 않도록해야합니다. 별도로 유지하면 나중에 변경하기가 쉬울 것입니다. – Ryan