Kód: Vybrať všetko
import sys#import system
import random#importnem nahodne cisla
def uvod(): #funkcia na uvodny pozdrav
global rozmer #rozmer hracieho pola
global hra #pole hry
global maxr #maximum v riadku
global maxs #maximum v stlpci
maxr=0
maxs=0
hra=[]#zopar globalnych premennych a ich inicializacia
rozmer=unicode(raw_input('Rozmer pola: '),'utf-8')
while not rozmer.isnumeric():
rozmer=unicode(raw_input('Rozmer pola: '),'utf-8')#ponacitavam si rozmery pola
rozmer=int(rozmer)#kedze su rozmery znaky, konvertnem ich na cislo
for x in range(0,rozmer):
hra.append([])
for x in range(0,rozmer):
for y in range(0,rozmer):
hra[x].append(0)#naplnim si v cykloch pole hra na nuly
vypis_hru()#vypisem pole hry
def vypis_hru():#v cykle vypisem hracie pole vzdy, ked treba
print 'Hracie pole je:'
for x in range(0,int(rozmer)):
print hra[x]
uvod()#tu volam uvodnu obrazovku, vypise sa pekne co treba na uvod
def tah_hraca():#taha hrac
print 'Vloz tvoj tah:'
print 'Riadok pola, Stlpec pola:'
global riadok
global stlpec
riadok=unicode(raw_input('Riadok='),'utf-8')
while not riadok.isnumeric():
riadok=unicode(raw_input('Riadok='),'utf-8')
stlpec=unicode(raw_input('Stlpec='),'utf-8')
while not stlpec.isnumeric():
stlpec=unicode(raw_input('Stlpec='),'utf-8')#hrac zada riadok stlpec pola
if hra[int(riadok)][int(stlpec)]==0:#ak je pole volne hracovi sa tam priradi 1
hra[int(riadok)][int(stlpec)]=1
else:#inak hrac taha znova, lebo pozicia je obsadena
print 'Tahaj znova, lebo pozicia je uz obsadena:'
tah_hraca()#rekurzivne znova volam tah hraca
vypis_hru()#a vypisem hracie pole
def tah_na_diagonale(hra):#mala funkcia na potiahnutie na diagonale
b=0
for a in range(0,rozmer):
if a==b:
if hra[a][b]==0:
hra[a][b]=-1#tam, kde je mozne vlozit minus jedna ju vlozi
return
b+=1
def tah_na_diagonale2(hra):#tah na antidiagonale
b=rozmer
for a in range(0,rozmer):
b-=1
if hra[a][b]==0:
hra[a][b]=-1#opatovne vlozim minus jedna, ak sa to da
return
def navrhni_tah_riadok(r):#taham v riadku r a vlozim tam, kde treba
for b in range(0,rozmer):
if hra[r][b]==0:
hra[r][b]=-1
zadal=1
print '['+str(r)+']['+str(b)+']'
return
#tu musim najst vhodnu nulu na poli, ak uz nie je v riadku
najdi_vhodnu_nulu(hra)
def navrhni_tah_riadky(hra):#poprezeram riadky na tah
s=[]
m=0#inicializacia premennych
for a in range(0,rozmer):#prejdem kazdy riadok
s.append(sum(hra[a]))#ukladam sucty do zoznamu s
m=max(s)#najdem maximum suctov v riadku zoznamu
maxr=m#pouzivam globalnu premennu pre dalsie vypocty
for a in range(0,rozmer):
if sum(hra[a])==m:
navrhni_tah_riadok(a)#navrhnem dalsi tah v riadku (a)
vypis_hru()#vypisem hracie pole
return
def najdi_vhodnu_nulu(hra):
for a in range(0,rozmer):
for b in range(0,rozmer):
if hra[a][b]==0:
print '['+str(a)+']['+str(b)+']'
hra[a][b]=-1
return
def navrhni_tah_stlpec(x):#navrhnem tah v stlpci
for b in range(0,rozmer):
if hra[b][x]==0:#tam, kde je nula mozem vlozit minus jedna
hra[b][x]=-1
print '['+str(b)+']['+str(x)+']'
return#vyskocim z funkcie
#tu musim najst vhodnu nulu v poli, ak uz nemozem tahat ten stlpec
najdi_vhodnu_nulu(hra)
def navrhni_tah_stlpce(hra):#prebehnem stlpce a hladam vhodne sucty na tah
s=0
sl=[]#inicializacia niektorych premennych
m=0
for a in range(0,rozmer):
for b in range(0,rozmer):
s+=hra[b][a]
sl.append(s)
m=max(sl)#z vytvorenych suctov najdem maximum
maxs=m#pouzivam globalne premenne pre niektore dalsie prenosy a vypocty medzi funkciami
s=0
for a in range(0,rozmer):
for b in range(0,rozmer):
s+=hra[b][a]
if s==m:
navrhni_tah_stlpec(a)#navrhnem stlpcovy tah
vypis_hru()#a vypisem hru
return# vyskocim z funkcie
def navrhni_tah_diagonalne(hra):
shd=0
sdi=0
for a in range(0,rozmer):
for b in range(0,rozmer):
if b==a and hra[a][b]!=0:#kontrolujem, ci je uz diagonala plna cisiel inych ako nula
sdi+=1#sucet na diagonale
if sdi==rozmer:
return False#ak sa na diagonale neda uz hladat tah vratim false
for a in range(0,rozmer):
for b in range(0,rozmer):
if b==a:#jedine tu moze nastat sucet rovny rozmer
shd=0#zratam sucet hlavnej diagonaly
pociatok_riadok=a-a
pociatok_stlpec=b-b
while pociatok_stlpec<rozmer and hra[pociatok_riadok][pociatok_stlpec]!=-1:
shd+=hra[pociatok_riadok][pociatok_stlpec]
pociatok_riadok+=1
pociatok_stlpec+=1
if shd==int(rozmer)-1: #ak su diagonaly pred vyhrou, zakrocim
tah_na_diagonale(hra)#lebo smeruje k vyhre
vypis_hru()#vypisem hracie pole
return True#vratim pravda tahal som na diagonale, aby som uz netahal v riadku stlpci
def navrhni_tah_diagonalne2(hra):#tah na antidiagonale
snvd=0
b=rozmer#inicializujem si premenne
for a in range(0,rozmer):
b-=1#sucet rozmer je aj na vedlajsej diagonale
if hra[a][b]!=0:
snvd+=1
if snvd==rozmer:
return False#ak som zistil, ze su tam same cisla, netaham na diagonale
snvd=0
b=rozmer
for a in range(0,rozmer):
b-=1#sucet rozmer je aj na vedlajsej diagonale
if hra[a][b]==1:
snvd+=hra[a][b]
if snvd==int(rozmer)-1:
tah_na_diagonale2(hra)#lebo smeruje k vyhre
vypis_hru()#vypisem hracie pole
return True#vratim pravda tahal som na diagonale uz nemozem tahat na riadok stlpec
def skontroluj_remizu(hra):#zistim, ci su uz vyplnene vsetky policka a remiza
najdene=0
for a in range(0,rozmer):
for b in range(0,rozmer):
if hra[a][b]==0:
najdene=1
if najdene==0:
print 'Nastala remiza.'
sys.exit()
def skontroluj_vyhru_pocitaca(hra):#skotrolijem sucty na riadok stlpec diagonaly, kto vyhrava
sr=0 #sucet riadok
ss=0 #sucet stlpec
sd=0 #sucet diagonala
sv=0 #sucet vedlajsia diagonala
print 'Kontrolujem vyhru pocitaca.'
for a in range(0,rozmer):
for b in range(0,rozmer):
if hra[a][b]==-1:#ratam minus jednotky pocitacove
sr=0
ss=0
sd=0
for x in range(0,rozmer):
sr+=hra[x][b]
ss+=hra[a][x]
r=int(rozmer)
if sr==-r:
print 'Vyhral pocitac v stlpci!'
sys.exit()
if ss==-r:
print 'Vyhral pocitac v riadku!'
sys.exit()
if a==b:
sd+=hra[a][b]
if sd==-r:
print 'Vyhral pocitac v diagonale!'
sys.exit()
b=rozmer
snvd=0
for a in range(0,rozmer):
b-=1#sucet rozmer je aj na vedlajsej diagonale
if hra[a][b]==-1:
snvd+=hra[a][b]
r=int(rozmer)
if snvd==-r:
print 'Vyhral pocitac vedlajsia diagonala!'
sys.exit()
def tah_pocitaca():#pocitam tahy pocitaca na zaklade hracieho platna
print 'Taha pocitac.'
sr=0 #sucet riadok
ss=0 #sucet stlpec
shd=0 #sucet na hlavnej diagonale
snvd=0 #sucet na vedlajsej diagonale
for a in range(0,rozmer):
for b in range(0,rozmer):
if hra[a][b]==1: #vzdy ked najdem jednotku, skontrolujem jej riadok stlpec a diagonaly sucet
sr=0
ss=0
for x in range(0,rozmer):
if hra[x][int(stlpec)]==1:
sr+=hra[x][int(stlpec)]
if hra[int(riadok)][x]==1:
ss+=hra[int(riadok)][x]
if sr==int(rozmer):
print 'Vyhral hrac v stlpci!'
sys.exit()
if ss==int(rozmer):
print 'Vyhral hrac v riadku!'
sys.exit()
shd=0
snvd=0
if b==a:#jedine tu moze nastat sucet rovny rozmer
pociatok_riadok=a-a
pociatok_stlpec=b-b
while pociatok_stlpec<rozmer:
if hra[pociatok_riadok][pociatok_stlpec]==1:
shd+=hra[pociatok_riadok][pociatok_stlpec]
pociatok_riadok+=1
pociatok_stlpec+=1
if shd==int(rozmer):
print 'Vyhral hrac hlavna diagonala!'
sys.exit()
b=rozmer
for a in range(0,rozmer):
b-=1#sucet rozmer je aj na vedlajsej diagonale
if hra[a][b]==1:
snvd+=hra[a][b]
if snvd==int(rozmer):
print 'Vyhral hrac vedlajsia diagonala!'
sys.exit()
#logika hry pocitaca:
if ((navrhni_tah_diagonalne(hra)) or (navrhni_tah_diagonalne2(hra))):
print 'Pocitac taha na diagonale.'
else:
print 'Pocitac taha na riadky, stlpce.'
if maxr>maxs:
navrhni_tah_riadky(hra)
if maxs>maxr:
navrhni_tah_stlpce(hra)
if maxs==maxr:
random.seed()
if random.randint(0,1)==0:#tuto funkciu random mozeme zamenit za lepsiu umelu inteligenciu pozorujucu pole hry
navrhni_tah_stlpce(hra)
else:
navrhni_tah_riadky(hra)
skontroluj_vyhru_pocitaca(hra)
skontroluj_remizu(hra)
def kontrola_vyhry():
return 'dummy funckia pre nekonecny cyklus, lebo koncim na sys.exity'
def bezi_hra():#slucka beziacej hry
strieda=0#strieda tahy hrac pocitac
while kontrola_vyhry()!='koniec':
if strieda==0:
tah_hraca()
strieda=1
if strieda==1:
tah_pocitaca()
strieda=0
bezi_hra()#bezi hra v slucke po koniec