Advertisement
Inksaver

TicTacToe Python Console

Nov 1st, 2015
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.05 KB | None | 0 0
  1. class grid:
  2.     def __init__(self):
  3.         self.player = "X"
  4.         self.array = [
  5.             '   ~---`---`---%',
  6.             ' A |   |   |   |',
  7.             '   $---+---+---*',
  8.             ' B |   |   |   |',
  9.             '   $---+---+---*',
  10.             ' C |   |   |   |',
  11.             '   =---^---^---/',
  12.             '     1   2   3  ',
  13.         ]
  14.  
  15.         self.asciiDict = {
  16.             '=' : b'\xe2\x95\x9a',
  17.             '-' : b'\xe2\x95\x90',
  18.             '/' : b'\xe2\x95\x9d',
  19.             '|' : b'\xe2\x95\x91',
  20.             '~' : b'\xe2\x95\x94',
  21.             '%' : b'\xe2\x95\x97',
  22.             '+' : b'\xe2\x95\xac',
  23.             '^' : b'\xe2\x95\xa9',
  24.             '`' : b'\xe2\x95\xa6',
  25.             '$' : b'\xe2\x95\xa0',
  26.             '*' : b'\xe2\x95\xa3',
  27.         }
  28.         self.gameArray = "         "
  29.  
  30.     def choosePlayer(self):
  31.         while True:
  32.             self.player = input("Choose 'X' or 'O' to play> ")
  33.             if self.player == "X" or self.player == "x":
  34.                 self.player = "X"
  35.                 break
  36.             elif self.player == "o" or self.player == "O" or self.player == "0":
  37.                 self.player = "O"
  38.                 break
  39.        
  40.     def decode(self, x):
  41.         output = ""
  42.         for i in x:
  43.             output = output + self.asciiDict.get(i, i.encode('utf-8')).decode('utf-8')
  44.  
  45.         return output
  46.         #return (''.join(asciiDict.get(i, i.encode('utf-8')).decode('utf-8') for i in x))
  47.  
  48.     def printGame(self):
  49.         for i in range(7):
  50.             print(self.decode(self.array[i]))
  51.  
  52.     def getGrid(self, coord):
  53.         if coord == "a1":
  54.             status = self.array[1][5]
  55.         elif coord == "a2":
  56.             status = self.array[1][9]
  57.         elif coord == "a3":
  58.             status = self.array[1][13]
  59.         elif coord == "b1":
  60.             status = self.array[3][5]
  61.         elif coord == "b2":
  62.             status = self.array[3][9]
  63.         elif coord == "b3":
  64.             status = self.array[3][13]
  65.         elif coord == "c1":
  66.             status = self.array[5][5]
  67.         elif coord == "c2":
  68.             status = self.array[5][9]
  69.         elif coord == "c3":
  70.             status = self.array[5][13]
  71.         return status
  72.  
  73.     def setGrid(self, coord):
  74.         status = self.player
  75.         # status = X, O
  76.         if coord == "a1":
  77.             self.array[1] = self.array[1][:5] + status + self.array[1][6:]
  78.             self.gameArray = self.gameArray[:0] + status + self.gameArray[1:]
  79.         elif coord == "a2":
  80.             self.array[1] = self.array[1][:9] + status + self.array[1][10:]
  81.             self.gameArray = self.gameArray[:1] + status + self.gameArray[2:]
  82.         elif coord == "a3":
  83.             self.array[1] = self.array[1][:13] + status + self.array[1][14:]
  84.             self.gameArray = self.gameArray[:2] + status + self.gameArray[3:]
  85.         elif coord == "b1":
  86.             self.array[3] = self.array[3][:5] + status + self.array[3][6:]
  87.             self.gameArray = self.gameArray[:3] + status + self.gameArray[4:]
  88.         elif coord == "b2":
  89.             self.array[3] = self.array[3][:9] + status + self.array[3][10:]
  90.             self.gameArray = self.gameArray[:4] + status + self.gameArray[5:]
  91.         elif coord == "b3":
  92.             self.array[3] = self.array[3][:13] + status + self.array[3][14:]
  93.             self.gameArray = self.gameArray[:5] + status + self.gameArray[6:]
  94.         elif coord == "c1":
  95.             self.array[5] = self.array[5][:5] + status + self.array[5][6:]
  96.             self.gameArray = self.gameArray[:6] + status + self.gameArray[7:]
  97.         elif coord == "c2":
  98.             self.array[5] = self.array[5][:9] + status + self.array[5][10:]
  99.             self.gameArray = self.gameArray[:7] + status + self.gameArray[8:]
  100.         elif coord == "c3":
  101.             self.array[5] = self.array[5][:13] + status + self.array[5][14:]
  102.             self.gameArray = self.gameArray[:8] + status
  103.  
  104.     def getPlayer(self):
  105.         return self.player
  106.  
  107.     def switchPlayer(self):
  108.         if self.player == "X":
  109.             self.player = "O"
  110.         else:
  111.             self.player = "X"
  112.  
  113.     def checkComplete(self):
  114.         gameWon = ''
  115.         gameOver = False
  116.  
  117.         for i in range(0,9,3):
  118.             testString = self.gameArray[i] + self.gameArray[i+1] + self.gameArray[i+2]
  119.             #print("testString H = '" + testString + "'")
  120.             if testString == "XXX":
  121.                 gameWon = "X"
  122.                 gameOver = True
  123.                 break
  124.             elif testString == "OOO":
  125.                 gameWon = "O"
  126.                 gameOver = True
  127.                 break
  128.         if not gameOver:
  129.             for i in range(0,3,1):
  130.                 testString = self.gameArray[i] + self.gameArray[i+3] + self.gameArray[i+6]
  131.                 #print("testString V = '" + testString + "'")
  132.                 if testString == "XXX":
  133.                     gameWon = "X"
  134.                     gameOver = True
  135.                     break
  136.                 elif testString == "OOO":
  137.                     gameWon = "O"
  138.                     gameOver = True
  139.                     break
  140.         if not gameOver:
  141.             testString = self.gameArray[0] + self.gameArray[4] + self.gameArray[8]
  142.             if testString == "XXX":
  143.                 gameWon = "X"
  144.                 gameOver = True
  145.             elif testString == "OOO":
  146.                 gameWon = "O"
  147.                 gameOver = True
  148.  
  149.         if not gameOver:
  150.             testString = self.gameArray[2] + self.gameArray[4] + self.gameArray[6]
  151.             if testString == "XXX":
  152.                 gameWon = "X"
  153.                 gameOver = True
  154.             elif testString == "OOO":
  155.                 gameWon = "O"
  156.                 gameOver = True
  157.  
  158.         #test for full grid with no winner
  159.         if not gameOver:
  160.             #no winner yet. Assume game grid is full
  161.             gameOver = True
  162.             # test for gaps in game grid
  163.             if ' ' in self.gameArray:
  164.                 gameOver = False
  165.  
  166.         return gameOver, gameWon
  167.  
  168.  
  169. def getCoords(game):
  170.     goodResponse = ['a1','a2','a3','b1','b2','b3','c1','c2','c3','1a','1b','1c','2a','2b','2c','3a','3b','3c']
  171.     while True:
  172.         response = input("Player '" + game.getPlayer() + "' - Type your coords (e.g. a1) > ")
  173.         response = response.lower()
  174.         if response in goodResponse: # check if legit coords
  175.             #check if coords given in letter+number format
  176.             if response[0].isnumeric():
  177.                 response = response[1] + response[0]
  178.             #check if coords available
  179.             if game.getGrid(response) == " ":
  180.                 break
  181.  
  182.     return response
  183.  
  184.  
  185. def playAgain():
  186.     response = input("Play Again? (Y/N) > ")
  187.     if response.upper() == "Y":
  188.         return True
  189.     else:
  190.         return False
  191.  
  192.  
  193. def main():
  194.     print("Welcome to TicTacToe")
  195.     while True:
  196.         game = grid()
  197.         game.choosePlayer()
  198.         game.printGame()
  199.         while True:
  200.             coords = getCoords(game)
  201.             game.setGrid(coords)
  202.             game.printGame()
  203.             gameOver, gameWon = game.checkComplete()
  204.             if gameOver:
  205.                 break
  206.             game.switchPlayer()
  207.             player = game.getPlayer()
  208.             print()
  209.            
  210.         if gameWon == '':
  211.             print("Game is a DRAW!")
  212.         else:
  213.             print("Player '" + player + "' WINS!")
  214.             game = None
  215.         if not playAgain():
  216.             break
  217.     print("Thank you for playing TicTacToe")
  218.  
  219. main()
  220.  
  221. input("Press Enter to quit...")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement