Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Tic Tac Toe Gameboard Class
- from pprint import pprint
- X = 1
- O = 10
- XWINNER = 3
- OWINNER = 30
- EMPTY = ' '
- MAXCELLS = 9
- def chunker(seq, size):
- return (seq[pos:pos + size] for pos in range(0, len(seq), size))
- class GameBoardProof:
- winningSlices = [
- slice(0,9,4), # Left Diagonal
- slice(2,7,2) # Right Diagonal
- ]
- winningSlices.extend([slice(i, i+7, 3) for i in range(0,3)]) # Columns
- winningSlices.extend([slice(i, i + 3) for i in range(0, 9, 3)]) # Rows
- def __init__(self):
- self._board = [i for i in range(10)]
- def display(self):
- bar ="|"
- for i in range(0, 9, 3):
- print(bar+bar.join([str(ch) for ch in self._board[slice(i,i+3)]])+bar)
- def proof(self):
- for s in self.winningSlices:
- print(self._board[s])
- class GameBoard:
- winningSlices = [
- slice(0, 9, 4), # Left Diagonal
- slice(2, 7, 2) # Right Diagonal
- ]
- winningSlices.extend([slice(i, i + 7, 3) for i in range(0, 3)]) # Columns
- winningSlices.extend([slice(i, i + 3) for i in range(0, 9, 3)]) # Rows
- def __init__(self):
- self.clear()
- def clear(self):
- self._board = [EMPTY for i in range(9)]
- def display(self, doprint=True):
- bar ="|"
- result = ''
- for i in range(0, 9, 3):
- tmp = bar+bar.join([str(ch) for ch in self._board[slice(i,i+3)]])+bar
- tmp = tmp.replace(str(O),'O')
- tmp = tmp.replace(str(X),'X')
- if doprint:
- print(tmp)
- else:
- result += tmp
- if doprint:
- print("*" * 7)
- else:
- return result
- def addMark(self,pos, mark,TEST=False):
- if TEST:
- self._board[pos] = mark
- return
- if 0 <= pos < MAXCELLS and self._board[pos] is EMPTY:
- self._board[pos] = mark
- def getMark(self, pos):
- if 0 <= pos < MAXCELLS and self._board[pos] is not EMPTY:
- return self._board[pos]
- def isTieGame(self):
- try:
- self._board.index(EMPTY)
- return False
- except:
- return True
- def getWinner(self):
- for s in self.winningSlices:
- try:
- slicesum = sum(self._board[s])
- if slicesum == XWINNER:
- return 'X'
- elif slicesum == OWINNER:
- return 'O'
- except Exception as e:
- pass
- def __repr__(self):
- return list(chunker(self.display(False),7))
- gb = GameBoardProof()
- print("PROOF")
- gb.display()
- print()
- pprint(gb.winningSlices)
- print()
- gb.proof()
- print("*"*40)
- print("TEST WINNER DETECTION")
- gb = GameBoard()
- gb.display()
- print("No Winner")
- positions = [x for x in range(9)]
- for s in gb.winningSlices:
- for pos in positions[s]:
- gb.addMark(pos,X)
- gb.display()
- winner = gb.getWinner()
- print(f"{winner=}")
- gb.clear()
- print("*"*40)
- print("TEST For A TIE")
- mark = X
- gb.clear()
- gb.display()
- print("No Tie")
- for n, s in enumerate(gb.winningSlices):
- for pos in positions[s]:
- gb.addMark(pos,mark,True)
- mark = O if mark == X else X
- if n == 2:
- if gb.getWinner() is None:
- gb.display()
- print("No Winner")
- print(f"{gb.isTieGame()=}")
- gb.addMark(0,X,True)
- gb.addMark(2,X,True)
- gb.addMark(1,O,True)
- gb.display()
- print(f"{gb.isTieGame()=}")
- print("Finished...")
Advertisement
Add Comment
Please, Sign In to add comment