2017-11-10 1 views
0

보드를 2 차원 배열로 표현한 체스 게임을하고 있습니다. 그러나 체스 조각은 공간과는 다른 폭은, 그래서 내가 이런 식으로 인쇄하려고 할 때 그들은 난민 얻을 : 나는 다른 많은 시도했습니다동일한 문자 간격의 파이썬으로 2 차원 목록 인쇄

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

BTW, 당신은 그 함수의 몸체를'd = dict (zip ("TtLlHhDdKkPp_", "♖♜♗♝♘♞♕♛♔♚♙♟"))로 대체 할 수 있습니다; board in line : 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() 

그리고 코드는 다음과 같은 다른 레이아웃을 계속할 수 : 출력이

첫 번째

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


    ♖  

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

두 번째 레이아웃입니다

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()) 

끝에

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


     ♟  

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

promt에서는 정렬되어 있지만 여기 (html에서는) 보이지 않습니다. 아래에 그 이미지를 넣을 것입니다.

enter image description here

0

당신은 (는 넓은 열을 생산하기 때문에) 수평 탭 문자에 의지하지 않고 테이블 형식의 데이터를 제공하기 위해 노력하고 있습니다. 하지만 출력 장치의 공간과 체스 기호의 너비가 다르므로 공백을 사용하면 작동하지 않습니다. 이 글꼴이 모노 스페이스가 아닌 경우, 기본 글꼴에 체스 조각이 없기 때문에 디스플레이 장치가 다른 글꼴로 떨어질 가능성이 높습니다.이 차이가 너비 문제의 원인이됩니다.

숫자 너비를 포함하여 몇 가지 너비에는 특별 spaces이 있지만 (가능한 한 알 수있는 한) chess symbols에 대해 정의 된 특정 너비가 없습니다. 내 첫 번째 생각은 그들이 특히 넓은 공간과 결합 될 수 있다면,하지만 유니 코드는 공간을 결합하지 않는 것 같습니다. 여기에는 두 가지 기본 옵션이 있습니다. HTML 테이블과 같은이 태스크에 대한 레이아웃 시스템을 사용하거나 간격 및 체스 기호를 모두 포함하는 고정 폭 글꼴을 사용하십시오. 후자는 자신의 터미널에서 가장 쉽게 수행되거나 webfont를 사용하여 자신의 웹 페이지에서 요청할 수 있지만 개별 웹 브라우저를 포함하여 제어 할 수없는 곳이 많습니다. 특히 스택 오버플로는 chess.stackexchange.com에 자바 스크립트 체스 보드 렌더러 (instructions)가있는 것처럼 보이지만 마크 다운에서 테이블을 허용하지 않습니다.

또 다른 (못생긴) 해결 방법은 다른 서식 지정 기능을 사용하여 빈 공간에 체스 조각을 렌더링하는 것이지만 보이지 않는 색으로 채 웁니다. 이모티스처럼, 조각이 자신 만의 색을 가진 글꼴에서는 작동하지 않습니다. 또한 스크린 리더에게 혼란을 주거나 텍스트를 복사합니다.