跳棋板结构

时间:2010-04-13 16:08:20

标签: python

我正在用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 ''

这应该像我的董事会一样:

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

但结果是:

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

怎么了?


UPD : 嗯,我认为这不重要。我使代码更容易,但这是我使用的确切代码:

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 :(得分:5)

新发布的代码更新

问题出在以下几行:

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

这将在相同对象的每一行上创建8个引用。当您更改其中一个时,它实际上会更改整行。解决它:

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

结束更新


您的代码适合我。只需要修理的是:

print _matrix[row][col],

而不是:

print _matrix[row][col]

避免在不同的行上打印每个字符。

我还必须重新排序函数以使代码运行(将_darkQuad放在顶部)。

答案 1 :(得分: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):,如果语句和我更改了{{1} } xrange(0, 8),这是典型的用法。)

答案 2 :(得分:0)

您需要做的就是:

print _matrix[row][col],

逗号告诉解释器在print语句后跳过回车符。

答案 3 :(得分:0)

我会选择这样的事情:

matrix = ['#-' * 4, '-#' * 4] * 4

它将数学保持在最低限度。