Created
October 1, 2010 14:38
-
-
Save qoelet/606292 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
# 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