ちょい修正。なんか間違ってた。2010/08/29
使いやすいように修正。2010/08/31
#coding: utf-8
class Board(object):
WHITE = 0
BLACK = 1
NONE = 2
LENGTH = 8
def __init__(self):
self.initation()
#初期化
def initation(self):
self.board = []
for i in range(Board.LENGTH):
self.board.append([])
for j in range(Board.LENGTH):
self.board[i].append(Board.NONE)
self.board[3][3] = self.board[4][4] = Board.WHITE
self.board[3][4] = self.board[4][3] = Board.BLACK
#駒を置く
def put(self, x, y, color):
tmpBoard = []
for i in range(Board.LENGTH):
tmpBoard.append(range(Board.LENGTH))
self.copyBoard(self.board, tmpBoard)
if self._put(self.board, x, y, color):
return True
else:
self.copyBoard(tmpBoard, self.board)
return False
#駒を置く(内部処理)
def _put(self, board, x, y, color):
if board[x][y] != Board.NONE:
return False
board[x][y] = color
n = self._count(board, color)
for i in [-1, 0, 1]:
for j in [-1, 0, 1]:
self._changeColor(board, x, y, i, j, color)
return self._count(board, color) > n
#再帰的に駒の色を変えていく
def _changeColor(self, board, x, y, dx, dy, color):
x += dx
y += dy
if x < 0 or x >= 8 or y < 0 or y >= 8 or board[x][y] == Board.NONE:
return False
if board[x][y] == color:
return True
else:
if self._changeColor(board, x, y, dx, dy, color):
board[x][y] = color
return True
else:
return False
#colorの手番で駒を置けるかどうかチェックする
def check(self, color):
tmpBoard = []
for i in range(Board.LENGTH):
tmpBoard.append(range(Board.LENGTH))
for i in range(Board.LENGTH):
for j in range(Board.LENGTH):
self.copyBoard(self.board, tmpBoard)
if tmpBoard[i][j] == Board.NONE:
if self._put(tmpBoard, i, j, color):
return True
return False
#aからbに盤をコピーする
def copyBoard(self, a, b):
for i in range(Board.LENGTH):
for j in range(Board.LENGTH):
b[i][j] = a[i][j]
#colorの数を返す
def count(self, color):
return self._count(self.board, color)
#colorの数を返す(内部処理)
def _count(self, board, color):
n = 0
for _b in board:
for __b in _b:
if __b == color:
n += 1
return n
コピーするメソッドみたいのありそうだなーとか思ったりして。あとで調べてみよう。