-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtictactoe.py
More file actions
127 lines (104 loc) · 3.27 KB
/
tictactoe.py
File metadata and controls
127 lines (104 loc) · 3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
board = [' ' for x in range(10)]
def insertLetter(letter,pos):
board[pos] = letter
def spaceIsFree(pos):
return board[pos] == ' '
def printBoard(board):
print(' '+board[1]+"|"+board[2]+"|"+board[3])
print("--------")
print(' '+board[4]+"|"+board[5]+"|"+board[6])
print("--------")
print(' '+board[7]+"|"+board[8]+"|"+board[9])
def isBoardFull(board):
if board.count(' ') > 1:
return False
else:
return True
def IsWinner(b,l):
return ((b[1] == l and b[2] == l and b[3] == l) or
(b[4] == l and b[5] == l and b[6] == l) or
(b[7] == l and b[8] == l and b[9] == l) or
(b[1] == l and b[4] == l and b[7] == l) or
(b[2] == l and b[5] == l and b[8] == l) or
(b[3] == l and b[6] == l and b[9] == l) or
(b[1] == l and b[5] == l and b[9] == l) or
(b[3] == l and b[5] == l and b[7] == l))
def playerMove():
run = True
while run:
move = input("please select a position to enter the X between 1 to 9")
try:
move = int(move)
if move > 0 and move < 10:
if spaceIsFree(move):
run = False
insertLetter('X' , move)
else:
print('Sorry, this space is occupied')
else:
print('please type a number between 1 and 9')
except:
print('Please type a number')
def computerMove():
possibleMoves = [x for x , letter in enumerate(board) if letter == ' ' and x != 0 ]
move = 0
for let in ['O' , 'X']:
for i in possibleMoves:
boardcopy = board[:]
boardcopy[i] = let
if IsWinner(boardcopy, let):
move = i
return move
cornersOpen = []
for i in possibleMoves:
if i in [1 , 3 , 7 , 9]:
cornersOpen.append(i)
if len(cornersOpen) > 0:
move = selectRandom(cornersOpen)
return move
if 5 in possibleMoves:
move = 5
return move
edgesOpen = []
for i in possibleMoves:
if i in [2,4,6,8]:
edgesOpen.append(i)
if len(edgesOpen) > 0:
move = selectRandom(edgesOpen)
return move
def selectRandom(li):
import random
ln = len(li)
r = random.randrange(0,ln)
return li[r]
def main():
print("Welcome to the game!")
printBoard(board)
while not(isBoardFull(board)):
if not(IsWinner(board , 'O')):
playerMove()
printBoard(board)
else:
print("sorry you loose!")
break
if not(IsWinner(board , 'X')):
move = computerMove()
if move == 0:
print(" ")
else:
insertLetter('O' , move)
print('computer placed an o on position' , move , ':')
printBoard(board)
else:
print("you win!")
break
if isBoardFull(board):
print("Tie game")
while True:
x = input("Do you want to play again? (y/n)")
if x.lower() == 'y':
board = [' ' for x in range(10)]
print('--------------------')
main()
else:
break