TI/Skrypty z zajęć/6
Z Brain-wiki
<source lang="python">
- -*- coding: utf-8 -*-
""" Created on Wed Apr 1 10:18:35 2020
@author: Tomek """
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!=None: 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!=None: plansza[wynik,j]=2 return True #diagonala wynik = sprawdz_czy_dwa_identyczne_i_zero(np.diag(plansza),gracz) if wynik!=None: plansza[wynik,wynik]=2 return True #antydiagonala wynik = sprawdz_czy_dwa_identyczne_i_zero(np.diag(plansza[:,::-1]),gracz) if wynik!=None: 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: czy_byl_ruch = ofensywa(1) 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 #sprawdzanie warunku konca if czy_koniec(): print(czy_koniec()) break #ruch komputera ruch_komputera() #sprawdzanie warunku konca if czy_koniec(): print(czy_koniec()) break
</souce>