2017-11-10 7 views
0

ボードが2次元配列で表されるチェスゲームをしています。私はこのようにそれを印刷しようとすると、それらがずれますので、しかし、チェスの駒は、スペースとは異なる幅である:ここでは等しい文字間隔の2次元リストを表示するPython

♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖ 
♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙ 



    ♟   
♟ ♟ ♟ ♟ ♟ ♟ ♟ 
♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜ 

は、印刷機能である:

def print_board(): 
    y = ["♖", "♜", "♗", "♝", "♘", "♞", "♕", "♛", "♔","♚", "♙", "♟"," "] 
    for i in range(8): 
     tempListe = "".join(board[i]) 
     z=0 
     for x in ["T","t","L","l","H","h","D","d","K","k","P","p","_"]: 
      if x in tempListe: 
       tempListe = tempListe.replace(x,y[z]) 
      z+=1 
     for j in range(8): 
      print("{0:2}".format(tempListe[j]),end="") 
     print("") 
print_board() 

私は多くの異なっを試してみましたしかし、すべてが同じように終わるようです。ピース間のスペースが大きくなりすぎないように、これを修正するにはどうすればいいですか?

+0

再生できません。また、スペースの幅は、「適切な」コンソールフォントの任意の文字の幅と同じにする必要があります。 Arialなどを使用していないことを確認してください。 –

+0

ところで、あなたはその関数の本体を 'd = dict(zip(" TtLlHhDdKkPp_ "、"♖♜♗♝♘♞♕♛♔♚♙♟ "))に置き換えることができます。ボード上の行:print( ".join(map(d.get、line)))' ' –

答えて

1
T,t,L,l,H,h,D,d,K,k,P,p,_= "♖♜♗♝♘♞♕♛♔♚♙♟ " 


board = [ 
[T,L,H,D,K,H,L,T], 
[P,P,P,P,P,P,P,P], 
[_,_,_,_,_,_,_,_], 
[_,_,_,_,_,_,_,_], 
[_,_,_,_,_,_,_,_], 
[_,_,_,_,_,_,_,_], 
[p,p,p,p,p,p,p,p], 
[t,l,h,d,k,h,l,t] 
] 

board2 = [ 
T,L,H,D,K,H,L,T, 
P,P,P,P,P,P,P,P, 
_,_,_,_,_,_,_,_, 
_,_,_,_,_,_,_,_, 
_,_,_,_,_,_,_,_, 
_,_,_,_,_,_,_,_, 
p,p,p,p,p,p,p,p, 
t,l,h,d,k,h,l,t 
] 

def printBoard(): 
    for e in board: 
     for ee in e: 
      print(ee, end='') 
     print() 

、コードは、このような別のレイアウトを継続できます。最後に出力が最初

♖♗♘♕♔♘♗♖ 
♙♙♙♙♙♙♙♙ 


    ♖  

♟♟♟♟♟♟♟♟ 
♜♝♞♛♚♞♝♜ 

第2のレイアウト

この

ある

def printBoard2(): 
    b = "{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\ 
     "{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\ 
     "{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\ 
     "{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\ 
     "{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\ 
     "{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\ 
     "{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}\n"\ 
     "{:2}{:2}{:2}{:2}{:2}{:2}{:2}{:2}".format(*board2) 
    return b 

board2[36] = p 
board[4][3] = T 
printBoard() 

print("\n\n") 

print(printBoard2()) 

♖ ♗ ♘ ♕ ♔ ♘ ♗ ♖ 
♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙ 


     ♟  

♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟ 
♜ ♝ ♞ ♛ ♚ ♞ ♝ ♜ 

プロム上では一直線に見えますが、ここでは(htmlで)表示されません。 私はそれを下に置くでしょう。

enter image description here

0

(それはかなり広い列を生成するので)あなたは、水平タブ文字に頼ることなく、表形式のデータを提示しようとしています。しかし、あなたの出力デバイスは、スペースとチェスシンボルの幅が異なりますので、スペースを使用することはできません。これがモノスペースのテキストであれば、ディスプレイデバイスは他のフォントに落ちている可能性が最も高いのは、プライマリフォントにチェスの部分がないためで、この違いが幅の問題の原因になるからです。

数字の幅を含むいくつかの幅のために特別なspacesがありますが(私が知る限り)chess symbolsのために定義された特定の幅はありません。私の最初の考えは、特に広いスペースと組み合わせることができればいいのですが、Unicodeはスペースを組み合わせていないようです。これには2つの基本的なオプションがあります:このタスクにHTMLテーブルなどのレイアウトシステムを使用するか、スペーシングとチェスの両方の記号を含むモノスペースフォントを使用します。後者は、自分の端末で最も簡単に実行できます。また、webfontを使用して自分のWebページでリクエストすることもできますが、個々のWebブラウザを含め、制御できない場所がたくさんあります。 chess.stackexchange.comにはJavaScriptのチェス盤レンダラー(instructions)があるようですが、特にスタックオーバーフローはMarkdownのテーブルを許可しません。

別の(醜い)回避策は、他の書式設定機能を使用して空のスペースにチェスを描画し、見えないように着色します。 emojisのように、作品が独自の色を持つフォントでは機能しません。また、スクリーンリーダーに大混乱やテキストをコピーすることもあります。

関連する問題