pawlack

Untitled

Jan 6th, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.07 KB | None | 0 0
  1.  
  2. #another tic tac toe game
  3. import random
  4. from random import randint
  5. #gameboard interface
  6.  
  7. gameboard = [[" "] * 3, [" "] * 3, [" "] * 3] # 2d Array
  8. input_var1 = [["a1", "b1", "c1"], ["a2", "b2", "c2"], ["a3", "b3", "c3"]]
  9. input_var2 = [["1a", "1b", "1c"], ["2a", "2b", "2c"], ["3a", "3b", "3c"]]
  10. available_moves = ["a1", "b1", "c1", "a2", "b2", "c2", "a3", "b3", "c3"]
  11. rows = 3
  12. columns = 3
  13. player_symbols = ["_", "X", "O"]
  14. current_player = 1
  15.  
  16. def end_game():
  17.  
  18.     global gameboard
  19.     global available_moves
  20.     global current_player
  21.  
  22.     replay = input("Do you want to play again? Y/N: ")
  23.  
  24.     if replay == "Y" or replay == "y":
  25.         gameboard = [[" "] * 3, [" "] * 3, [" "] * 3] # 2d Array
  26.         available_moves = ["a1", "b1", "c1", "a2", "b2", "c2", "a3", "b3", "c3"]
  27.         current_player = 1
  28.         main_game_loop()
  29.    
  30.  
  31.     else:
  32.         quit()
  33.  
  34. def draw_gameboard(): #this is our game output
  35.     print("    A    B    C")
  36.     for i in range(len(gameboard)):
  37.         print(i+1, (gameboard[i]))
  38.  
  39. def get_player_input():
  40.     print("It's your turn, proper input example is 'a3', or 'b1'. Enter 'x' to quit")
  41.     pos = input("Enter position you want to take:")
  42.     if pos == "x":
  43.         quit()
  44.     return pos
  45.  
  46. def get_ai_input():
  47.  
  48.     column_check = []
  49.  
  50. #horizontal logic
  51.     for y in range(len(gameboard[0])):
  52.         for i in range(len(gameboard[y])):
  53.             if gameboard[y].count(gameboard[y][i]) == len(gameboard[y])-1 and gameboard[y][i] == "O":
  54.                 for x in range(len(gameboard[y])):
  55.                     if input_var1[y][x] in available_moves:
  56.                         pos = input_var1[y][x]
  57.                         return pos
  58.  
  59.     for y in range(len(gameboard[0])):
  60.         for i in range(len(gameboard[y])):
  61.             if gameboard[y].count(gameboard[y][i]) == len(gameboard[y])-1 and gameboard[y][i] == "X":
  62.                 for x in range(len(gameboard[y])):
  63.                     if input_var1[y][x] in available_moves:
  64.                         pos = input_var1[y][x]
  65.                         return pos
  66.                        
  67.  
  68. #vertical logic
  69.     for i in range(len(gameboard)):
  70.         for row in gameboard:
  71.             column_check.append(row[i])
  72.         for j in range(len(column_check)):
  73.             if column_check.count(column_check[j]) == len(column_check)-1 and column_check[j] == "O":
  74.                 for row in input_var1:
  75.                     if input_var1[input_var1.index(row)][i] in available_moves:
  76.                         pos = input_var1[input_var1.index(row)][i] 
  77.                         return pos
  78.         #print(column_check)
  79.         column_check.clear()
  80.  
  81.     for i in range(len(gameboard)):
  82.         for row in gameboard:
  83.             column_check.append(row[i])
  84.         for j in range(len(column_check)):
  85.             if column_check.count(column_check[j]) == len(column_check)-1 and column_check[j] == "X":
  86.                 for row in input_var1:
  87.                     if input_var1[input_var1.index(row)][i] in available_moves:
  88.                         pos = input_var1[input_var1.index(row)][i] 
  89.                         return pos
  90.         #print(column_check)
  91.         column_check.clear()
  92.  
  93. #diagonal right logic
  94.  
  95.     for counter, row in enumerate(gameboard):
  96.         column_check.append(row[counter])
  97.     for i in range(len(gameboard)):
  98.         if column_check.count(column_check[i]) == len(column_check)-1 and column_check[i] != " ":
  99.             for counter, row in enumerate(input_var1):
  100.                 if input_var1[input_var1.index(row)][counter] in available_moves:
  101.                     pos = input_var1[input_var1.index(row)][counter]
  102.                     return pos
  103.  
  104.     column_check.clear()
  105.  
  106. #diagonal left logic
  107.  
  108.     for counter, row in enumerate(gameboard):
  109.         column_check.append(row[-counter-1])
  110.     for i in range(len(gameboard)):
  111.         if column_check.count(column_check[i]) == len(column_check)-1 and column_check[i] != " ":
  112.             for counter, row in enumerate(input_var1):
  113.                 if input_var1[input_var1.index(row)][-counter-1] in available_moves:
  114.                     pos = input_var1[input_var1.index(row)][-counter-1]
  115.                     return pos
  116.  
  117.     if "b2" in available_moves:
  118.         pos = "b2"
  119.         return pos
  120.  
  121.     else:
  122.         pos = available_moves[randint(0, (len(available_moves))-1)]
  123.         return pos
  124.  
  125. def update_game(player_number):
  126.     global gameboard
  127.     global input_var1
  128.     global current_player
  129.  
  130.     if player_number == 1:
  131.         pos = get_player_input()
  132.     else:
  133.         pos = get_ai_input()
  134.  
  135.     if pos in available_moves:
  136.         available_moves.remove(pos)
  137.  
  138.         for x in range(len(input_var1)):
  139.             for y in range(len(input_var1[x])):
  140.                 if input_var1[x][y] == pos or input_var2[x][y] == pos:
  141.                     gameboard[x][y] = player_symbols[player_number]
  142.                     print(" ")
  143.                     print("Player", player_number, "move: ")
  144.     else:
  145.         print("this position is invalid or already taken")
  146.         update_game(player_number)
  147.  
  148. def check_for_winners():
  149.     global current_player
  150.     column_check = []
  151. #horizontal
  152.     for x in range(len(gameboard[0])):
  153.         if gameboard[x].count(gameboard[x][0]) == len(gameboard[x]) and gameboard[x][0] != " ":
  154.             #there is horizontal winner
  155.             print("We have a winner - horizontal", "Player ", current_player, " has won!")
  156.             draw_gameboard()
  157.             end_game()
  158. #vertical
  159.     for i in range(len(gameboard)):
  160.         for row in gameboard:
  161.             column_check.append(row[i])
  162.         if column_check.count(column_check[0]) == len(column_check) and column_check[0] != " ":
  163.             #there is vertical winner
  164.             print("We have a winner - vertical", "Player ", current_player, " has won!")
  165.             draw_gameboard()
  166.             end_game()
  167.         else:
  168.             column_check.clear()
  169. #diagonal right
  170.     for counter, row in enumerate(gameboard):
  171.         column_check.append(row[counter])
  172.     if column_check.count(column_check[0]) == len(column_check) and column_check[0] != " ":
  173.             #there is diagonal winner
  174.             print("We have a winner - diagonal", "Player ", current_player, " has won!")
  175.             draw_gameboard()
  176.             end_game()
  177.     else:
  178.         column_check.clear()
  179.  
  180. #diagonal left
  181.     for counter, row in enumerate(gameboard):
  182.         column_check.append(row[-counter-1])
  183.     if column_check.count(column_check[0]) == len(column_check) and column_check[0] != " ":
  184.             #there is diagonal winner
  185.             print("We have a winner - diagonal", "Player ", current_player, " has won!")
  186.             draw_gameboard()
  187.             end_game()
  188.     else:
  189.         column_check.clear()
  190.  
  191. #check for TIE
  192.     if len(available_moves) == 0:
  193.         print("It's a TIE!")
  194.         end_game()
  195.  
  196.     if current_player == 1:
  197.         current_player = 2
  198.     else:
  199.         current_player = 1
  200.  
  201. def main_game_loop():
  202.     game_ended = False
  203.     while game_ended == False:
  204.        
  205.         draw_gameboard()
  206.         update_game(current_player)
  207.         check_for_winners()
  208.  
  209.     else:
  210.         quit()
  211.  
  212. main_game_loop()
Advertisement
Add Comment
Please, Sign In to add comment