daily pastebin goal
31%
SHARE
TWEET

Untitled

a guest Jan 12th, 2018 50 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import numpy as np
  2. import random
  3.  
  4.  
  5. # Custom functions
  6. def menu():
  7.     global computer
  8.     end = False
  9.     while not end:
  10.         print "Tic Tac Toe\n1. New game PvP\n2. New game PvC\n0. Exit"
  11.         option = input("Select an option: ")
  12.         while not(option in range(0, 3)):
  13.             option = input("Select a correct option: ")
  14.         if option == 1:
  15.             computer = False
  16.             end = setup_game()
  17.         if option == 2:
  18.             computer = True
  19.             end = setup_game()
  20.         if option == 0:
  21.             end = True
  22.     return 0
  23.  
  24.  
  25. def setup_game():
  26.     print "Setting up new game..."
  27.     #grid = np.zeros((3, 3))
  28.     grid = np.chararray((3, 3))
  29.     grid[:] = '-'
  30.     turn = random.randint(1, 2)
  31.     while turn != 0:
  32.         print "\nPlayer " + str(turn) + "' turn!"
  33.         turn = turn_game(grid, turn)
  34.     global winner
  35.     if winner == 0:
  36.         print "Draw :("
  37.     else:
  38.         draw_game(grid)
  39.         print "\n/////  Winner Player " + str(winner) + "  /////\n"
  40.         answer = raw_input("Play again? (y/n):  ").lower()
  41.         while answer != "y" and answer != 'n':
  42.             print "Select a correct answer."
  43.             answer = raw_input("Play again? (y/n):  ").lower()
  44.         if answer == 'n':
  45.             return True
  46.         return False
  47.  
  48.  
  49. def turn_game(grid, player):
  50.     finish = False
  51.     while not finish:
  52.         draw_game(grid)
  53.         if (player == 2 and not computer) or player == 1:
  54.             column = input("Select a column: ") - 1
  55.             row = input("Select a row: ") - 1
  56.             if column in xrange(0, 3) and row in xrange(0, 3):
  57.                 # Check if position is available
  58.                 if grid[row, column] == '-':
  59.                     grid[row, column] = player_char(player)
  60.                     finish = True
  61.                 else:
  62.                     print "Move not possible, try again."
  63.             else:
  64.                 print "Impossible move, try again."
  65.         else:
  66.             # Computer makes a move
  67.             finish = computer_turn(grid)
  68.     player = check_game(grid, player)
  69.     return player
  70.  
  71.  
  72. def computer_turn(grid):
  73.     move = False
  74.     column = 0
  75.     row = 0
  76.     while not move:
  77.         column = random.randint(0, 2)
  78.         row = random.randint(0, 2)
  79.         if grid[row, column] == "-":
  80.             move = True
  81.     print "Computer movement."
  82.     grid[row, column] = "O"
  83.     return True
  84.  
  85.  
  86. def check_game(grid, player):
  87.     win = False
  88.     # Get width and height
  89.     w = grid.shape[0]
  90.     h = grid.shape[1]
  91.     # Horizontal check
  92.     for i in xrange(h):
  93.         count = 0
  94.         for j in xrange(w):
  95.             if grid[i, j] == player_char(player):
  96.                 count += 1
  97.         if count >= 3:
  98.             win = True
  99.     # Vertical check
  100.     for j in xrange(w):
  101.         count = 0
  102.         for i in xrange(h):
  103.             if grid[i, j] == player_char(player):
  104.                 count += 1
  105.         if count >= 3:
  106.             win = True
  107.     # Diagonal check
  108.     count = 0
  109.     for i in xrange(h):
  110.         if grid[i, i] == player_char(player):
  111.             count += 1
  112.         if count >= 3:
  113.             win = True
  114.     count = 0
  115.     for i in xrange(h):
  116.         if grid[abs(i - 2), i] == player_char(player):
  117.             count += 1
  118.         if count >= 3:
  119.             win = True
  120.  
  121.     # Change player or set winner
  122.     if not win:
  123.         if player == 1:
  124.             player = 2
  125.         else:
  126.             player = 1
  127.     else:
  128.         global winner
  129.         winner = player
  130.         player = 0
  131.     return player
  132.  
  133.  
  134. def player_char(player):
  135.     if player == 1:
  136.         return "X"
  137.     else:
  138.         return "O"
  139.  
  140.  
  141. def draw_game(grid):
  142.     # Get width and height
  143.     w = grid.shape[0]
  144.     h = grid.shape[1]
  145.     # Draw grid
  146.     for i in xrange(h):
  147.         row = "\t"
  148.         for j in xrange(w):
  149.             row += grid[i, j] + "\t"
  150.         print row
  151.  
  152. # Main
  153. winner = 0
  154. computer = False
  155. menu()
  156. print "Program ended."
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top