public int play() {
		for (int i = 0; i < ROW * COL; i++) {
			Player p = (i % 2 == 0) ? p1 : p2;
			char stone = p.getStone();
			try {
				// TODO 10秒でタイムアウトする。（スレッド？）
				char[][] tmpBoard = new char[ROW][COL];
				for (int k = 0; k < ROW; k++)
					tmpBoard[k] = Arrays.copyOf(board[k], board[k].length);
				
				int column = p.getNextHand(tmpBoard);
				if (isDispBoardEnabled())
					System.out.println(p.getName() + "(" + p.getStone() + ") put a stone at colum " + column + ".");
				
				putStoneAt(column, stone);
			} catch (AgainstRuleException e) {
				System.out.println(p.getName() + ": " + e.getMessage());
				return (i % 2 == 0) ? -1 : 1;
			} finally {
				dispBoard(i);
			}
			
			if (winOf(stone))
				return (i % 2 == 0) ? 1 : -1;
		}

		return 0;
	}