TicTacToe: Rename & simplify some functions.
Rename:
* win_conditions -> contains_winning_move
* check_validity -> is_valid_move
* sanitize_move -> sanitized_move
MODIFY
zulip_bots/zulip_bots/bots/tictactoe/tictactoe.py
zulip_bots/zulip_bots/bots/tictactoe/tictactoe.py
@@ -51,26 +51,20 @@ class TicTacToeGame(object):
def board_is_full(self, board):
''' Determines if the board is full or not. '''
- full = False
- board_state = ""
for row in board:
for element in row:
if element == "_":
- board_state += "_"
- if "_" not in board_state:
- full = True
- return full
+ return False
+ return True
- def win_conditions(self, board, triplets):
+ def contains_winning_move(self, board): # Used for current board & trial computer board
''' Returns true if all coordinates in a triplet have the same value in them (x or o) and no coordinates
in the triplet are blank. '''
- won = False
- for triplet in triplets:
+ for triplet in self.triplets:
if (self.get_value(board, triplet[0]) == self.get_value(board, triplet[1]) ==
self.get_value(board, triplet[2]) != "_"):
- won = True
- break
- return won
+ return True
+ return False
def get_locations_of_char(self, board, char):
''' Gets the locations of the board that have char in them. '''
@@ -128,7 +122,7 @@ class TicTacToeGame(object):
# The check is done by replacing the blank locations with o's and seeing if the computer would win in each case.
for row, col in blank_locations:
my_board[row][col] = "o"
- if self.win_conditions(my_board, self.triplets):
+ if self.contains_winning_move(my_board):
board[row][col] = "o"
return board
else:
@@ -139,7 +133,7 @@ class TicTacToeGame(object):
# The check is done by replacing the blank locations with x's and seeing if the user would win in each case.
for row, col in blank_locations:
my_board[row][col] = "x"
- if self.win_conditions(my_board, self.triplets):
+ if self.contains_winning_move(my_board):
board[row][col] = "o"
return board
else:
@@ -180,21 +174,20 @@ class TicTacToeGame(object):
board[row][col] = 'o'
return board
- def check_validity(self, move):
+ def is_valid_move(self, move):
''' Checks the validity of the coordinate input passed in to make sure it's not out-of-bounds (ex. 5, 5) '''
try:
split_move = move.split(",")
row = split_move[0].strip()
col = split_move[1].strip()
valid = False
- if row == "1" or row == "2" or row == "3":
- if col == "1" or col == "2" or col == "3":
+ if row in ("1", "2", "3") and col in ("1", "2", "3"):
valid = True
except IndexError:
valid = False
return valid
- def sanitize_move(self, move):
+ def sanitized_move(self, move):
''' As there are various ways to input a coordinate (with/without parentheses, with/without spaces, etc.) the
input is stripped to just the numbers before being used in the program. '''
move = move.replace("(", "")
@@ -205,7 +198,7 @@ class TicTacToeGame(object):
def tictactoe(self, input_string):
board = self.board
printed_boards = dict(after_player = "", after_computer = "")
- move = self.sanitize_move(input_string)
+ move = self.sanitized_move(input_string)
# Subtraction must be done to convert to the right indices, since computers start numbering at 0.
row = (int(move[0])) - 1
@@ -219,7 +212,7 @@ class TicTacToeGame(object):
printed_boards['after_player'] = self.display_board(board)
# Check to see if the user won/drew after they made their move. If not, it's the computer's turn.
- if self.win_conditions(board, self.triplets):
+ if self.contains_winning_move(board):
return ("player_win", printed_boards)
if self.board_is_full(board):
@@ -230,7 +223,7 @@ class TicTacToeGame(object):
# Checks to see if the computer won after it makes its move. (The computer can't draw, so there's no point
# in checking.) If the computer didn't win, the user gets another turn.
- if self.win_conditions(board, self.triplets):
+ if self.contains_winning_move(board):
return ("computer_win", printed_boards)
return ("next_turn", printed_boards)
@@ -309,7 +302,7 @@ class ticTacToeHandler(object):
response = new_game_text
elif command == 'help':
response = long_help_text
- elif (user_game) and user_game.check_validity(user_game.sanitize_move(command)):
+ elif (user_game) and user_game.is_valid_move(user_game.sanitized_move(command)):
move, printed_boards = user_game.tictactoe(command)
mid_text = mid_move_text+"\n" if printed_boards['after_computer'] else ""
response = "".join([printed_boards['after_player'], mid_text,

TicTacToe: Rename & simplify some functions.

Rename:
* win_conditions -> contains_winning_move
* check_validity -> is_valid_move
* sanitize_move -> sanitized_move