2016-10-08 3 views
0

유니티를 사용하여 2D 체스 게임을 만들고 있습니다.알고리즘 C# 유니티 체스 게임

조각이이 위치로 이동할 수 있는지 여부를 알려주는 코드를 작성하고 있습니다.

여기에 내가 어떻게했는지에 대한 설명입니다 :

  • 보드를 나타내는 "벽지"가있다.
  • "바탕 화면"의 각 사각형에 나는 비활성화 된 메쉬 렌더러가있는 다른 사각형을 놓습니다.
  • 플레이어가 사각형을 선택하면이 위치에 조각이 있으면 그 조각이 갈 수있는 모든 사각형의 메시 렌더러를 활성화합니다.
  • 모든 사각형은 가능한 위치를 결정하는 데 사용되는 간단한 배열로 저장됩니다.

폰이 있으면 문제없이 완벽하게 작동하지만 루크 나 기사가 있으면 mouvement가 더 복잡해지고 문제가 발생합니다.

여기 기사와 함께 작업 해 보겠습니다. 이 보드의 중앙에있을 때

, 문제 : 나는 보드의 측면에있을 때 http://prntscr.com/crcogo

은 물론, 직접 확인하지 그러나 다음은

http://prntscr.com/crcozu 코드입니다 :

case "White_Knight(Clone)_0": 
       int Index_Knight_1 = Array.IndexOf(Board, Square_Selected); 
       // Les cases en + 
       if (Index_Knight_1 + 6 <= 64) 
       { 
        Board[Index_Knight_1 + 6].GetComponent<MeshRenderer>().enabled = true; 
       } 
       if (Index_Knight_1 + 10 <= 64) 
       { 
        Board[Index_Knight_1 + 10].GetComponent<MeshRenderer>().enabled = true; 
       } 
       if (Index_Knight_1 + 15 <= 64) 
       { 
        Board[Index_Knight_1 + 15].GetComponent<MeshRenderer>().enabled = true; 
       } 
       if (Index_Knight_1 + 17 <= 64) 
       { 
        Board[Index_Knight_1 + 17].GetComponent<MeshRenderer>().enabled = true; 
       } 
       // les cases en - 
       if (Index_Knight_1 - 6 >= 0) 
       { 
        Board[Index_Knight_1 - 6].GetComponent<MeshRenderer>().enabled = true; 
       } 
       if (Index_Knight_1 - 10 >= 0) 
       { 
        Board[Index_Knight_1 - 10].GetComponent<MeshRenderer>().enabled = true; 
       } 
       if (Index_Knight_1 - 15 >= 0) 
       { 
        Board[Index_Knight_1 - 15].GetComponent<MeshRenderer>().enabled = true; 
       } 
       if (Index_Knight_1 - 17 >= 0) 
       { 
        Board[Index_Knight_1 - 17].GetComponent<MeshRenderer>().enabled = true; 
       } 

나는이 작업을 수행하는 올바른 방법을 사용하지 않는 thnik,하지만 난 거기에 또는이 코드의 조각을 복용하지 않고 자신을 스크립트 그것을 싶습니다. 이 경우

, 나는 팔의 배수를 사용하는 방법에 대한 생각,하지만 난 여기 갇혀 있어요 : D

누군가가 나에게 충고를 줄 수 있을까요?

감사합니다.

호, 조건에서 "64"가 아니어야한다는 것을 알고 있지만, 63 번은 그냥 보았습니다.

+0

왜 2 차원 좌표를 사용하지 않고 앞뒤로 변환합니까? – Bijan

+0

나는 한 차원에서 2 차원 배열로 바뀌 었습니다. 하지만 배열에서 특정 요소의 위치를 ​​찾는 방법을 찾을 수 없습니다. (objets을 찾고 있습니다) – Andromelus

+1

2D 배열이 반드시 있어야합니다 : Board [Index_Knight_X + 2, Index_Knight_Y - 1] .GetComponent (). enabled = true; Index_Knight_X + 2 또는 Index_Knight_Y - 1]이 음수가 아닌지 확인하려면 배열의 한계를 확인해야합니다. – Absinthe

답변

0

나는 Absinte에 동의합니다. 저는 7x7 보드를 사용하는 유사한 게임을하고 있습니다. 2 차원 배열로 작업하는 것이 훨씬 쉽습니다. 내 작품 중 하나가 선택되면, 내가 할 수있는 동작 목록을 반복합니다. 이는 작품이 가운데에 있다고 가정하고 +/- 오프셋입니다. 폰의 경우 x, y 오프셋은 0, + 1, 0, + 2 (첫 번째 이동 만 가능), + 1, +1, -1, + 1 (마지막 두 개는 캡처하는 경우)입니다.

각각을 현재 조각의 x, y 위치에 적용하고 x와 y가 모두 0과 6 사이에 있으면 조각을 움직일 수있는 가능한 위치로 표시합니다.