2010-04-13 4 views
3

나는 파이썬으로 체커 게임 보드를 구현 중이다.체커 보드 구조

_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 '' 

이 같이 내 보드를 수행해야합니다 :

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

그러나 결과는 다음과 같습니다

여기에 내가 [8] [8] 배열로 보드 구조를 생성하는 방법이다
- - - - - - - - 
# # # # # # # # 
- - - - - - - - 
# # # # # # # # 
- - - - - - - - 
# # # # # # # # 
- - - - - - - - 
# # # # # # # # 

무엇이 잘못 되었습니까?


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 '' 
+0

py 2.6에서'xrange' 함수가 더 이상 사용되지 않습니다. –

+0

@ Jweede, 나는 iterators를 사용하기 때문에 range보다 빠르다고 생각했습니다. 그러나 결코 신경 쓰지 않습니다. – Ockonal

+0

@ Jweede, No,'xrange'는 파이썬의 전체 2.x 브랜치에 남아있을 것이고'2to3'에 의해'range '에 자동 변환 될 것입니다. –

답변

5

업데이트를

문제는 라인이다 :

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

이 8 만듭니다 각 라인의 참조는 과 동일한 개체로 둘 중 하나를 변경하면 실제로 전체 행이 변경됩니다. 이 문제를 해결하려면 다음


귀하의 코드는 나를 위해 작동

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

최종 업데이트합니다. 고정이 필요합니다 한가지입니다 : 대신

print _matrix[row][col], 

:

print _matrix[row][col] 

다른 라인에 모든 문자를 인쇄 방지하기 위해.

또한 코드를 실행하기 위해 함수 순서를 변경해야했습니다 (상단에 _darkQuad 입력).

+0

네, 클래스를 사용하고 코드를 더 간단하게 만들었습니다. 제발, 업데이 트를보세요. – Ockonal

+0

좋아요! 많은 감사;) – Ockonal

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: 변경 당신이 문은 내가 일반적인 사용 인, xrange(8)xrange(0, 8)를 변경 한 경우 어떻게 if _darkQuad(row, col):로, 이는)

+0

게시물에 대한 업데이트를 참조하십시오 – Ockonal

+0

문제는 해결되었지만 감사합니다;) – Ockonal

0

당신이해야 할 일은 다음과 같습니다.

print _matrix[row][col], 

쉼표는 print 문 다음에 캐리지 리턴을 건너 뛰도록 통역사에게 지시합니다.

0

I는 다음과 같이 가고 싶어 :

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

그것은 최소한으로 수학을 유지합니다.