Created
July 18, 2019 20:56
-
-
Save grassfedfarmboi/ca72528b3de1c986cd38d2872b6a8d5c to your computer and use it in GitHub Desktop.
Terminal Tic Tac Toe
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Game(): | |
''' | |
Tic Tac Toe terminal game | |
''' | |
def __init__(self): | |
'''Set initial variables and start game''' | |
self.grid = """ | |
1 2 3 | |
|| || | |
A {a1} || {a2} || {a3} | |
|| || | |
===================== | |
|| || | |
B {b1} || {b2} || {b3} | |
|| || | |
===================== | |
|| || | |
C {c1} || {c2} || {c3} | |
|| || | |
""" | |
self.moves = { | |
"a1": " ", | |
"a2": " ", | |
"a3": " ", | |
"b1": " ", | |
"b2": " ", | |
"b3": " ", | |
"c1": " ", | |
"c2": " ", | |
"c3": " " | |
} | |
self.player = 1 | |
self.mark = 'X' | |
self.print_board() #Start game | |
def switch_player(self): | |
self.player = 3 - self.player | |
if self.player is 1: | |
self.mark = 'X' | |
else: | |
self.mark = 'O' | |
def print_board(self): | |
print(self.grid.format(**self.moves)) | |
if self.check_victory(): | |
print('Victory! Player {} wins!'.format(self.player)) | |
self.exit_game() | |
elif self.check_draw(): | |
print('Draw. Game Over.') | |
self.exit_game() | |
else: | |
self.add_move() | |
def add_move(self): | |
prompt = 'Player {}, what\'s your move? '.format(self.player) | |
move = input(prompt).lower().strip() | |
move = self.validate(move) | |
if move and self.moves.get(move) == " ": | |
self.moves[move] = self.mark #sub into moves dict | |
self.switch_player() | |
self.print_board() | |
else: | |
print('Invalid move.') | |
if self.moves.get(move) != " ": | |
print('Space taken.') | |
self.add_move() | |
def validate(self, user_input): | |
if len(user_input) is not 2: | |
move = False | |
elif user_input[0] in ['a', 'b', 'c'] and user_input[1] in ['1', '2', '3']: | |
move = user_input | |
elif user_input[0] in ['1', '2', '3'] and user_input[1] in ['a', 'b', 'c']: | |
move = user_input[1] + user_input[0] #switch order if number first | |
else: | |
move = False | |
return move | |
def check_victory(self): | |
win = self.moves['a1'] == self.moves['a2'] == self.moves['a3'] != " " or \ | |
self.moves['b1'] == self.moves['b2'] == self.moves['b3'] != " " or \ | |
self.moves['c1'] == self.moves['c2'] == self.moves['c3'] != " " or \ | |
self.moves['a1'] == self.moves['b1'] == self.moves['c1'] != " " or \ | |
self.moves['a2'] == self.moves['b2'] == self.moves['c2'] != " " or \ | |
self.moves['a3'] == self.moves['b3'] == self.moves['c3'] != " " or \ | |
self.moves['a1'] == self.moves['b2'] == self.moves['c3'] != " " or \ | |
self.moves['a3'] == self.moves['b2'] == self.moves['c1'] != " " | |
return win | |
def check_draw(self): | |
if all(val != " " for val in self.moves.values()): | |
return True | |
def exit_game(self): | |
input('Enter any key to exit. ') | |
if __name__ == "__main__": | |
Game() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
old