[英]Java Unicode character widths
我試圖用Java編寫一個象棋游戲,該游戲將完全顯示在控制台中。 我為此使用Unicode字符,例如White Chess Queen U + 2655。 我的問題是我找不到與國際象棋棋子的寬度匹配的空白字符,所以我無法正確顯示棋盤。 看看下面的輸出,我將棋子從h2移到了h4:
8 ♜♞♝♛♚♝♞♜
7 ♟♟♟♟♟♟♟♟
6
5
4 ♙
3
2 ♙♙♙♙♙♙♙
1 ♖♘♗♕♔♗♘♖
a b c d e f g h
編輯:使用以下示例更容易指出問題:
♙♙♙♙♙♙♙♙
xxxxxxxx
iiiiiiii
||||||||
您會看到棋子的寬度比典當下的其他字符稍大。
在此網站上,棋子的寬度略大於標准字符的寬度。 在我的Eclipse控制台中,棋子的寬度略小於2個標准字符。
我想我要的是以下三件事之一:
感謝您提供的任何幫助或建議。
編輯:原來是consolas字體引起了我的問題。 Consolas展示的棋子寬度非常奇怪,大約為1.8個字符。 我將控制台的字體切換為幾種不同的等寬字體,直到找到一種可以正確調整棋子大小的字體。 有什么方法可以確保特定的寬度,而不管字體是什么?
終端(幾乎)始終使用等寬字體,因此空格字符與分段字符的寬度相同。
您的問題是您要渲染的板在各列之間留有間隔,但沒有在零件之間插入它們。
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
如果您不使用等寬字體,則片段的寬度將隨字體而變化。 它們可能與unicode空間之一匹配,可能是en空間( \
)或em空間( \
)。 任何解決方案都將特定於您的環境。 參考: unicode空格 。
編輯:我做了一些實驗。 在大多數字體中(尤其不是我的Helvetica tho'版本),國際象棋字形的寬度與em-quad相同( \
)。 您仍然會遇到列標簽問題。 我注意到,封閉的字母數字標志符號也與國際象棋棋子的寬度大致相同,因此您可以將列⒜-⒣
而不是ah
標記為(即\⒜-\⒣
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.