跳棋棋盘结构

4 投票
4 回答
4250 浏览
提问于 2025-04-15 21:33

我正在用Python实现一个跳棋游戏的棋盘。下面是我生成棋盘结构的方式,使用的是一个[8][8]的数组:

 _matrix = []
 for i in xrange(8):
     _matrix.append( [' '] * 8 )


 for row in xrange(0, 8):
        for col in xrange(0, 8):
            if _darkQuad(row, col) == True:
                _matrix[row][col] = '#'
            else:
                _matrix[row][col] = '-'

def _darkQuad(row, col):
    return ((row%2) == (col%2))

def _printDebugBoard():
    for row in xrange(0, 8):
        for col in xrange(0, 8):
            print _matrix[row][col]
        print ''

这样应该能生成我的棋盘,像这样:

 # - # - # - # -
 - # - # - # - #
 ...

但是结果却是:

- - - - - - - - 
# # # # # # # # 
- - - - - - - - 
# # # # # # # # 
- - - - - - - - 
# # # # # # # # 
- - - - - - - - 
# # # # # # # # 

这是什么问题呢?


更新: 嗯,我没想到这会很重要。我把代码简化了一下,但这是我实际使用的代码:

class gameSquare(object):
    def __init__(self):
        self.validSquare = False
        self.symbol = ''

    def printSymbol(self):
        print self.symbol,
-------
def _validateSquares(self):
    for row in xrange(0, 8):
        for col in xrange(0, 8):
            if self._darkQuad(row, col) == True:
                self._matrix[row][col].validSquare = False
                self._matrix[row][col].symbol = '#'
            else:
                self._matrix[row][col].validSquare = True
                self._matrix[row][col].symbol = '-'

--------
for i in xrange(8):
    self._matrix.append( [gameSquare()] * 8 )

-------
def _printDebugBoard(self):
    print ''
    for row in xrange(0, 8):
        for col in xrange(0, 8):
            self._matrix[row][col].printSymbol()
        print ''

4 个回答

0

你只需要做以下几步:

print _matrix[row][col],

这里的逗号是告诉计算机在打印完内容后不要换行。

1

我无法重现这个问题。我修改了你发布的代码,使它可以运行:

# Moved this function up here so it can be called.
def _darkQuad(row, col): 
    return row % 2 == col % 2

def _printDebugBoard():
    for row in xrange(8):
        for col in xrange(8):
            print _matrix[row][col],
            # Added the comma here ^ so that I don't get unwanted newlines
        print ''

_matrix = []
for i in xrange(8):
    _matrix.append([' '] * 8)


for row in xrange(8):
    for col in xrange(8):
        if _darkQuad(row, col): 
            _matrix[row][col] = '#'
        else:
            _matrix[row][col] = '-'

_printDebugBoard() # called the _printDebugBoard function

运行后得到:

# - # - # - # - 
- # - # - # - # 
# - # - # - # - 
- # - # - # - # 
# - # - # - # - 
- # - # - # - # 
# - # - # - # - 
- # - # - # - # 

(我还做了两个改动,这些改动虽然没有影响结果,但更符合使用习惯。我把 if _darkQuad(row, col) == True: 改成了 if _darkQuad(row, col):,这是写if语句的标准方式;我还把 xrange(0, 8) 改成了 xrange(8),这也是常见的用法。)

6

更新关于新发布的代码

问题出在这一行:

self._matrix.append( [gameSquare()] * 8 )

这行代码会在每一行创建8个对同一个对象的引用。当你改变其中一个时,实际上会改变整行的内容。要解决这个问题:

self._matrix.append( [gameSquare() for _ in xrange(8)] )

更新结束


你的代码对我来说是可以工作的。唯一需要修正的地方是:

print _matrix[row][col],

而不是:

print _matrix[row][col]

这样可以避免每个字符都打印在不同的行上。

我还需要重新排列函数的顺序才能让代码正常运行(把_darkQuad放在最上面)。

撰写回答