Created
September 13, 2018 12:55
-
-
Save neerajvashistha/eb92d8dcc98013f2094955bc64b8a8c3 to your computer and use it in GitHub Desktop.
TicTacToe just a fun game when i am bored
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
import random | |
import time | |
import matplotlib.pyplot as plt | |
def create_board(): | |
return np.zeros((3,3)) | |
board = create_board() | |
def place(board, player, position): | |
if player < 3 or player > 0: | |
if board[position[0],position[1]] != 1 or board[position[0],position[1]] = 2 | |
board[position[0],position[1]] = player | |
return board | |
place(board, 1, (0,0)) | |
def possibilities(board): | |
x,y = np.where(board == 0) | |
rt= list() | |
for i,j in zip(x,y): | |
conj = (i,j) | |
rt.append(conj) | |
return rt | |
def random_place(board, player): | |
random_position = random.choice(possibilities(board)) | |
board = place(board,player,random_position) | |
return board | |
def row_win(board,player): | |
for i in range(board.shape[0]): | |
if list(board[i]).count(player) == 3: | |
return True | |
else: | |
return False | |
def col_win(board,player): | |
for i in range(board.shape[1]): | |
if list(board[:,i]).count(player) == 3: | |
return True | |
else: | |
return False | |
def diag_win(board,player): | |
antidiagonal = np.diag(board[:, ::-1]) | |
diagonal = np.diag(board) | |
if list(antidiagonal).count(player) == 3: | |
return True | |
else: | |
return False | |
if list(diagonal).count(player) == 3: | |
return True | |
else: | |
return False | |
def evaluate(board): | |
winner = 0 | |
for player in [1, 2]: | |
if row_win(board,player): | |
winner = player | |
if col_win(board,player): | |
winner=player | |
if diag_win(board,player): | |
winner = player | |
if np.all(board != 0) and winner == 0: | |
winner = -1 | |
return winner | |
def play_game(): | |
board = create_board() | |
winner = 0 | |
while winner == 0: | |
for player in [1,2]: | |
random_place(board,player) | |
winner = evaluate(board) | |
if winner!=0: | |
break; | |
return winner | |
x=[] | |
start=time.time() | |
for i in range(1000): | |
x.append(play_game()) | |
stop=time.time() | |
print(stop-start) | |
plt.hist(x) | |
plt.show() | |
def play_strategic_game(): | |
board, winner = create_board(), 0 | |
board[1,1] = 1 | |
while winner == 0: | |
for player in [2,1]: | |
random_place(board,player) | |
winner = evaluate(board) | |
if winner != 0: | |
break | |
return winner | |
import time | |
import matplotlib.pyplot as plt | |
x=[] | |
start=time.time() | |
for i in range(1000): | |
x.append(play_strategic_game()) | |
stop=time.time() | |
print(stop-start) | |
plt.hist(x) | |
plt.show() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment