1#Tic Tac Toe game in python by techwithtim
2
3board = [' ' for x in range(10)]
4
5def insertLetter(letter, pos):
6 board[pos] = letter
7
8def spaceIsFree(pos):
9 return board[pos] == ' '
10
11def printBoard(board):
12 print(' | |')
13 print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3])
14 print(' | |')
15 print('-----------')
16 print(' | |')
17 print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6])
18 print(' | |')
19 print('-----------')
20 print(' | |')
21 print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9])
22 print(' | |')
23
24def isWinner(bo, le):
25 return (bo[7] == le and bo[8] == le and bo[9] == le) or (bo[4] == le and bo[5] == le and bo[6] == le) or(bo[1] == le and bo[2] == le and bo[3] == le) or(bo[1] == le and bo[4] == le and bo[7] == le) or(bo[2] == le and bo[5] == le and bo[8] == le) or(bo[3] == le and bo[6] == le and bo[9] == le) or(bo[1] == le and bo[5] == le and bo[9] == le) or(bo[3] == le and bo[5] == le and bo[7] == le)
26
27def playerMove():
28 run = True
29 while run:
30 move = input('Please select a position to place an \'X\' (1-9): ')
31 try:
32 move = int(move)
33 if move > 0 and move < 10:
34 if spaceIsFree(move):
35 run = False
36 insertLetter('X', move)
37 else:
38 print('Sorry, this space is occupied!')
39 else:
40 print('Please type a number within the range!')
41 except:
42 print('Please type a number!')
43
44
45def compMove():
46 possibleMoves = [x for x, letter in enumerate(board) if letter == ' ' and x != 0]
47 move = 0
48
49 for let in ['O', 'X']:
50 for i in possibleMoves:
51 boardCopy = board[:]
52 boardCopy[i] = let
53 if isWinner(boardCopy, let):
54 move = i
55 return move
56
57 cornersOpen = []
58 for i in possibleMoves:
59 if i in [1,3,7,9]:
60 cornersOpen.append(i)
61
62 if len(cornersOpen) > 0:
63 move = selectRandom(cornersOpen)
64 return move
65
66 if 5 in possibleMoves:
67 move = 5
68 return move
69
70 edgesOpen = []
71 for i in possibleMoves:
72 if i in [2,4,6,8]:
73 edgesOpen.append(i)
74
75 if len(edgesOpen) > 0:
76 move = selectRandom(edgesOpen)
77
78 return move
79
80def selectRandom(li):
81 import random
82 ln = len(li)
83 r = random.randrange(0,ln)
84 return li[r]
85
86
87def isBoardFull(board):
88 if board.count(' ') > 1:
89 return False
90 else:
91 return True
92
93def main():
94 print('Welcome to Tic Tac Toe!')
95 printBoard(board)
96
97 while not(isBoardFull(board)):
98 if not(isWinner(board, 'O')):
99 playerMove()
100 printBoard(board)
101 else:
102 print('Sorry, O\'s won this time!')
103 break
104
105 if not(isWinner(board, 'X')):
106 move = compMove()
107 if move == 0:
108 print('Tie Game!')
109 else:
110 insertLetter('O', move)
111 print('Computer placed an \'O\' in position', move , ':')
112 printBoard(board)
113 else:
114 print('X\'s won this time! Good Job!')
115 break
116
117 if isBoardFull(board):
118 print('Tie Game!')
119
120while True:
121 answer = input('Do you want to play again? (Y/N)')
122 if answer.lower() == 'y' or answer.lower == 'yes':
123 board = [' ' for x in range(10)]
124 print('-----------------------------------')
125 main()
126 else:
127 break
1def tic_tac_toe():
2 board = [1, 2, 3, 4, 5, 6, 7, 8, 9]
3 end = False
4 win_commbinations = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (0, 3, 6), (1, 4, 7), (2, 5, 8), (0, 4, 8), (2, 4, 6))
5
6 def draw():
7 print(board[0], board[1], board[2])
8 print(board[3], board[4], board[5])
9 print(board[6], board[7], board[8])
10 print()
11
12 def p1():
13 n = choose_number()
14 if board[n] == "X" or board[n] == "O":
15 print("\nYou can't go there. Try again")
16 p1()
17 else:
18
19 board[n] = "X"
20
21 def p2():
22 n = choose_number()
23 if board[n] == "X" or board[n] == "O":
24 print("\nYou can't go there. Try again")
25 p2()
26 else:
27 board[n] = "O"
28
29 def choose_number():
30 while True:
31 while True:
32 a = input()
33 try:
34 a = int(a)
35 a -= 1
36 if a in range(0, 9):
37 return a
38 else:
39 print("\nThat's not on the board. Try again")
40 continue
41 except ValueError:
42 print("\nThat's not a number. Try again")
43 continue
44
45 def check_board():
46 count = 0
47 for a in win_commbinations:
48 if board[a[0]] == board[a[1]] == board[a[2]] == "X":
49 print("Player 1 Wins!\n")
50 print("Congratulations!\n")
51 return True
52
53 if board[a[0]] == board[a[1]] == board[a[2]] == "O":
54 print("Player 2 Wins!\n")
55 print("Congratulations!\n")
56 return True
57 for a in range(9):
58 if board[a] == "X" or board[a] == "O":
59 count += 1
60 if count == 9:
61 print("The game ends in a Tie\n")
62 return True
63
64 while not end:
65 draw()
66 end = check_board()
67 if end == True:
68 break
69 print("Player 1 choose where to place a cross")
70 p1()
71 print()
72 draw()
73 end = check_board()
74 if end == True:
75 break
76 print("Player 2 choose where to place a nought")
77 p2()
78 print()
79
80 if input("Play again (y/n)\n") == "y":
81 print()
82 tic_tac_toe()
83
84tic_tac_toe()
85
1board = ['-', '-', '-',
2 '-', '-', '-',
3 '-', '-', '-']
4gameplay = [1, 0, 1, 0, 1, 0, 1, 0, 1]
5def display_board():
6 print(board[0] + '|' + board[1] + '|' + board[2])
7 print(board[3] + '|' + board[4] + '|' + board[5])
8 print(board[6] + '|' + board[7] + '|' + board[8])
9
10def win_check():
11 # Row Check
12 for col in range(7):
13 if board[col] is board[col+1] is board[col+2] == 'X':
14 print('You win')
15 return True
16 if board[col] is board[col+1] is board[col+2] == 'O':
17 print('You win')
18 return True
19
20 # Column Check
21 for row in range(3):
22 if board[row] is board[row+3] is board[row+6] == 'X':
23 print('You win')
24 return True
25 if board[row] is board[row+3] is board[row+6] == 'O':
26 print('You win')
27 return True
28
29 # Diagonal Check
30 dia = 0
31 if board[dia] is board[dia+4] is board[dia+8] == 'X':
32 print('You win')
33 display_board()
34 return True
35 elif board[dia] is board[dia+4] is board[dia+8] == 'O':
36 print('You win')
37 display_board()
38 return True
39 dia = 2
40 if board[dia] is board[dia+2] is board[dia+4] == 'X':
41 print('You win')
42 display_board()
43 return True
44 elif board[dia] is board[dia+2] is board[dia+4] == 'O':
45 print('You win')
46 display_board()
47 return True
48
49def play_game():
50 i = 0
51 if gameplay[i] == 1:
52 board[val] = 'X'
53 gameplay.pop(i)
54 res = win_check()
55 if res is True:
56 return True
57 else:
58 display_board()
59 inval()
60 else:
61 board[val] = 'O'
62 gameplay.pop(i)
63 res = win_check()
64 if res is True:
65 return True
66 else:
67 display_board()
68 inval()
69
70
71def inval():
72 global val
73 val = int(input('Choose the values from 0 to 8'))
74 try:
75 if val<=8 and val>=0:
76 for item in range(9):
77 if item == val:
78 res = play_game()
79 if res is True:
80 break
81 break
82 else:
83 print('Enter Valid Input!!!!')
84 inval()
85
86 except TypeError:
87 print('Enter Valid Input!!!!')
88 inval()
89
90
91
92display_board()
93inval()
1import time
2import sys
3
4TITLES = " A B C\n"
5INIT_BOARD = "| / | / | / |\n"
6A, B, C = 4, 8, 12
7# creates the game board
8board = [f"{x} {INIT_BOARD}" for x in range(3)]
9user_turn = ""
10taken = True
11winner = False
12turn_number = 0
13# keeps the score and determines what symbols will be used
14SYMBOLS = ["x", "o"]
15winner_save = [list(x * 3) for x in SYMBOLS]
16score = {symbol: 0 for symbol in SYMBOLS}
17
18# does all the logic to the game
19class logic:
20 def __init__(self, ctx, turn, win_template):
21 self.ctx = ctx
22 self.turn = turn
23 self.template = win_template
24
25 # check if 3 of the same symbols are in a line
26 def winner_check(self):
27 # initializes the list containing the rows. rows 0, 1, and 2 are created
28 win_check = [
29 [board[c][x] for x in range(4, len(board[c])) if x % 4 == 0]
30 for c in range(3)
31 ]
32 # adds the values for every possible row to the list
33 for x in range(3):
34 win_check.append([win_check[c][x] for c in range(3)])
35 win_check.append([win_check[x][x] for x in range(3)])
36 win_check.append([win_check[x][c] for x, c in zip(range(3)[::-1], range(3))])
37 # determines if someone has won
38 for x in win_check:
39 if x in self.template:
40 print(f"{self.turn} wins!")
41 keep = True
42 break
43 keep = False
44 return keep
45
46 # updates the spot value of the given input. ex: input = A1, spot A1 will be occupied by the player
47 def take_spot(self):
48 append_board = board[int(user[1])]
49 append_board = "".join(
50 [
51 append_board[x] if x != eval(user[0]) else self.turn
52 for x in range(len(append_board))
53 ]
54 )
55 return append_board
56
57 # checks to see if a spot on the board is already occupied
58 def spot_taken(self):
59 board_ctx = board[int(self.ctx[1])][eval(self.ctx[0])]
60 check_spot = True if board_ctx in ["o", "x"] else False
61 if check_spot == True:
62 print("spot already taken :/ try again")
63 return check_spot
64
65
66# takes the location input and checks if it exists
67def input_check():
68 slow_print("location- \n")
69 ctx = input().upper()
70 all_input = [x + str(c) for x in ["A", "B", "C"] for c in range(3)]
71 if ctx in all_input:
72 pass
73 else:
74 while ctx not in all_input:
75 slow_print("invalid location, try again\n")
76 slow_print("location- \n")
77 ctx = input().upper()
78 return list(ctx)
79
80
81# takes an input and prints it smoothly to the console
82def slow_print(inpt):
83 for x in inpt:
84 sys.stdout.write(x)
85 time.sleep(0.01)
86
87
88slow_print(TITLES + "".join(board))
89
90# determines what symbol will go first
91while True:
92 slow_print(f"{SYMBOLS[0]}'s or {SYMBOLS[1]}'s?- \n")
93 user_turn = input()
94 if user_turn in [SYMBOLS[0], SYMBOLS[1]]:
95 slow_print(f"{user_turn}'s first!\n")
96 break
97 else:
98 slow_print("incorrent input try again!")
99
100# brings all the functions and logic together
101while True:
102 outcome = "None"
103 while winner == False:
104 # keeps track of the amount of turns to determine if the outcome is a tie
105 turn_number += 1
106 if turn_number == 10:
107 slow_print("Tie!\n")
108 outcome = None
109 break
110 # takes spot input and brings the spot_taken logic together to determines==
111 # whether a spot is already occupied
112 while taken == True:
113 user = input_check()
114 init = logic(user, user_turn, winner_save)
115 taken = init.spot_taken()
116 ctx_board = init.take_spot()
117 board[int(user[1])] = ctx_board
118 slow_print(TITLES + "".join(board))
119 user_turn = SYMBOLS[0] if user_turn != SYMBOLS[0] else SYMBOLS[1]
120 taken = True
121 winner = init.winner_check()
122 # makes sure the point is given to the winner by inverting the current user_turn
123 if outcome == None:
124 pass
125 else:
126 score[SYMBOLS[0] if user_turn == SYMBOLS[1] else SYMBOLS[1]] += 1
127 slow_print(
128 f"Scores: {SYMBOLS[0]}-{score[SYMBOLS[0]]}, {SYMBOLS[1]}-{score[SYMBOLS[1]]}\n"
129 )
130 slow_print("Would you like to play another (Y/N)?- \n")
131 repeat = input().upper()
132 if repeat == "Y":
133 winner = False
134 board = [f"{x} {INIT_BOARD}" for x in range(3)]
135 turn_number = 0
136 continue
137 else:
138 break
139
1def slant_check(matrix,P1,P2):
2 empty_lst1 = []
3 empty_lst2= []
4 lst1 = []
5 lst2 = []
6 x = len(matrix)
7 v = len(matrix) - 1
8 t = 0
9 g = 0
10 n = True
11 while n:
12 for i in range(x):
13 if matrix[i][i] == P1 or matrix[t][i] == P1:
14 empty_lst1.append(matrix[i][i])
15 if matrix[i][i] == P2 or matrix[t][i] == P2:
16 empty_lst2.append(matrix[i][i])
17 while v >= g:
18 if matrix[g][v] == P1:
19 lst1.append(matrix[g][v])
20 if matrix[g][v] == P2:
21 lst2.append(matrix[g][v])
22 t -= 1
23 v -= 1
24 g += 1
25 if len(empty_lst1) == x:
26 return True
27 if len(empty_lst2) == x:
28 return True
29 if len(lst1) == x:
30 return True
31 if len(lst2) == x:
32 return True
33 return False
34def vertical_check(lst,P1,P2):
35 for i in range(len(lst) - 2):
36 for j in range(len(lst)):
37 if lst[i][j] == P1 and lst[i + 1][j] == P1 and lst[i + 2][j] == P1:
38 return True
39 if lst[i][j] == P2 and lst[i + 1][j] == P2 and lst[i + 2][j] == P2:
40 return True
41
42 return False
43def horizontal_check(lst,P1,P2):
44 for i in range(len(lst)):
45 for j in range(len(lst) - 2):
46 if lst[i][j]== P1 and lst[i][j + 1]== P1 and lst[i][j + 2]== P1 :
47 return True
48 if lst[i][j]== P2 and lst[i][j + 1]== P2 and lst[i][j + 2]== P2 :
49 return True
50 return False
51def find_grid2(place,lst):
52 for i in range(len(lst)):
53 for j in range(len(lst[i])):
54 if place == lst[i][j]:
55 return lst.index(lst[i])
56
57def find_grid1(place,lst):
58 for i in range(len(lst)):
59 for j in range(len(lst[i])):
60 if place == lst[i][j]:
61 return lst[i].index(place)
62
63def print_lst(lst):
64 for i in range(len(lst)):
65 for j in range(len(lst[i]) - 2):
66 print(lst[i][j],'|', lst[i][j + 1],'|', lst[i][j + 2])
67 print('----------')
68def tic_tac_toe():
69 lst = [[1,2,3],
70 [4,5,6],
71 [7,8,9]]
72 P1 = 0
73 P2 = 0
74 counter_loop = 0
75 _ = 0
76 new_lst = [1,2]
77 while True:
78 P1 = input('Player1 select "x" or "o" ? (Type in x or o):\n').lower()
79 if P1 == 'x':
80 print('Player2 is now "o"!\n')
81 P2 = 'o'
82 break
83 if P1 == 'o':
84 print('Player2 is now "x"!\n')
85 P2 = 'x'
86 break
87 else:
88 print('Try Again\n')
89 print_lst(lst)
90 while _ < len(lst):
91 for i in range(len(lst[_])):
92 if counter_loop == 9:
93 print("Tie!")
94 break
95 place_grid1 = input('Where would Player 1 like to place? : ')
96 if int(place_grid1) >= 10 or int(place_grid1) <= 0:
97 print('Try Again')
98 place_grid1 = input('Where would Player 1 like to place? : ')
99 break
100 place_grid = int(place_grid1)
101 counter_loop += 1
102 inner_index1 = find_grid1(place_grid,lst)
103 outer_index1 = find_grid2(place_grid,lst)
104 lst[outer_index1][inner_index1] = P1
105 print_lst(lst)
106 if horizontal_check(lst,P1,P2) == True:
107 print("Player 1 wins!!")
108 counter_loop = 9
109 break
110 if vertical_check(lst,P1,P2) == True:
111 print("Player 1 wins!!")
112 counter_loop = 9
113 break
114 if slant_check(lst,P1,P2) == True:
115 print("Player 1 wins!!")
116 counter_loop = 9
117 break
118 if counter_loop == 9:
119 print("Tie!")
120 break
121 place_grid2 = input('Where would Player 2 like to place? : ')
122 if int(place_grid2) >= 10 or int(place_grid2) <=0:
123 print('Try Again')
124 place_grid2 = input('Where would Player 2 like to place? : ')
125 break
126 place_gridy = int(place_grid2)
127 counter_loop += 1
128 inner_index2 = find_grid1(place_gridy,lst)
129 outer_index2 = find_grid2(place_gridy,lst)
130 lst[outer_index2][inner_index2] = P2
131 print_lst(lst)
132 if horizontal_check(lst,P1,P2) == True:
133 print("Player 2 wins!!")
134 counter_loop = 9
135 break
136 if vertical_check(lst,P1,P2) == True:
137 print("Player 2 wins!!")
138 counter_loop = 9
139 break
140 if slant_check(lst,P1,P2) == True:
141 print("Player 2 wins!!")
142 counter_loop = 9
143 break
144 if counter_loop == 9:
145 print("Tie!")
146 break
147 if counter_loop == 9:
148 break
149
150 _ += 1
151
152
153tic_tac_toe()
154
155
1class Grid:
2
3 def __init__(self):
4 self.__grid = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
5 self.__score = 0
6 self.turn = 1
7
8 def check_location(self, x_index, y_index):
9 if self.__grid[int(x_index) - 1][int(y_index) - 1] == 1 or\
10 self.__grid[int(x_index) - 1][int(y_index) - 1] == 2:
11 return False
12 else:
13 return True
14
15 def display(self):
16 lineVal: int = 0
17 print("0 1 2 3")
18 for i in self.__grid:
19 lineVal += 1
20 print(str(lineVal), end=" ")
21 for k in i:
22 print(str(k), end=" ")
23
24 print()
25
26 def place_counter(self, x_index, y_index):
27 if self.turn == 1:
28 self.__grid[int(x_index) - 1][int(y_index) - 1] = 1
29 self.turn = -1
30 else:
31 self.__grid[int(x_index) - 1][int(y_index) - 1] = 2
32 self.turn = 1
33
34 def reset_grid(self):
35 for i in range(len(self.__grid)):
36 for k in range((len(self.__grid[i]))):
37 self.__grid[i][k] = 0
38
39 def victory_check(self):
40 for l in range(1, 2):
41
42 for i in range(len(self.__grid)):
43 if self.__grid[i][0] == l and self.__grid[i][1] == l and self.__grid[i][2] == l:
44 return True
45 if self.__grid[0][i] == l and self.__grid[1][i] == l and self.__grid[2][i] == l:
46 return True
47 if self.__grid[0][0] == l and self.__grid[1][1] == l and self.__grid[2][2] == l:
48 return True
49 if self.__grid[0][2] == l and self.__grid[1][1] == l and self.__grid[2][0] == l:
50 return True
51
52
53def collect_place():
54 return input("Please enter a location: ")
55
56
57placingGrid = Grid()
58while True:
59 placingGrid.display()
60 x_pos = collect_place()
61 y_pos = collect_place()
62 if placingGrid.check_location(x_pos, y_pos):
63 placingGrid.place_counter(x_pos, y_pos)
64 else:
65 print("Invalid location")
66
67 if placingGrid.victory_check():
68 print("Well done")
69 placingGrid.reset_grid()
70