Skip to content

Instantly share code, notes, and snippets.

@qoelet
Created October 1, 2010 14:38
Show Gist options
  • Save qoelet/606292 to your computer and use it in GitHub Desktop.
Save qoelet/606292 to your computer and use it in GitHub Desktop.
# Tic Tac Toe
# A simple game. Users take the role of 'X' or 'O'.
class Board:
def __init__(self):
# | 0 | 1 | 2 |
# -------------
# | 3 | 4 | 5 |
# -------------
# | 6 | 7 | 8 |
self.state = [
[0,0,0], # self.state[0][0-2]
[0,0,0], # self.state[1][0-2]
[0,0,0] # self.state[2][0-2]
]
self.dstate = [
[0,0,0], # self.state[0][0-2]
[0,0,0], # self.state[1][0-2]
[0,0,0] # self.state[2][0-2]
]
self.win = 0
self.moves = 0
self.history = []
def check_win(self):
# vertical check
if self.state[0][0] == self.state[1][0] == self.state[2][0] == (1 or 7): return True
if self.state[0][1] == self.state[1][1] == self.state[2][1] == (1 or 7): return True
if self.state[0][2] == self.state[1][2] == self.state[2][2] == (1 or 7): return True
# horizontal check
if self.state[0][0] == self.state[0][1] == self.state[0][2] == (1 or 7): return True
if self.state[1][0] == self.state[1][1] == self.state[1][2] == (1 or 7): return True
if self.state[2][0] == self.state[2][1] == self.state[2][2] == (1 or 7): return True
# diagonal check
if self.state[0][0] == self.state[1][1] == self.state[2][2] == (1 or 7): return True
if self.state[0][2] == self.state[1][1] == self.state[2][0] == (1 or 7): return True
# no win
return False
def print_board(self):
print '_' * 50
print 'Move number #:%d' % self.moves
print 'BOARD:'
print '| %s | %s | %s |' % (self.dstate[0][0], self.dstate[0][1], self.dstate[0][2])
print '----------------'
print '| %s | %s | %s |' % (self.dstate[1][0], self.dstate[1][1], self.dstate[1][2])
print '----------------'
print '| %s | %s | %s |' % (self.dstate[2][0], self.dstate[2][1], self.dstate[2][2])
def rec_move(self, position, player):
if(type(position) == list):
if player == False:
move = 1
elif player == True:
move = 7
if self.state[int(position[0])][int(position[1])] == 0 and move != 0:
self.state[int(position[0])][int(position[1])] = move
if player == False:
self.dstate[int(position[0])][int(position[1])] = 'o'
else:
self.dstate[int(position[0])][int(position[1])] = 'x'
self.moves += 1
self.history.append(position)
return True
else:
return False
# We'll represent player O to use 1 and player X to use 7
class Game:
def __init__(self):
self.board = Board()
self.player = False
def get_move(self):
self.board.print_board()
move = raw_input('Enter your move (e.g 1,3 for first row, third col): ')
move = move.split(',')
moved = self.board.rec_move(move, self.player)
if moved:
print "Move recorded"
self.board.print_board()
else:
print "An error has occurred while making a move"
def critic():
pass
if __name__ == '__main__':
g = Game()
print 'Initialized game'
while(g.board.check_win() != True):
print '->'
g.get_move()
g.player = not g.player
print 'Game ended.'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment