2017-11-28 35 views
0

コンソールで完全に表示されるJavaでチェスゲームをプログラミングしようとしています。私はWhite Chess Queen U + 2655のようなUnicode文字を使用しています。私の問題は、ボードを正しく表示することができないため、チェスの幅に一致する空白文字が見つからないということです。以下の私の出力を見て、私はH4にH2からのポーンを移動:JavaのUnicode文字の幅

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

編集:

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

は、あなたがそれを見ることができます。問題は、次の例を指摘する方が簡単ですチェスの部分は、ポーンの下の他の文字よりも幅がわずかに大きい。

このウェブサイトでは、チェスのピースは標準文字の幅よりわずかに大きいです。 Eclipseの私のコンソールでは、チェスの幅は2標準文字よりわずかに狭いです。

私は3つのいずれかを要求していたとします

  • Unicodeのチェスの駒の幅と一致する空白文字を。
  • 文字または文字列の幅を返すJavaメソッド
  • 文字または文字列の幅を任意の値に設定できるJavaメソッド。

ご協力いただきありがとうございます。

編集:それは私に問題を引き起こしていたconsolasフォントでした。 Consolasは、約1.8文字幅の非常に奇妙な幅のチェスを表示します。私はチェスの大きさを正確に合わせたものが見つかるまで、私のコンソールのフォントをいくつかの異なるモノスペースのフォントに切り替えました。フォントに関係なく、特定の幅を確保する方法はありますか?

+2

あなたが探しているものは、これらの必須プロパティ、特に**モノスペース**のものを含む**フォント**です。しかし、このようなフォントのコンセプトがないので、コンソールでこれを行うのは幸運ではないかもしれません。それぞれのユーザーは、使用したいフォントを指定することができます。 – luk2302

+0

印刷ロジックにエラーがあります。あなたはあなたの列の間にスペースを持っていますが、あなたはあなたの作品の間にそれらを入れていません。 – teppic

+0

@teppicチェスの幅について言いましたので、Eclipseコンソールにスペースが必要です。彼らは私のコンソールで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 

あなたは等幅フォントを使用していない場合は作品の幅はフォントによって異なります。それらはかもしれませんはユニコードスペースの1つ、おそらくenスペース(\u2002)またはemスペース(\u2003)と一致します。どのような解決策も、お客様の環境に固有のものです。 Ref:unicode spaces

編集:私はいくつかの実験を行いました。ほとんどのフォント(Helvetica tho 'の私のバージョンではない)では、チェスのグリフはem-quad(\u2001)と同じ幅です。それでも列ラベルの問題にぶつかります。囲まれた英数字グリフはチェスの幅とほぼ同じ幅であることに気付いたので、a-h(つまり\u249C-\u24A3)ではなく、⒜-⒣という列にラベルを付けることができました。

+0

チェスの幅について私が言ったことから、Eclipseコンソールにはスペースが必要です。彼らは私のコンソールで約1.9文字幅です。私はスペースがStackoverflowでここに出力を修正することを認識しますが、私は画像を添付することができれば、あなたは私が意味するものを参照してください。 – the0dark0one

+0

'\ u2002'か' \ u2003'を試してみることができます。その他のオプションについては、http://jkorpela.fi/chars/spaces.htmlを参照してください。あなたが働いているものを見つけたら、あなたの環境の外で働くことはまずありません。 – teppic

+0

'\ u2001'が動作するはずです。答えの編集を参照してください。 – teppic