TI/Skrypty z zajęć/5
Z Brain-wiki
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 10 12:47:27 2020
@author: tgub
"""
import numpy as np
import random
plansza = np.zeros((3,3))
plansza[0,0] = 1
plansza[2,2] = 2
def rysuj(plansza):
kreska = ('---+'*plansza.shape[1])[:-1]
def znak(z):
if z == 1: return ' O '
if z == 2: return ' X '
return ' '
for i in range(plansza.shape[0]):
print('|'.join([znak(liczba) for liczba in plansza[i,:]]))
if (i<plansza.shape[0]-1): print(kreska)
#vec to jednowymiarowa tablica
def sprawdz_linie(vec):
#gdy vec ma same jedynki zwraca 1
#gdy vec ma same dwojki zwraca 2
# w pozostałych przypadkach zwraca 0
for i in [1,2]:
if np.count_nonzero(vec-i) == 0: return i
return 0
def sprawdz_czy_dwa_identyczne_i_zero(vec,gracz):
if (sum(vec==0)==1) and (sum(vec==gracz)==2):
return (np.argwhere(vec==0))[0][0]
def czy_koniec():
global plansza
if (len(plansza.flatten())-np.count_nonzero(plansza)) == 0:
return 'REMIS'
wyniki=[]
for j in range(len(plansza)):
wyniki.append(sprawdz_linie(plansza[j,:]))
wyniki.append(sprawdz_linie(plansza[:,j]))
wyniki.append(sprawdz_linie(np.diag(plansza)))
wyniki.append(sprawdz_linie(np.diag(plansza[:,::-1])))
wynik=max(wyniki)
if wynik:
return 'wygral gracz '+str(wynik)
def ruch_losowy():
global plansza
mozliwe_ruchy=[]
for x in range(plansza.shape[0]):
for y in range(plansza.shape[1]):
if plansza[x,y]==0: mozliwe_ruchy.append((x,y))
ruch=random.choice(mozliwe_ruchy)
plansza[ruch[0],ruch[1]]=2
def ofensywa(gracz):
global plansza
#po wierszach
for j in range(len(plansza)):
wynik = sprawdz_czy_dwa_identyczne_i_zero(plansza[j,:],gracz)
if wynik:
plansza[j,wynik]=2
return True
#po kolumnach
for j in range(len(plansza)):
wynik = sprawdz_czy_dwa_identyczne_i_zero(plansza[:,j],gracz)
if wynik:
plansza[wynik,j]=2
return True
#diagonala
wynik = sprawdz_czy_dwa_identyczne_i_zero(np.diag(plansza),gracz)
if wynik:
plansza[wynik,wynik]=2
return True
#antydiagonala
wynik = sprawdz_czy_dwa_identyczne_i_zero(np.diag(plansza[:,::-1]),gracz)
if wynik:
plansza[wynik,plansza.shape[0]-1-wynik]=2
return True
return False
def ruch_komputera():
czy_byl_ruch = False
czy_byl_ruch = ofensywa(2)
if czy_byl_ruch==False: ruch_losowy()
while True:
#rysujemy plansze
rysuj(plansza)
#ruch gracza i
while True:
x = int(input('graczu podaj wspolrzedna x:'))
y = int(input('graczu podaj wspolrzedna y:'))
if (plansza[x,y] == 0): break
plansza[x,y] = 1
if czy_koniec():
print(czy_koniec())
break
ruch_komputera()
if czy_koniec():
print(czy_koniec())
break