Advertisement
warhawk947_YT

TicTacToe WarhawkOS

Dec 10th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.52 KB | None | 0 0
  1. # T I C T A C T O E
  2. # My first game implemented into WarhawkOS!
  3. # Have fun!
  4. # Copyright Warhawk947. All Rights Reserved.
  5.  
  6.  
  7. from systemUtils import systemUtils
  8. from termcolor import colored
  9. from random import choice, randint
  10. from copy import deepcopy
  11. from time import sleep
  12.  
  13. player1, player2 = ['X', 'O']
  14.  
  15. def showInstructions():
  16.   systemUtils.clear()
  17.   print('I N S T R U C T I O N S')
  18.   print()
  19.   print('Each box in the Tic-Tac-Toe box is represented by a number')
  20.   drawBoard([0, 1, 2, 3, 4, 5, 6, 7, 8])
  21.   input('Press enter to continue...')
  22.   systemUtils.clear()
  23.   print('Type any of the numbers to make a move. The computer then will make')
  24.   print('a move to counter yours! Have fun!')
  25.   input('Press enter to continue...')
  26.   systemUtils.clear()
  27.  
  28.  
  29. def getRandomTurn():
  30.   if randint(1, 2) == 1:
  31.     return 'player'
  32.   else:
  33.     return 'computer'
  34.  
  35. def getNewBoard():
  36.   board = []
  37.  
  38.   for x in range(9):
  39.     board.append(' ')
  40.  
  41.   return board
  42.  
  43. def drawBoard(board):
  44.   print('%s|%s|%s' % (board[6], board[7], board[8]))
  45.   print('-+-+-')
  46.   print('%s|%s|%s' % (board[3], board[4], board[5]))
  47.   print('-+-+-')
  48.   print('%s|%s|%s' % (board[0], board[1], board[2]))
  49.  
  50.  
  51. def isWinner(b, l):
  52.   return ((b[6] == l and b[3] == l and b[0] == l) or # Top row
  53.   (b[7] == l and b[4] == l and b[1] == l) or # Middle row
  54.   (b[8] == l and b[5] == l and b[2] == l) or # Bottom row
  55.   (b[6] == l and b[7] == l and b[8] == l) or # Left column
  56.   (b[3] == l and b[4] == l and b[5] == l) or # Middle column
  57.   (b[0] == l and b[1] == l and b[2] == l) or # Right column
  58.   (b[6] == l and b[4] == l and b[2] == l) or # Left diagonal
  59.   (b[8] == l and b[4] == l and b[0] == l))   # Right diagonal
  60.  
  61. def isSpaceFree(board, pos):
  62.   if board[pos] != ' ':
  63.     return False
  64.   return True
  65.  
  66. def isSpaceFreeOther(board, pos):
  67.   if pos != ' ':
  68.     return False
  69.   return True
  70.  
  71. def makeMove(board, pos, tile):
  72.   board[int(pos)] = tile
  73.  
  74. def getBoardCopy(board):
  75.   return deepcopy(board)
  76.  
  77. def isBoardFull(board):
  78.   for x in range(len(board)):
  79.     if isSpaceFreeOther(board, board[x]):
  80.       return False
  81.   return True
  82.  
  83. def makeRandomMoveFromList(board, moves):
  84.   possibleMoves = []
  85.   for x in range(len(moves)):
  86.     if isSpaceFree(board, moves[x]):
  87.       possibleMoves.append(moves[x])
  88.  
  89.   if possibleMoves == []:
  90.     return None
  91.   move = choice(possibleMoves)
  92.   return move
  93.  
  94. def computerMove(board, tile, ptile):
  95.   # First see if we can win.
  96.   for x in range(9):
  97.     boardCopy = getBoardCopy(board)
  98.     if isSpaceFree(boardCopy, x):
  99.       makeMove(boardCopy, x, tile)
  100.       if isWinner(boardCopy, tile):
  101.         makeMove(board, x, tile)
  102.         return None
  103.  
  104.   # Then block any move that the player could use to win
  105.   for x in range(9):
  106.     boardCopy = getBoardCopy(board)
  107.     if isSpaceFree(boardCopy, x):
  108.       makeMove(boardCopy, x, ptile)
  109.       if isWinner(boardCopy, ptile):
  110.         makeMove(board, x, tile)
  111.         return None
  112.  
  113.   # Attempt to claim the center
  114.   if isSpaceFree(board, 4):
  115.     makeMove(board, 4, tile)
  116.     return None
  117.  
  118.   # Attempt on the top and bottom rows
  119.   move = makeRandomMoveFromList(board, [6, 7, 8, 0, 1, 2])
  120.   if move != None:
  121.     makeMove(board, move, tile)
  122.     return None
  123.  
  124.   # Attempt to move on the left and right columns
  125.   move = makeRandomMoveFromList(board, [6, 3, 0, 8, 5, 2])
  126.   if move != None:
  127.     makeMove(board, move, tile)
  128.  
  129.  
  130. def tictactoe():
  131.   global player1, player2
  132.   mounted = colored('TicTacToe', 'green')
  133.   systemUtils.clear()
  134.   y = colored('Y', 'green')
  135.   n = colored('N', 'red')
  136.  
  137.   if systemUtils.getInfo()['askForInstructionsTicTacToe'] == 'TRUE':
  138.     instructions = input('[%s] Do you want to read the instruction (%s/%s)?>' % (mounted, y, n))
  139.     if instructions.lower().strip().startswith('y'):
  140.       showInstructions()
  141.  
  142.   while True:
  143.     print('T I C T A C T O E')
  144.     print()
  145.    
  146.     letter = input('[%s] What letter do you want to be? (X/O)>' % mounted)
  147.     if letter.lower().strip() in 'xo':
  148.       if letter.lower().strip() == 'o':
  149.         player1 = 'O'
  150.         player2 = 'X'
  151.       systemUtils.clear()
  152.       break
  153.     else:
  154.       systemUtils.clear()
  155.  
  156.   turn = getRandomTurn()
  157.   board = getNewBoard()
  158.   input('[%s] The %s will go first. Press enter to continue.' % (mounted, turn))
  159.   systemUtils.clear()
  160.  
  161.   winner = 'someone'
  162.   while True:
  163.  
  164.     if isWinner(board, player1):
  165.       winner = 'player'
  166.       break
  167.  
  168.     if isWinner(board, player2):
  169.       winner = 'computer'
  170.       break
  171.     if isBoardFull(board):
  172.       winner = 'tie'
  173.       break
  174.  
  175.     if turn == 'player':
  176.       drawBoard(board)
  177.       while True:
  178.         move = input('[%s] Enter your move (0-8)>' % mounted)
  179.         if move.isdigit() and len(str(move)) == 1 and move in '012345678' and isSpaceFree(board, int(move)):
  180.           move = int(move)
  181.           break
  182.       makeMove(board, move, player1)
  183.       turn = 'computer'
  184.    
  185.     elif turn == 'computer':
  186.       computerMove(board, player2, player1)
  187.  
  188.       systemUtils.clear()
  189.       print('[%s] The computer is going...' % mounted)
  190.       sleep(1)
  191.       print('[%s] Hmm...' % mounted)
  192.       sleep(0.5)
  193.       systemUtils.clear()
  194.       print('The computer has went.')
  195.       turn = 'player'
  196.  
  197.   systemUtils.clear()
  198.   drawBoard(board)
  199.  
  200.   if winner != 'tie':
  201.     print('[%s] The %s has won!' % (mounted, winner))
  202.     if winner == 'player':
  203.       print('[%s] Congrats!' % mounted)
  204.     elif winner == 'computer':
  205.       print('[%s] Try again next time!' % mounted)
  206.   else:
  207.     print('[%s] It was a tie!' % mounted)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement