Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class grid:
- def __init__(self):
- self.player = "X"
- self.array = [
- ' ~---`---`---%',
- ' A | | | |',
- ' $---+---+---*',
- ' B | | | |',
- ' $---+---+---*',
- ' C | | | |',
- ' =---^---^---/',
- ' 1 2 3 ',
- ]
- self.asciiDict = {
- '=' : b'\xe2\x95\x9a',
- '-' : b'\xe2\x95\x90',
- '/' : b'\xe2\x95\x9d',
- '|' : b'\xe2\x95\x91',
- '~' : b'\xe2\x95\x94',
- '%' : b'\xe2\x95\x97',
- '+' : b'\xe2\x95\xac',
- '^' : b'\xe2\x95\xa9',
- '`' : b'\xe2\x95\xa6',
- '$' : b'\xe2\x95\xa0',
- '*' : b'\xe2\x95\xa3',
- }
- self.gameArray = " "
- def choosePlayer(self):
- while True:
- self.player = input("Choose 'X' or 'O' to play> ")
- if self.player == "X" or self.player == "x":
- self.player = "X"
- break
- elif self.player == "o" or self.player == "O" or self.player == "0":
- self.player = "O"
- break
- def decode(self, x):
- output = ""
- for i in x:
- output = output + self.asciiDict.get(i, i.encode('utf-8')).decode('utf-8')
- return output
- #return (''.join(asciiDict.get(i, i.encode('utf-8')).decode('utf-8') for i in x))
- def printGame(self):
- for i in range(7):
- print(self.decode(self.array[i]))
- def getGrid(self, coord):
- if coord == "a1":
- status = self.array[1][5]
- elif coord == "a2":
- status = self.array[1][9]
- elif coord == "a3":
- status = self.array[1][13]
- elif coord == "b1":
- status = self.array[3][5]
- elif coord == "b2":
- status = self.array[3][9]
- elif coord == "b3":
- status = self.array[3][13]
- elif coord == "c1":
- status = self.array[5][5]
- elif coord == "c2":
- status = self.array[5][9]
- elif coord == "c3":
- status = self.array[5][13]
- return status
- def setGrid(self, coord):
- status = self.player
- # status = X, O
- if coord == "a1":
- self.array[1] = self.array[1][:5] + status + self.array[1][6:]
- self.gameArray = self.gameArray[:0] + status + self.gameArray[1:]
- elif coord == "a2":
- self.array[1] = self.array[1][:9] + status + self.array[1][10:]
- self.gameArray = self.gameArray[:1] + status + self.gameArray[2:]
- elif coord == "a3":
- self.array[1] = self.array[1][:13] + status + self.array[1][14:]
- self.gameArray = self.gameArray[:2] + status + self.gameArray[3:]
- elif coord == "b1":
- self.array[3] = self.array[3][:5] + status + self.array[3][6:]
- self.gameArray = self.gameArray[:3] + status + self.gameArray[4:]
- elif coord == "b2":
- self.array[3] = self.array[3][:9] + status + self.array[3][10:]
- self.gameArray = self.gameArray[:4] + status + self.gameArray[5:]
- elif coord == "b3":
- self.array[3] = self.array[3][:13] + status + self.array[3][14:]
- self.gameArray = self.gameArray[:5] + status + self.gameArray[6:]
- elif coord == "c1":
- self.array[5] = self.array[5][:5] + status + self.array[5][6:]
- self.gameArray = self.gameArray[:6] + status + self.gameArray[7:]
- elif coord == "c2":
- self.array[5] = self.array[5][:9] + status + self.array[5][10:]
- self.gameArray = self.gameArray[:7] + status + self.gameArray[8:]
- elif coord == "c3":
- self.array[5] = self.array[5][:13] + status + self.array[5][14:]
- self.gameArray = self.gameArray[:8] + status
- def getPlayer(self):
- return self.player
- def switchPlayer(self):
- if self.player == "X":
- self.player = "O"
- else:
- self.player = "X"
- def checkComplete(self):
- gameWon = ''
- gameOver = False
- for i in range(0,9,3):
- testString = self.gameArray[i] + self.gameArray[i+1] + self.gameArray[i+2]
- #print("testString H = '" + testString + "'")
- if testString == "XXX":
- gameWon = "X"
- gameOver = True
- break
- elif testString == "OOO":
- gameWon = "O"
- gameOver = True
- break
- if not gameOver:
- for i in range(0,3,1):
- testString = self.gameArray[i] + self.gameArray[i+3] + self.gameArray[i+6]
- #print("testString V = '" + testString + "'")
- if testString == "XXX":
- gameWon = "X"
- gameOver = True
- break
- elif testString == "OOO":
- gameWon = "O"
- gameOver = True
- break
- if not gameOver:
- testString = self.gameArray[0] + self.gameArray[4] + self.gameArray[8]
- if testString == "XXX":
- gameWon = "X"
- gameOver = True
- elif testString == "OOO":
- gameWon = "O"
- gameOver = True
- if not gameOver:
- testString = self.gameArray[2] + self.gameArray[4] + self.gameArray[6]
- if testString == "XXX":
- gameWon = "X"
- gameOver = True
- elif testString == "OOO":
- gameWon = "O"
- gameOver = True
- #test for full grid with no winner
- if not gameOver:
- #no winner yet. Assume game grid is full
- gameOver = True
- # test for gaps in game grid
- if ' ' in self.gameArray:
- gameOver = False
- return gameOver, gameWon
- def getCoords(game):
- goodResponse = ['a1','a2','a3','b1','b2','b3','c1','c2','c3','1a','1b','1c','2a','2b','2c','3a','3b','3c']
- while True:
- response = input("Player '" + game.getPlayer() + "' - Type your coords (e.g. a1) > ")
- response = response.lower()
- if response in goodResponse: # check if legit coords
- #check if coords given in letter+number format
- if response[0].isnumeric():
- response = response[1] + response[0]
- #check if coords available
- if game.getGrid(response) == " ":
- break
- return response
- def playAgain():
- response = input("Play Again? (Y/N) > ")
- if response.upper() == "Y":
- return True
- else:
- return False
- def main():
- print("Welcome to TicTacToe")
- while True:
- game = grid()
- game.choosePlayer()
- game.printGame()
- while True:
- coords = getCoords(game)
- game.setGrid(coords)
- game.printGame()
- gameOver, gameWon = game.checkComplete()
- if gameOver:
- break
- game.switchPlayer()
- player = game.getPlayer()
- print()
- if gameWon == '':
- print("Game is a DRAW!")
- else:
- print("Player '" + player + "' WINS!")
- game = None
- if not playAgain():
- break
- print("Thank you for playing TicTacToe")
- main()
- input("Press Enter to quit...")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement