Skip to content

Instantly share code, notes, and snippets.

@colyk
Last active September 28, 2017 23:45
Show Gist options
  • Save colyk/ad7273c8ca319406b3a1bf70da906f77 to your computer and use it in GitHub Desktop.
Save colyk/ad7273c8ca319406b3a1bf70da906f77 to your computer and use it in GitHub Desktop.
tic
from random import randint
from copy import deepcopy
board = [['-','-','-'],['-','-','-'],['-','-','-']]
def prnt():
print('-'*15)
for i in range(3):
print ("|| {} | {} | {} ||".format(*board[i]))
print('-'*15)
def is_finished():
for i in range(3):
for j in range(3):
if(board[i][j] == '-'):
return 0
return 1
def get_points(mark):
return divmod(mark,3)
def is_field(mark):
i, j = get_points(mark)
if(board[i][j] == '-'):
return 0
return 1
def fill(mark, instance = 'X'):
i, j = get_points(mark)
board[i][j] = instance
def bot_fill():
if(is_finished()):
return
# Если есть такой хо при котором бот выграет, то он его сделает
local_board = deepcopy(board)
for mark in range(9):
i, j = get_points(mark)
if(not is_field(mark)):
local_board[i][j] = '0'
else:
continue
if(get_winner(local_board) == 0 and not is_field(mark)):
fill(mark,'0')
return
local_board[i][j] = '-'
# Если есть такой ход при котором человек выграет, то бот заблокирует его
row_sum_list = []
col_sum_list = []
for i in range(3):
row_sum = ''
col_sum = ''
for j in range(3):
row_sum += board[i][j]
col_sum += board[j][i]
row_sum_list.append(row_sum)
col_sum_list.append(col_sum)
for i in row_sum_list:
if(i.count('X') == 2 and '0' not in i):
board[row_sum_list.index(i)][i.find('-')] = '0'
return
for j in col_sum_list:
if(j.count('X') == 2 and '0' not in j):
board[j.find('-')][col_sum_list.index(j)] = '0'
return
dig1 = board[0][0] + board[1][1] + board[2][2]
dig2 = board[0][2] + board[1][1] + board[2][0]
if(dig1.count('X') == 2 and '0' not in dig1):
a = dig1.find('-')
board[a][a] = '0'
return
if(dig2.count('X') == 2 and '0' not in dig2):
a = dig1.find('-')
if(a == 0):
board[2][0] = '0'
elif(a == 1):
board[1][1] = '0'
else:
board[0][2] = '0'
return
# В остальных случаях ходить рандомно
mark = randint(0,8)
while(is_field(mark) and not is_finished()):
mark = randint(0,8)
fill(mark,'0')
def get_winner(tab):
row_sum_list = []
col_sum_list = []
for i in range(3):
row_sum = ''
col_sum = ''
for j in range(3):
row_sum += tab[i][j]
col_sum += tab[j][i]
row_sum_list.append(row_sum)
col_sum_list.append(col_sum)
result = []
result.extend(row_sum_list)
result.extend(col_sum_list)
dig1 = ''
for i in range(3):
dig1 += tab[i][i]
result.append(dig1)
dig2 = tab[0][2] + tab[1][1] + tab[2][0]
result.append(dig2)
if('XXX' in result):
return 1 # print('Человек победил!')
elif('000' in result):
return 0 # print('Бот победил!')
else:
return -1 # print('Ничья!')
while(not is_finished()):
mark = int(input(': '))
while(is_field(mark)):
mark = int(input(': '))
fill(mark)
bot_fill()
prnt()
if(get_winner(board) == 0):
print('Бот победил!')
break
if(get_winner(board) == 1):
print('Человек победил!')
break
else:
print('Ничья!')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment