用python为桌上游戏生成棋盘

用python为桌上游戏生成棋盘,python,python-3.x,Python,Python 3.x,我必须在python中生成这样一个板 这是理想的结果: 0 1 2 3 4 5 6 7 8 9 0 1 2 0 * * * 1 * D * 2 * D * 3 * D * 4 * D * 5 * * * * * * D * * * * * * 6 * D D D D D D D D D D D

我必须在python中生成这样一个板

这是理想的结果:

  0 1 2 3 4 5 6 7 8 9 0 1 2
0           * * *          
1           * D *          
2           * D *          
3           * D *          
4           * D *          
5 * * * * * * D * * * * * *
6 * D D D D D D D D D D D *
7 * * * * * * D * * * * * *
8           * D *          
9           * D *          
0           * D *          
1           * D *          
2           * * *          
到目前为止,我做到了:

  0 1 2 3 4 5 6 7 8
0 * * * * * * * * *
1 * * * * * * * * *
2 * * * * * * * * *
3 * * * * * * * * *
4 * * * * * * * * *
5 * * * * * * * * *
6 * * * * * * * * *
7 * * * * * * * * *
8 * * * * * * * * *
以下是我目前的代码:

def makeboard(x):
  board = []
  for r in range(x+1):
     brow = []
     for c in range(x+1):
        if r == c == 0:
             brow.append(' ')
        elif r == 0:
            brow.append(str(c-1))
        elif c == 0:
            brow.append(str(r-1))
        else:
             brow.append('*')
      board.append(brow)
  return board

b =makeboard(9)

for x in b:
print(‘ ‘.join(x))
我的第一个问题是,如果我想做一个像12x12这样的板,第一行和9边上的数字会使我的板偏离对称。所以我想让它们重置为9,这样它们就可以从0开始。这方面我需要帮助。
我的第二个问题是我不能使我的董事会像我需要生成。希望得到一些提示

要使数字在经过
9
后返回到
0
,可以对整数使用模运算(
%
):


您还可以使用
math.floor
math.ceil
函数来帮助查找中点、上面的行/列和中心线下面的行/列。

奇怪的是,我在编译代码时遇到了很多错误:缩进错误,不知何故,您的代码能够使用
`..
字符而不是通常的
'..
来运行。我调整了代码,使其在我的系统上运行;你可能得把它换回来

也就是说:你在正确的轨道上,但放弃得太快了。在双循环中,只需更多地检查在什么位置插入什么字符:

def makeboard(x):
    board = []
    for r in range(x+1):
        brow = []
        for c in range(x+1):
            if r == c == 0:
                brow.append(' ')  # top left corner
            elif r == 0:
                brow.append(str(c-1)[-1]) # top number row, last digit only
            elif c == 0:
                brow.append(str(r-1)[-1]) # left number column, last digit only
            elif (x>>1) <= r <= (x>>1)+2 or (x>>1) <= c <= (x>>1)+2: # center 3 rows and columns (offset by +1 because the first number column throws the count off)
                if r == 1 or c == 1 or r == x or c == x: # the first and last character in each column and row is always '*'
                    brow.append('*')
                else:
                    if r == (x>>1)+1 or c == (x>>1)+1: # the center column and row
                        brow.append('D')
                    else:
                        brow.append('*') # everything except the center
            else:
                brow.append(' ')
        board.append(brow)
    return board

b =makeboard(13)

for x in b:
    print(' '.join(x))
def制作板(x):
董事会=[]
对于范围(x+1)内的r:
眉毛=[]
对于范围(x+1)内的c:
如果r==c==0:
眉.附加(“”)#左上角
elif r==0:
浏览附加(str(c-1)[-1])#顶部数字行,仅最后一位
elif c==0:
浏览附加(str(r-1)[-1])#左数字列,仅最后一位
elif(x>>1)1)+2或(x>>1)1)+2:#将3行和3列居中(偏移+1,因为第一个数字列会使计数偏离)
如果r==1或c==1或r==x或c==x:#每列和每行中的第一个和最后一个字符始终为“*”
brow.append(“*”)
其他:
如果r==(x>>1)+1或c==(x>>1)+1:#中间的列和行
brow.append('D')
其他:
brow.append(“*”)#除中间之外的所有内容
其他:
Brown.append(“”)
板。附加(棕色)
返回板
b=模板(13)
对于b中的x:
打印(''.join(x))

代码添加了两次
“*”
,因为这样做比较容易。这两个单独的测试可以合并成一条长线,但这会使过程更难阅读,所以我就到此为止。

感谢您的编辑。它工作得很完美,但我做了一些更改,我没有使用>>操作符。
def makeboard(x):
    board = []
    for r in range(x+1):
        brow = []
        for c in range(x+1):
            if r == c == 0:
                brow.append(' ')  # top left corner
            elif r == 0:
                brow.append(str(c-1)[-1]) # top number row, last digit only
            elif c == 0:
                brow.append(str(r-1)[-1]) # left number column, last digit only
            elif (x>>1) <= r <= (x>>1)+2 or (x>>1) <= c <= (x>>1)+2: # center 3 rows and columns (offset by +1 because the first number column throws the count off)
                if r == 1 or c == 1 or r == x or c == x: # the first and last character in each column and row is always '*'
                    brow.append('*')
                else:
                    if r == (x>>1)+1 or c == (x>>1)+1: # the center column and row
                        brow.append('D')
                    else:
                        brow.append('*') # everything except the center
            else:
                brow.append(' ')
        board.append(brow)
    return board

b =makeboard(13)

for x in b:
    print(' '.join(x))