Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # T I C T A C T O E
- # My first game implemented into WarhawkOS!
- # Have fun!
- # Copyright Warhawk947. All Rights Reserved.
- from systemUtils import systemUtils
- from termcolor import colored
- from random import choice, randint
- from copy import deepcopy
- from time import sleep
- player1, player2 = ['X', 'O']
- def showInstructions():
- systemUtils.clear()
- print('I N S T R U C T I O N S')
- print()
- print('Each box in the Tic-Tac-Toe box is represented by a number')
- drawBoard([0, 1, 2, 3, 4, 5, 6, 7, 8])
- input('Press enter to continue...')
- systemUtils.clear()
- print('Type any of the numbers to make a move. The computer then will make')
- print('a move to counter yours! Have fun!')
- input('Press enter to continue...')
- systemUtils.clear()
- def getRandomTurn():
- if randint(1, 2) == 1:
- return 'player'
- else:
- return 'computer'
- def getNewBoard():
- board = []
- for x in range(9):
- board.append(' ')
- return board
- def drawBoard(board):
- print('%s|%s|%s' % (board[6], board[7], board[8]))
- print('-+-+-')
- print('%s|%s|%s' % (board[3], board[4], board[5]))
- print('-+-+-')
- print('%s|%s|%s' % (board[0], board[1], board[2]))
- def isWinner(b, l):
- return ((b[6] == l and b[3] == l and b[0] == l) or # Top row
- (b[7] == l and b[4] == l and b[1] == l) or # Middle row
- (b[8] == l and b[5] == l and b[2] == l) or # Bottom row
- (b[6] == l and b[7] == l and b[8] == l) or # Left column
- (b[3] == l and b[4] == l and b[5] == l) or # Middle column
- (b[0] == l and b[1] == l and b[2] == l) or # Right column
- (b[6] == l and b[4] == l and b[2] == l) or # Left diagonal
- (b[8] == l and b[4] == l and b[0] == l)) # Right diagonal
- def isSpaceFree(board, pos):
- if board[pos] != ' ':
- return False
- return True
- def isSpaceFreeOther(board, pos):
- if pos != ' ':
- return False
- return True
- def makeMove(board, pos, tile):
- board[int(pos)] = tile
- def getBoardCopy(board):
- return deepcopy(board)
- def isBoardFull(board):
- for x in range(len(board)):
- if isSpaceFreeOther(board, board[x]):
- return False
- return True
- def makeRandomMoveFromList(board, moves):
- possibleMoves = []
- for x in range(len(moves)):
- if isSpaceFree(board, moves[x]):
- possibleMoves.append(moves[x])
- if possibleMoves == []:
- return None
- move = choice(possibleMoves)
- return move
- def computerMove(board, tile, ptile):
- # First see if we can win.
- for x in range(9):
- boardCopy = getBoardCopy(board)
- if isSpaceFree(boardCopy, x):
- makeMove(boardCopy, x, tile)
- if isWinner(boardCopy, tile):
- makeMove(board, x, tile)
- return None
- # Then block any move that the player could use to win
- for x in range(9):
- boardCopy = getBoardCopy(board)
- if isSpaceFree(boardCopy, x):
- makeMove(boardCopy, x, ptile)
- if isWinner(boardCopy, ptile):
- makeMove(board, x, tile)
- return None
- # Attempt to claim the center
- if isSpaceFree(board, 4):
- makeMove(board, 4, tile)
- return None
- # Attempt on the top and bottom rows
- move = makeRandomMoveFromList(board, [6, 7, 8, 0, 1, 2])
- if move != None:
- makeMove(board, move, tile)
- return None
- # Attempt to move on the left and right columns
- move = makeRandomMoveFromList(board, [6, 3, 0, 8, 5, 2])
- if move != None:
- makeMove(board, move, tile)
- def tictactoe():
- global player1, player2
- mounted = colored('TicTacToe', 'green')
- systemUtils.clear()
- y = colored('Y', 'green')
- n = colored('N', 'red')
- if systemUtils.getInfo()['askForInstructionsTicTacToe'] == 'TRUE':
- instructions = input('[%s] Do you want to read the instruction (%s/%s)?>' % (mounted, y, n))
- if instructions.lower().strip().startswith('y'):
- showInstructions()
- while True:
- print('T I C T A C T O E')
- print()
- letter = input('[%s] What letter do you want to be? (X/O)>' % mounted)
- if letter.lower().strip() in 'xo':
- if letter.lower().strip() == 'o':
- player1 = 'O'
- player2 = 'X'
- systemUtils.clear()
- break
- else:
- systemUtils.clear()
- turn = getRandomTurn()
- board = getNewBoard()
- input('[%s] The %s will go first. Press enter to continue.' % (mounted, turn))
- systemUtils.clear()
- winner = 'someone'
- while True:
- if isWinner(board, player1):
- winner = 'player'
- break
- if isWinner(board, player2):
- winner = 'computer'
- break
- if isBoardFull(board):
- winner = 'tie'
- break
- if turn == 'player':
- drawBoard(board)
- while True:
- move = input('[%s] Enter your move (0-8)>' % mounted)
- if move.isdigit() and len(str(move)) == 1 and move in '012345678' and isSpaceFree(board, int(move)):
- move = int(move)
- break
- makeMove(board, move, player1)
- turn = 'computer'
- elif turn == 'computer':
- computerMove(board, player2, player1)
- systemUtils.clear()
- print('[%s] The computer is going...' % mounted)
- sleep(1)
- print('[%s] Hmm...' % mounted)
- sleep(0.5)
- systemUtils.clear()
- print('The computer has went.')
- turn = 'player'
- systemUtils.clear()
- drawBoard(board)
- if winner != 'tie':
- print('[%s] The %s has won!' % (mounted, winner))
- if winner == 'player':
- print('[%s] Congrats!' % mounted)
- elif winner == 'computer':
- print('[%s] Try again next time!' % mounted)
- else:
- print('[%s] It was a tie!' % mounted)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement