Skip to content

Commit

Permalink
fix bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
houluy committed Oct 21, 2020
1 parent 953244d commit 4870efd
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 14 deletions.
31 changes: 19 additions & 12 deletions chessboard/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def __init__(self, board_size=3, ch_off='O', ch_def='X', ch_blank=' ', win=3):#,
#self.pos_dict = {}
self.graph = []
self.board_size = board_size
self.game_round = 0
self.game_round = 1
self.start_player = 1
self.win = win
self.logger = logging.getLogger(__name__)
Expand All @@ -60,7 +60,7 @@ def __init__(self, board_size=3, ch_off='O', ch_def='X', ch_blank=' ', win=3):#,
raise ValueError('Winning number exceeds the board size!')
self.pos_range = range(self.board_size)
self.pos = [[0 for _ in self.pos_range] for _ in self.pos_range]
self.top_row = [self.board_size for _ in self.pos_range]
self.top_row = [self.board_size - 1 for _ in self.pos_range]
# Available actions
self.available_pos = list(product(self.pos_range, self.pos_range))
# Available columns
Expand Down Expand Up @@ -153,10 +153,11 @@ def process_single_ipt(self, ipt):
column = cord
if column > self.board_size or column <= 0:
raise ValueError(f'Coordinate {original_column} exceeds range of chessboard with {self.board_size}')
column -= 1
row = self.get_row_by_column(column)
if row == 0:
raise ValueError(f'There is a chess piece!')
pos = (row - 1, column - 1)
pos = (row, column)
return pos

@property
Expand Down Expand Up @@ -329,8 +330,14 @@ def set_pos(self, pos, validate=False):#, check=False):
player = self.get_player()
self.history[self.game_round] = copy.deepcopy(self.pos)
self.pos[x][y] = player
if self.top_row[y] > x:
self.top_row[y] = x
# 1 2 3
#1| | |O|
#2|X| |X|
#3|O|X| |
# pos: (0, 0)
# top_row[0] = 0 => top_row[0] = 0 - 1 = -1
if self.top_row[y] == x:
self.top_row[y] = x - 1
self.user_pos_dict[player].append(pos)

def play(self):
Expand Down Expand Up @@ -360,7 +367,7 @@ def clear(self):
self.game_round = 0
self.available_pos = list(product(self.pos_range, self.pos_range))
self.available_columns = list(self.pos_range)
self.top_row = [self.board_size for _ in self.pos_range]
self.top_row = [self.board_size - 1 for _ in self.pos_range]

def input(self):
ipt = input("Please input your chess position:")
Expand Down Expand Up @@ -503,17 +510,17 @@ def get_row_by_column(self, column):
1| | |X|
2|O| |O|
3|X| |X|
assert get_row_by_column(1) == 1
assert get_row_by_column(2) == 3
assert get_row_by_column(3) == 0
assert get_row_by_column(0) == 0
assert get_row_by_column(1) == 2
assert get_row_by_column(2) == -1
NOTE: 0 is unavailable move
Args:
column: The actual index of column (1, 2, 3 in the e.g.)
column: The index of column (0, 1, 2 in the e.g.)
Return:
int: The actual index of top index of row (0, 1, 2, 3 in the e.g.)
int: The index of top index of row (-1, 0, 1, 2 in the e.g.)
'''
return self.top_row[column - 1]
return self.top_row[column]


class ChessboardExtension(Chessboard):
Expand Down
2 changes: 1 addition & 1 deletion chessboard/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '1.3.7'
__version__ = '1.3.8'
2 changes: 1 addition & 1 deletion chessboardCLI.egg-info/PKG-INFO
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Metadata-Version: 1.2
Name: chessboardCLI
Version: 1.3.7
Version: 1.3.8
Summary: Chessboard generator in command line
Home-page: https://github.com/houluy/chessboard
Author: Houlu
Expand Down
3 changes: 3 additions & 0 deletions tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@

suite = unittest.TestSuite()
suite.addTest(tests.TestChessboard("test_columns"))
suite.addTest(tests.TestFourinarowChessboar("test_state"))
#suite.addTest(tests.TestFourinarowChessboar("test_getrowbycolumn"))
suite.addTest(tests.TestFourinarowChessboar("test_single_ipt"))
runner = unittest.TextTestRunner()
runner.run(suite)
56 changes: 56 additions & 0 deletions tests/test_chessboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,3 +139,59 @@ def test_process_ipt(self):
self.assertEqual(pos, 0)


class TestFourinarowChessboar(unittest.TestCase):
def setUp(self):
self.chessboard = chessboard.Chessboard(board_size=7)

def test_state(self):
pos = (6, 0)
self.chessboard.set_pos(pos)
test_state = [0 for _ in range(7*7)]
test_state[-7] = 1
self.assertEqual(self.chessboard.state, test_state)

def test_getrowbycolumn(self):
self.chessboard.clear()
column = 0
row = self.chessboard.get_row_by_column(column)
self.assertEqual(row, 6)
self.chessboard.set_pos((6, 0))
row = self.chessboard.get_row_by_column(column)
self.assertEqual(row, 5)

self.chessboard.set_pos((5, 0))
row = self.chessboard.get_row_by_column(column)
self.assertEqual(row, 4)

self.chessboard.set_pos((4, 0))
row = self.chessboard.get_row_by_column(column)
self.assertEqual(row, 3)

self.chessboard.set_pos((3, 0))
row = self.chessboard.get_row_by_column(column)
self.assertEqual(row, 2)

self.chessboard.set_pos((2, 0))
row = self.chessboard.get_row_by_column(column)
self.assertEqual(row, 1)

self.chessboard.set_pos((1, 0))
row = self.chessboard.get_row_by_column(column)
self.assertEqual(row, 0)

self.chessboard.set_pos((0, 0))
row = self.chessboard.get_row_by_column(column)
self.assertEqual(row, -1)

def test_single_ipt(self):
test_ipt = "1"
pos = self.chessboard.process_single_ipt(test_ipt)
self.assertEqual(pos, (6, 0))
test_ipt = "2"
pos = self.chessboard.process_single_ipt(test_ipt)
self.assertEqual(pos, (6, 1))
self.chessboard.set_pos(pos)
test_ipt = "2"
pos = self.chessboard.process_single_ipt(test_ipt)
self.assertEqual(pos, (5, 1))

0 comments on commit 4870efd

Please sign in to comment.