2013-10-22 59 views
0

我想知道用字典打印控制檯國際象棋棋盤的最佳pythonic方法是什麼。Pythonic在控制檯上打印國際象棋棋盤的方法

我應該使用列表嗎?但如果他們在某一排上沒有棋子,會發生什麼?

編輯: Exemple

+0

控制檯棋盤是什麼樣的? – Kevin

+0

類似的東西http://a.fsdn.com/con/app/proj/conchess/screenshots/102810.jpg – SKTLZ

+0

這將有助於看到你的字典。馴鹿的答案是完全正確的,嵌套列表將是一個更好的數據結構,但更全面的答案略有取決於你目前代表*件*。 – lvc

回答

4

在國際象棋程序(通常用於計算最佳移動,解決謎語等)內部使用10×10板,其中可見和可播放板使用中間8×8場。 (邊距有助於簡化代碼。)爲了簡化內存管理,通常使用線性內存來存儲這些內容,即100個領域。然後使用board[(y+1) * 10 + (x+1)]計算板的場的位置,其中x,y在0..7的範圍內。 (由board = [ 0 ] * 100初始化。)

所以你可能想要使用它,以防萬一你的程序後來應該擴展到也計算移動或保持兼容的庫這樣做。

至於顯卡,我建議使用此板:

 A  B  C  D  E  F  G  H 
    ------- ------- ------- ------- ------- ------- ------- ------- 
| @[email protected] | %~b | [email protected] | \o*o/ | __+__ | [email protected] | %~b | @[email protected] | 
8| @@@ | `'dX | @@@ | @@@ | `@@@' | @@@ | `'dX | @@@ |8 
| [email protected]@@b | [email protected]@b | ./A\. | [email protected]@@b | [email protected]@@b | ./A\. | [email protected]@b | [email protected]@@b | 
    ------- ------- ------- ------- ------- ------- ------- ------- 
| _ | _ | _ | _ | _ | _ | _ | _ | 
7| (@) | (@) | (@) | (@) | (@) | (@) | (@) | (@) |7 
| [email protected] | [email protected] | [email protected] | [email protected] | [email protected] | [email protected] | [email protected] | [email protected] | 
    ------- ------- ------- ------- ------- ------- ------- ------- 
|  | . . . |  | . . . |  | . . . |  | . . . | 
6|  | . . . |  | . . . |  | . . . |  | . . . |6 
|  | . . . |  | . . . |  | . . . |  | . . . | 
    ------- ------- ------- ------- ------- ------- ------- ------- 
| . . . |  | . . . |  | . . . |  | . . . |  | 
5| . . . |  | . . . |  | . . . |  | . . . |  |5 
| . . . |  | . . . |  | . . . |  | . . . |  | 
    ------- ------- ------- ------- ------- ------- ------- ------- 
|  | . . . |  | . . . |  | . . . |  | . . . | 
4|  | . . . |  | . . . |  | . . . |  | . . . |4 
|  | . . . |  | . . . |  | . . . |  | . . . | 
    ------- ------- ------- ------- ------- ------- ------- ------- 
| . . . |  | . . . |  | . . . |  | . . . |  | 
3| . . . |  | . . . |  | . . . |  | . . . |  |3 
| . . . |  | . . . |  | . . . |  | . . . |  | 
    ------- ------- ------- ------- ------- ------- ------- ------- 
| _ | _ | _ | _ | _ | _ | _ | _ | 
2| () | () | () | () | () | () | () | () |2 
| /_\ | /_\ | /_\ | /_\ | /_\ | /_\ | /_\ | /_\ | 
    ------- ------- ------- ------- ------- ------- ------- ------- 
| [___] | %~\ | .O. | \o^o/ | __+__ | .O. | %~\ | [___] | 
1| [ ] | `')( | \/| [ ] | `. .' | \/| `')( | [ ] |1 
| /___\ | <__> | /_\ | /___\ | /___\ | /_\ | <__> | /___\ | 
    ------- ------- ------- ------- ------- ------- ------- ------- 
    A  B  C  D  E  F  G  H 

我在90年代做這些ASCII圖形回來Tubmud。隨意使用它們。

+0

感謝您的提示10x10板是一個偉大的想法,感謝分享! – SKTLZ

+1

HAHAHAHA no waaaaaaaaaaaaaaaaaaay that board is aaaaaaawsome!我想爲此加一個175:D –

+1

@DamianLattenero其實,你可以在這個問題上給予獎勵,並獎勵我點;-) - 只是在開玩笑;-) – Alfe

2

我會用這個問題嵌套列表。在國際象棋中,你有一個8×8的網格,它可以很容易地通過Python列表理解魔法建立。

網格= [[」,「] * 8有效範圍內的未使用的(8)]

您比可以訪問和通過索引的陣列改變的元素:

grid[0][0] = 'T' 

可以使用小寫白色和大寫字母用於黑色數字的字母,以及它們的第一個字母,例如黑色女王的「Q」。

字典對我來說看起來並不好,因爲很難進行操作來檢查有效的移動或某物,因爲您沒有其他方法通過迭代所有值來確定圖形的位置。網格是最自然的。

+0

小心將事物分配給已經相乘的「列表」;它將使用相同的實例,因此將「T」放在整行上。 – akaIDIOT

+0

@akaIDIOT儘管注意到這個問題*是由馴鹿的答案避免的 - 這裏淺拷貝的唯一東西是(不可變的)字符串。 – lvc

+0

我可以告訴你,我以前試過,它只有一個'T'。 – reindeer