Saturday, September 5, 2015

Flow Chart




Click here to view the flowchart

Pseudocode

     
  import random
  def drawBoard(board):
      print('   |   |')
      print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9])
      print('   |   |')
      print('-----------')
      print('   |   |')
      print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6])
      print('   |   |')
      print('-----------')
      print('   |   |')
      print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3])
      print('   |   |')
  def inputPlayerLetter():
      letter = ''
      while not (letter == 'X' or letter == 'O'):
          print('Do you want to be X or O?')
          letter = input().upper()
      if letter == 'X':
          return ['X', 'O']
      else:
          return ['O', 'X']
  def whoGoesFirst():
      if random.randint(0, 1) == 0:
          return 'computer'
      else:
          return 'player'
  def playAgain():
      print('Do you want to play again? (yes or no)')
      return input().lower().startswith('y')
  def makeMove(board, letter, move):
      board[move] = letter
  def isWinner(bo, le):
      return ((bo[7] == le and bo[8] == le and bo[9] == le) or # across the top
      (bo[4] == le and bo[5] == le and bo[6] == le) or # across the middle
      (bo[1] == le and bo[2] == le and bo[3] == le) or # across the bottom
      (bo[7] == le and bo[4] == le and bo[1] == le) or # down the left side
      (bo[8] == le and bo[5] == le and bo[2] == le) or # down the middle
      (bo[9] == le and bo[6] == le and bo[3] == le) or # down the right side
      (bo[7] == le and bo[5] == le and bo[3] == le) or # diagonal
      (bo[9] == le and bo[5] == le and bo[1] == le)) # diagonal
  def getBoardCopy(board):
      dupeBoard = []

      for i in board:
          dupeBoard.append(i)

      return dupeBoard
  def isSpaceFree(board, move):
      return board[move] == ' '
  def getPlayerMove(board):
      move = ' '
      while move not in '1 2 3 4 5 6 7 8 9'.split() or not isSpaceFree(board,                    int(move)):
          print('What is your next move? (1-9)')
          move = input()
      return int(move)
  def chooseRandomMoveFromList(board, movesList):
      possibleMoves = []
      for i in movesList:
       if isSpaceFree(board, i):
              possibleMoves.append(i)
      if len(possibleMoves) != 0:
          return random.choice(possibleMoves)
      else:
          return None
   def getComputerMove(board, computerLetter):
      if computerLetter == 'X':
          playerLetter = 'O'
     else:
         playerLetter = 'X'
     for i in range(1, 10):
         copy = getBoardCopy(board)
         if isSpaceFree(copy, i):
             makeMove(copy, computerLetter, i)
             if isWinner(copy, computerLetter):
                 return i
     for i in range(1, 10):
         copy = getBoardCopy(board)
         if isSpaceFree(copy, i):
             makeMove(copy, playerLetter, i)
             if isWinner(copy, playerLetter):
                return i
     move = chooseRandomMoveFromList(board, [1, 3, 7, 9])
     if move != None:
         return move
     if isSpaceFree(board, 5):
         return 5
     return chooseRandomMoveFromList(board, [2, 4, 6, 8])
 def isBoardFull(board):
     for i in range(1, 10):
         if isSpaceFree(board, i):
             return False
     return True
 print('Welcome to Tic Tac Toe!')
 while True:
     theBoard = [' '] * 10
     playerLetter, computerLetter = inputPlayerLetter()
     turn = whoGoesFirst()
     print('The ' + turn + ' will go first.')
     gameIsPlaying = True
     while gameIsPlaying:
         if turn == 'player':
             drawBoard(theBoard)
             move = getPlayerMove(theBoard)
             makeMove(theBoard, playerLetter, move)
             if isWinner(theBoard, playerLetter):
                 drawBoard(theBoard)
                 print('Hooray! You have won the game!')
                 gameIsPlaying = False
             else:
                 if isBoardFull(theBoard):
                     drawBoard(theBoard)
                     print('The game is a tie!')
                     break
                 else:
                     turn = 'computer'
         else:
             move = getComputerMove(theBoard, computerLetter)
             makeMove(theBoard, computerLetter, move)
             if isWinner(theBoard, computerLetter):
                 drawBoard(theBoard)
                 print('The computer has beaten you! You lose.')
                 gameIsPlaying = False
             else:
                 if isBoardFull(theBoard):
                     drawBoard(theBoard)
                     print('The game is a tie!')
                     break
                 else:
                     turn = 'player
     if not playAgain():
         break

Reference


  1. "tic-tac-toe." Oxford Dictionary of Rhymes. 2007. Retrieved September 05, 2015 from Encyclopedia.com: http://www.encyclopedia.com/doc/1O233-tictactoe.html

Literature review

1.Exploring the Possibilities of Using Tic-Tac-Toe to Think and Communicate about Mathematics  (Australian Mathematics Teacher,2008)
Doing mathematics, and thinking about how you are doing it at the same time, are not the easiest things to do. It is even more difficult if students are not aware that they should be attempting both processes at the same time. They are likely to concentrate on the immediate task of "doing" the mathematics, rather than trying to access the deeper process. Yet it is this deeper process that is really at the heart of mathematics. In turn, accessing this deeper process requires in part some command of the appropriate rational/logical language so communication with yourself and others can proceed effectively and efficiently. This article discusses the possibilities of using students' explorations of the traditional strategy game "tic-tac-toe," and some extensions, to set up situations for students to discuss and examine this process.

2.Tic-Tac-Toe Played as a Word Game (Word Ways,2010)
In Problem 48 in Your Move (McGraw-Hill, 1971), David Silverman described a linguistic version of tic-tac-toe consisting of a stockpile of the words ARMY, CHAT, FISH, GIRL, HORN, KNIT, SOUP, SWAN and VOTE. Players alternately select words, and the first to collect three words sharing a common letter is the winner.
In the single-letter analogue of Silverman's game, players draw alternately from a stockpile of nine different letters; the first to select the letters forming one of a specified list of nine words is the winner. To make it easy to remember these words, they can be written in the form of a 3-by-3 word square in which both diagonals are also words.
Squares are easy to find if you allow abbreviations, acronyms, proper names or foreign words. However, I'm half-convinced that there is no solution with common everyday words. It's almost spooky how you can find seven words but not the eighth. My near-misses:
 NOS   ARE   HOP   BED   FLU   DOS EAT   SIN   EAR   OAR   AIR
EAT WRY   POD   SKY   WHY   TEN   WRY 
In the first square, the first word can be used in a sentence such as "The NOS have it" summarizing a vote. …

Thursday, September 3, 2015

2nd update : Brief Explain

In this project, I am going to build a Tic-Tac-Toe software which enable us to play with computer. With this program, user can play the game with bot when alone. 

Using GUI-Tkinter for the interface, i will try to make the software user friendly, and state the step while the game is running.

Using Codecademy to improve my basic knowledge about python language and make my project run smoothly and nicely.

Here are the website i used