用unicodes打印棋盘

时间:2018-06-17 10:02:45

标签: java unicode

我正在写国际象棋游戏,并希望从控制台版开始。起初我用简单的字符代表棋子,然后我意识到我可以使用unicodes。所以我做了

public void print(){
    System.out.print("   (#1)(#2)(#3)(#4)(#5)(#6)(#7)(#8)");
    for(int i = 0 ; i < 8; i++ ) {
        for (int j = 0; j < 8; j++) {
            if (j == 0) {
                System.out.println();
                System.out.print("(" + Character.toString((char) (i+65)) + ")");
            }
            if (!Board.getInstance().getTiles()[i][j].isOccupied()) {
                System.out.print("[ ]");
            } else {
                System.out.print("["+ PieceSymbolFactory
                        .getSymbol(Board.getInstance().getTiles()[i][j].getPiece()) + "]");
            }
        }
    }
}

static class PieceSymbolFactory {        
    private static final int whiteKing = 2654;      
    private static final int blackKing = 0x265A;        

    static char getSymbol(Piece piece) {    
        if(piece instanceof King){
            if(piece.getColor() == PieceColor.WHITE) {
                return (char)(Integer.parseInt(String.valueOf(whiteKing),16));
            } else {
                return (char)(Integer.parseInt(String.valueOf(blackKing)));
            }
        }
    }

不幸的是,空荡荡的田地对我不起作用 - 相反,我得到了类似的东西

董事会图片

enter image description here

如果我在

中再添加一个空格
System.out.print("[ ]");

那些空字段将比被占用字段宽。我可以在那里放置任何unicode,或者我可以做些什么来使占用和未占用的字段在控制台中具有相同的宽度?

编辑# 哎呀,我刚刚意识到列号的第一行也搞砸了:/

1 个答案:

答案 0 :(得分:0)

有多个whitespace variants in Unicode。在这种情况下,我会尝试使用em-space(0x2003)或em-quad(0x2001)而不是普通空间(0x0020)。