2017-11-28 16 views
0

전적으로 콘솔에 표시되는 체스 게임을 Java로 프로그래밍하려고합니다. 화이트 체스 여왕 U + 2655와 같은 유니 코드 문자를 사용하고 있습니다. 내 문제는 내가 제대로 보드를 표시 할 수없는 체스 조각의 너비와 일치하는 공백 문자를 찾을 수 없다는 것입니다. 아래에있는 내 출력에서 ​​봐, 나는 H4에 H2에서 전당포를 이동 :자바 유니 코드 글자 너비

8 ♜♞♝♛♚♝♞♜ 
7 ♟♟♟♟♟♟♟♟ 
6     
5     
4    ♙ 
3     
2 ♙♙♙♙♙♙♙ 
1 ♖♘♗♕♔♗♘♖ 
    a b c d e f g h 

편집 :

♙♙♙♙♙♙♙♙ 
xxxxxxxx 
iiiiiiii 
|||||||| 

당신은 것을 볼 수 있습니다 : 문제는 다음과 같은 예제를 지적하는 것이 더 쉽습니다 체스 조각은 폰 아래의 다른 캐릭터보다 폭이 약간 큽니다.

이 웹 사이트에서는 체스 조각이 표준 문자의 너비보다 약간 더 넓습니다. Eclipse의 내 콘솔에서 체스 조각의 너비는 2 표준 문자보다 약간 작습니다.

는 내가 세 가지 중 하나를 요청하고 가정 :

  • 유니 코드 체스 조각의 폭과 일치하는 공백 문자.
  • 문자 또는 문자열의 너비를 반환하는 Java 메서드
  • 문자 또는 문자열의 너비를 임의의 값으로 설정할 수있는 Java 메서드입니다.

도움이나 조언을 제공해 주셔서 감사합니다.

편집 : 문제를 일으키는 것은 consolas 글꼴이었습니다. Consolas는 폭이 약 1.8자인 매우 이상한 너비의 체스 조각을 표시합니다. 저는 체스 조각의 크기를 올바르게 결정할 때까지 제 콘솔의 글꼴을 모노 스페이스 글꼴로 바꿨습니다. 글꼴과 관계없이 특정 너비를 유지할 수있는 방법이 있습니까?

+2

당신이 찾고있는 것은 그 필수 속성을 가진 ** 글꼴 **, 특히 ** 모노 스페이스 ** 것들입니다.그러나 폰트와 같은 개념이 없기 때문에 콘솔에서이 작업을 수행하는 데 운이 좋지 않을 수도 있습니다. 각 사용자는 그가 사용하고자하는 글꼴을 지정할 수 있습니다. – luk2302

+0

인쇄 논리에 오류가 있습니다. 열 사이에 공백이 있지만 조각 사이에 공백을 넣지는 않습니다. – teppic

+0

@teppic 체스 조각의 폭에 관해서 말했기 때문에 이클립스 콘솔에는 공백이 필요합니다. 그들은 내 콘솔에서 1.9 자 정도의 크기입니다. – the0dark0one

답변

2

터미널 (거의)은 항상 고정 폭 글꼴을 사용하므로 공백 문자는 조각 문자와 동일한 너비입니다.

문제는 열 사이에 공백이있는 보드를 렌더링하고 있지만 조각 사이에 삽입하지 않는 것입니다.

public class TextChess { 
    public static void main(String[] args) { 
     char[][] board = new char[][] { 
      {'♜', '♞', '♝', '♛', '♚', '♝', '♞', '♜'}, 
      {'♟', '♟', '♟', '♟', '♟', '♟', '♟', '♟'}, 
      {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, 
      {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, 
      {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, 
      {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, 
      {'♙', '♙', '♙', '♙', '♙', '♙', '♙', '♙'}, 
      {'♖', '♘', '♗', '♕', '♔', '♗', '♘', '♖'} 
     }; 

     for (int i = 0; i < board.length; i++) { 
      char[] pieces = board[i]; 
      System.out.print("" + (8 - i) + " "); 
      for (char piece : pieces) { 
       System.out.print(piece + " "); // you're missing this space 
      } 
      System.out.println(); 
     } 
     System.out.println(" a b c d e f g h"); 
    } 
} 

인쇄 :

8 ♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜ 
7 ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟ 
6     
5     
4     
3     
2 ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙ 
1 ♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖ 
    a b c d e f g h 

당신이 조각의 폭이 글꼴에 따라 변화하는 고정 폭 글꼴을 사용하지 않는 경우. 그들은 일 수도 있고은 유니 코드 공간 중 하나 (en- 공백 (\u2002) 또는 em- 공백 (\u2003))와 일치 할 수 있습니다. 모든 솔루션은 사용자 환경에만 해당됩니다. Ref : unicode spaces.

편집 : 몇 가지 실험을했습니다. 대부분의 글꼴 (특히 Helvetica tho '버전이 아님)에서 체스 글립은 em-quad (\u2001)와 동일한 너비입니다. 열 라벨 문제가 계속 발생합니다. 동봉 된 영숫자 글리프는 대부분 체스 조각과 동일한 너비이기 때문에 (즉 \u249C-\u24A3) 대신 ⒜-⒣ 열에 라벨을 지정할 수 있습니다.

+0

체스 조각의 너비에 관해서 말했기 때문에 이클립스 콘솔에는 공백이 필요합니다. 그들은 내 콘솔에서 약 1.9 자 정도입니다. 나는 공백이 Stackoverflow에 출력을 고칠 것이라고 인식하지만, 그림을 첨부 할 수 있다면, 내가 무슨 뜻인지 알 수있을 것이다. – the0dark0one

+0

'\ u2002' 또는'\ u2003'을 시도해 볼 수 있습니다. 추가 옵션은 http://jkorpela.fi/chars/spaces.html을 참조하십시오. 작동하는 컴퓨터를 찾으면 환경 외부에서 작동하지 않을 것입니다. – teppic

+0

'\ u2001'이 (가) 작동해야합니다. 답을 편집하십시오. – teppic