【问题标题】:Printing chess board with unicodes用 unicode 打印棋盘
【发布时间】:2018-06-17 10:02:44
【问题描述】:

我正在编写国际象棋游戏,并想从控制台版本开始。起初我使用简单的字符来表示棋子,然后我意识到我可以使用 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)));
            }
        }
    }

不幸的是,空字段不适合我 - 相反我得到了这样的东西

董事会图片

如果我再添加一个空格

System.out.print("[ ]");

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

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

【问题讨论】:

标签: java unicode


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 2022-01-09
    • 2013-11-21
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多