def test_check_col(rule3x3x3): state = [ [' ', ' ', ' '], ['X', 'O', ' '], ['X', 'O', ' '] ] new = Move(0, 1, 'O') add_move_if_ok(state, new) assert _check_row_and_column(rule3x3x3, state, new)
def test_check_diag(rule3x3x3, rule5x5x3): state = str_to_arrays(rule3x3x3, 'O XO X ') new = Move(2, 2, 'O') add_move_if_ok(state, new) assert _check_diags(rule3x3x3, state, new) state = str_to_arrays(rule3x3x3, 'O OX X ') new = Move(0, 2, 'X') add_move_if_ok(state, new) assert _check_diags(rule3x3x3, state, new) state = [ [' ', ' ', ' ', ' ', ' '], [' ', 'O', ' ', ' ', ' '], [' ', ' ', 'O', ' ', ' '], [' ', ' ', ' ', 'X', ' '], [' ', ' ', 'X', ' ', ' '] ] new = Move(2, 4, 'X') add_move_if_ok(state, new) assert _check_diags(rule5x5x3, state, new) new = Move(0, 0, 'O') add_move_if_ok(state, new) assert _check_diags(rule5x5x3, state, new)
def add_move(self, request, pk=None): game = self.get_object() board = str_to_arrays(game.rule, game.board) players = [game.player1, game.player2] marker = 'XO'[players.index(request.user)] row = request.data.get('row') col = request.data.get('column') if not all([row is not None, col is not None]): return mason_error('Row and column are required values') move = Move(int(row), int(col), marker) ok, error = add_move_if_ok(board, move) if not ok: return mason_error(error) if game.turn == 1: game.turn = 2 elif game.turn == 2: game.turn = 1 if is_winning_move(game.rule, board, move): winner = players.index(request.user) game.winner = winner + 1 game.turn = 0 update_player_stats(players.pop(winner), players.pop()) game.board = arrays_to_str(board) game.save() return Response(status=status.HTTP_204_NO_CONTENT)
def test_is_winning_move(rule3x3x3): state = [ [' ', 'O', ' '], ['X', 'X', ' '], ['O', 'O', ' '] ] new = Move(1, 2, 'X') add_move_if_ok(state, new) assert is_winning_move(rule3x3x3, state, new) state = [ [' ', 'O', ' '], ['X', 'X', ' '], ['O', 'O', ' '] ] new = Move(1, 2, 'X') add_move_if_ok(state, new) assert is_winning_move(rule3x3x3, state, new)
def test_add_move_if_ok(): state = [ [' ', 'O', ' '], ['X', 'X', ' '], ['O', 'O', ' '] ] new = Move(1, 1, 'X') ok, error = add_move_if_ok(state, new) assert not ok assert error new = Move(1, 2, 'X') ok, _ = add_move_if_ok(state, new) assert ok assert state[1][2] == 'X' new = Move(52, -5, 'X') ok, _ = add_move_if_ok(state, new) assert not ok