2014-11-20 3 views
0

저는 C#의 초보자입니다.2 차원 배열을 인수로 사용하여 함수를 작성하는 방법은 무엇입니까?

내가 "보드"라는 2 차원 배열을 가지고

short[,] board = new short[8,8]; 

그리고 나는 흰색 체스 조각 광장에있는 경우 "화이트"를 반환 "컬러"라는 함수를 사용하고 [내가, j], 검은 색 체스 조각이 사각형 [i, j]에 있으면 "검은 색", 사각형 [i, j]이 비어 있으면 "없음"이됩니다.

if(color[board[i,j]]==White) 
{ 
    do something 
} 

static string color(short[,,,,] t) 
     { 
      string Color; 

      if(t[m,n]==X) 
      { 
       Color=None; 
      } 

      if(t[m,n]==WP || t[m,n]==WN || t[m,n]==WB || t[m,n]==WR || t[m,n]==WQ || t[m,n]==WK) 
      { 
       Color=White; 
      } 

      if(t[m,n]==BP || t[m,n]==BN || t[m,n]==BB || t[m,n]==BR || t[m,n]==BQ || t[m,n]==BK) 
      { 
       Color=Black; 
      } 

      return Color; 
     } 

X, WP는 BP가, WN은, BN은, 등등 ..., 앞서 선언 단지 일을하고 그 체스 조각을 나타냅니다 : X = 아무것도 WP = 흰색 전당포, BP = 블랙 폰, WN = 흰색 kNight, BN = 검정 kNight 등 ...

그러나 색상 기능을 쓰는 방법을 모르겠습니다. 변수 mn을 어디에 선언해야합니까? 변수 i와 j에 각각 대응시키기를 원합니다.

그리고 Main에서 함수를 호출하는 방법조차 잘 모르겠습니다. color[board[i,j]] 또는 color[board, i, j]이나 다른 것을 쓰나요?

답변

1

이 문제를 단순화하려면 색상 방법의 서명을 변경해야합니다. 난 당신이

if (Color(board[i][j]) == "White") 
{ 
    //Do stuff 
} 

내가주의 할 그냥 몇 가지 여분의 것을 사용하는 것이이

public static string Color(short piece) 
{ 
    string color = String.Empty; 

    //Because we are passing in the short array value we don't 
    //need to get it from the array we can just use it eg: 
    if(piece == WP) 
     color = "White"; 

    //Your other if statements go here 
    return color; 
} 

그런 다음 메소드를 호출 할 것, 방법에 대한 C#을 명명 규칙은 대문자와 함께 시작하는 당신의 ENUM을 사용하여 짧은 상수보다는 조각을 나타내는 경우 코드가 더 좋을 수 있습니다.

편집 : 당신이 ENUM을 사용한다면

그것의, 각 조각은 그와 관련된 명시 적 값이 없기 때문에이 더 나은 솔루션이

enum Pieces { WP, WN, WB /* etc... */ } 

과 같을 것 모두 자동으로 완료됩니다. 또한 모든 조각을 설명하는 수업 시작시 10 줄의 줄이 없기 때문에 훨씬 더 깔끔합니다. 더 짧고 간결합니다.

+0

답변 해 주셔서 감사합니다. 하지만 "ENUM을 사용하여 조각을 표현하십시오"에 대해 자세히 설명해 주시겠습니까? (나는 내 ​​프로그램을 쓰기 시작하기 전에 문자열을 사용하거나 체스 조각에 반바지를 사용하는 것을 망설 였다는 것을 인정해야한다.)이 뜻인가요? : 열거 형 : int {X, WP, WN, WB, WR, WQ, WK, BP, BN, BB, BR, BQ, BK}; 짧은 상수보다는 ENUM을 사용하는 것이 왜 더 좋은가? – Sargas

+0

환영합니다. 게시판을 편집하여 열거 형에 대한 의미를 설명했습니다. – JordanW

0

과 같이 그 일을보십시오 :

static string color(short[,] t, int m, int n) 
{ 
    var colors = new Dictionary<string, short[]>() 
    { 
     { None, new [] { X } }, 
     { White, new [] { WP, WN, WB, WR, WQ, WK } }, 
     { Black, new [] { BP, BN, BB, BR, BQ, BK } }, 
    }; 

    return 
     colors 
      .Where(x => x.Value.Contains(t[m, n])) 
      .Select(x => x.Key) 
      .FirstOrDefault(); 
} 

NB를 : 나는 None, White, & Black 당신이 문자열 리터럴로를 의미하는 경우 그렇지 않으면 큰 따옴표에있을 필요가 거라고 변수가 있다고 가정합니다.

관련 문제