저는 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 (및/또는 이벤트 중심)로 만들 수도 있습니다 (클릭 앤 드래그 등)하지만 기본 논리를 설명하기 쉽도록 유지하고 있습니다.
모든 조각을 담을 수있는 2D 배열을 어떻게 설정합니까? 나는 그들 모두를위한 스프라이트 이미지를 가지고있다. – Sankar
배열은 실제로 조각의 이미지를 보유하지 않으며 조각에 대한 논리적 참조 ("white_knight"와 같은 문자열 또는 사용자 정의 Piece 객체 또는 숫자 만 포함)를 보유합니다. 그런 다음 보드 배열을보고 그래픽 보드를 렌더링하는 방법을 알 수 있습니다. 기본적으로 보드 배열은 게임 상태의 논리적 * 모델 *이며 그래픽 디스플레이는 해당 gamestate의 *보기 *입니다. 모델을 섞어서 너무 많이 보지 않도록해야합니다. 별도로 유지하면 나중에 변경하기가 쉬울 것입니다. – Ryan