Структура доски шашек - PullRequest
       1

Структура доски шашек

4 голосов
/ 13 апреля 2010

Я внедряю игровую доску в шашки с питоном. Вот как я генерирую структуру платы в виде массива [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 ]

6 голосов
/ 13 апреля 2010

Обновление для недавно опубликованного кода

Проблема со строкой:

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

Это создаст 8 ссылок в каждой строке на тот же объект. Когда вы меняете один из них, он фактически изменит весь ряд. Чтобы это исправить:

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

Окончание обновления


Ваш код работает для меня. Единственное, что нужно исправить:

print _matrix[row][col],

вместо:

print _matrix[row][col]

Чтобы не печатать каждый символ в отдельной строке.

Мне также пришлось изменить порядок функций, чтобы запустить код (поместите _darkQuad вверху).

1 голос
/ 13 апреля 2010

Я не могу воспроизвести эту проблему. Измените код, который вы разместили, чтобы он работал:

# 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):, как вы делаете, если вы и операторы изменили xrange(0, 8) на xrange(8), что является типичным использованием.)

0 голосов
/ 13 апреля 2010

Я бы пошел на что-то вроде этого:

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

Это сводит математику к минимуму.

0 голосов
/ 13 апреля 2010

Все, что вам нужно сделать, это:

print _matrix[row][col],

Запятая говорит переводчику пропустить возврат каретки после оператора print.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...