0

我想知道使用字典打印控制台棋盘的最佳 Python 方法是什么。

我应该使用 list 吗?但是如果他们在某一行的棋盘上没有棋子怎么办?

编辑 : 示例

4

2 回答 2

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
  ------- ------- ------- ------- ------- ------- ------- -------
 | @___@ |  %~b  |  .@.  | \o*o/ | __+__ |  .@.  |  %~b  | @___@ |
8|  @@@  | `'dX  |  @@@  |  @@@  | `@@@' |  @@@  | `'dX  |  @@@  |8
 | d@@@b |  d@@b | ./A\. | d@@@b | d@@@b | ./A\. |  d@@b | d@@@b |
  ------- ------- ------- ------- ------- ------- ------- -------
 |   _   |   _   |   _   |   _   |   _   |   _   |   _   |   _   |
7|  (@)  |  (@)  |  (@)  |  (@)  |  (@)  |  (@)  |  (@)  |  (@)  |7
 |  d@b  |  d@b  |  d@b  |  d@b  |  d@b  |  d@b  |  d@b  |  d@b  |
  ------- ------- ------- ------- ------- ------- ------- -------
 |       | . . . |       | . . . |       | . . . |       | . . . |
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 年代为Tubmud制作了这些 ASCII 图形。随意使用它们。

于 2013-10-22T12:42:38.273 回答
2

我会使用嵌套列表来解决这个问题。在国际象棋中,您有一个 8x8 网格,可以通过 python 列表理解魔术轻松构建。

grid = [ [" "] * 8 表示范围内未使用 (8)]

您可以通过索引数组来访问和更改元素:

grid[0][0] = 'T'

您可以将小写字母用于白色,将大写字母用于黑色数字,并将它们的第一个字母左右用于那种,例如“Q”代表黑色皇后。

字典对我来说看起来并不好,因为很难进行检查有效移动或某事的操作,因为您没有其他方法可以通过迭代所有值来确定图形的位置。网格是最自然的。

于 2013-10-22T12:12:21.323 回答