Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class IKSOKS:
- def __init__(self):
- self.tabla = [ '-' for i in range(0,9) ]
- self.poslednjiPotez = []
- self.pobednik = None
- def print_tabla(self):
- print "\nTabla:"
- for j in range(0,9,3):#pravi pajton listu od 3 elementa za 3 reda,od nula do devet sa korakom 3
- for i in range(3):
- if self.tabla[j+i] == '-':
- print "%d |" %(j+i),
- else:
- print "%s |" %self.tabla[j+i],
- print "\n",
- def izaberi_poziciju(self):#vraca slobodna mesta u tabeli tacnije tamo gde je crtica
- pomeraj = []
- for i,v in enumerate(self.tabla):#i redni borj objekta u kolekciji a V je vrednost odnosno samo objekat
- if v=='-':
- pomeraj.append(i)
- return pomeraj
- def mark(self,oznaka,pozicija):
- self.tabla[pozicija] = oznaka
- self.poslednjiPotez.append(pozicija)
- def vrati_poslednji_potez(self):
- self.tabla[self.poslednjiPotez.pop()] = '-'
- self.pobednik = None
- def gotovo(self):
- pobeda = [(0,1,2), (3,4,5), (6,7,8), (0,3,6),(1,4,7),(2,5,8), (0,4,8), (2,4,6)]
- for i,j,k in pobeda:
- if self.tabla[i] == self.tabla[j] == self.tabla[k] and self.tabla[i] != '-':
- self.pobednik = self.tabla[i]
- return True
- if '-' not in self.tabla:
- self.pobednik = '-'
- return True
- return False
- def start(self,igrac1,igrac2):
- self.ig1 = igrac1
- self.ig2 = igrac2
- for i in range(9):
- self.print_tabla()
- if i%2==0:
- if self.ig1.tip == 'H':
- print "\t\t[Moj potez]"
- else:
- print "\t\t[Komp igra]"
- self.ig1.pomeraj(self)
- else:
- if self.ig2.tip == 'H':
- print "\t\t[Moj potez]"
- else:
- print "\t\t[Komp igra]"
- self.ig2.pomeraj(self)
- if self.gotovo():
- self.print_tabla()
- if self.pobednik == '-':
- print "\nNereseno!"
- else:
- print "\nWinner : %s" %self.pobednik
- return
- class Ja:
- def __init__(self,oznaka):
- self.oznaka = oznaka
- self.tip = 'H'
- def pomeraj(self, igra):
- while True:
- m = raw_input("Unesi poziciju:")
- try:
- m = int(m)
- except:
- m = -1
- if m not in igra.izaberi_poziciju():
- print "Pogresno ,ponovi !"
- else:
- break
- igra.mark(self.oznaka,m)
- class Komp:
- def __init__(self, oznaka):
- self.oznaka = oznaka
- self.tip = 'C'
- if self.oznaka == 'X':
- self.protivnik_potez = 'O'
- else:
- self.protivnik_potez = 'X'
- def pomeraj(self,igra):
- izaberi_poziciju,rezultat = self.najbolji_potez(igra)#ovo igra racunar,racunar trazi svoj najbolji potez uz pomoc ove funk.
- igra.mark(self.oznaka,izaberi_poziciju)
- def najbolji_potez(self,igra):
- najbolji_rezultat = None
- najbolji_pomeraj = None
- for m in igra.izaberi_poziciju():
- igra.mark(self.oznaka,m)
- if igra.gotovo():#uslov za zavrsetak rekurzije
- rezultat = self.get_rezultat(igra)
- else:
- sledeci_potez,rezultat = self.najlosiji_potez(igra)
- igra.vrati_poslednji_potez()
- if najbolji_rezultat == None or rezultat > najbolji_rezultat:
- najbolji_rezultat = rezultat
- najbolji_pomeraj = m
- return najbolji_pomeraj, najbolji_rezultat
- # metoda za nalazenje najboljeg poteza za coveka
- #
- def najlosiji_potez(self,igra):
- najbolji_rezultat = None
- najbolji_pomeraj = None
- for m in igra.izaberi_poziciju():
- igra.mark(self.protivnik_potez,m)
- if igra.gotovo():#zavrsetak igre the end (zavrstak simulacije jednog poteza)
- rezultat = self.get_rezultat(igra)
- else:
- sledeci_potez,rezultat = self.najbolji_potez(igra)
- igra.vrati_poslednji_potez()
- if najbolji_rezultat == None or rezultat < najbolji_rezultat:
- najbolji_rezultat = rezultat
- najbolji_pomeraj = m
- return najbolji_pomeraj, najbolji_rezultat
- def get_rezultat(self,igra):
- if igra.gotovo():
- if igra.pobednik == self.oznaka:
- return 1
- elif igra.pobednik == self.protivnik_potez:
- return -1
- return 0
- if __name__ == '__main__':
- igra=IKSOKS()
- x= raw_input("Izaberi X ili O").upper()
- if x == "X":
- Igrac1 = Ja("X")
- Igrac2 = Komp("O")
- else:
- Igrac1 = Komp("X")
- Igrac2 = Ja("O")
- igra.start( Igrac1, Igrac2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement