Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- class IKSOKS:
- def __init__(self):
- self.tabla = [ '-' for i in range(0,9) ]
- self.poslednjiPotez = []
- self.pobednik = None
- def print_tabla(self):
- print "\nTabla:"
- j = 0
- for i in self.tabla:
- sys.stdout.write(i)
- if j < 2:
- sys.stdout.write(" | ")
- if j == 2:
- sys.stdout.write("\n")
- j = 0
- else:
- j += 1
- def izaberi_poziciju(self):
- pomeraj = []
- for i,v in enumerate(self.tabla):
- 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)
- igra.mark(self.oznaka,izaberi_poziciju)
- def najbolji_potez(self,igra):
- najbolji_rezultat = None
- najbolji_pomeraj = None
- #Pokupimo sve slobodne pozicije sa table
- #
- for m in igra.izaberi_poziciju():
- # KOBAJAGI KOMP ODGIRA NEKI POTEZ
- igra.mark(self.oznaka,m)
- #igra.print_tabla()
- #raw_input("NAJBOLJI::::" + str(m))
- #probamo da igramo na m-to mesto
- # IGRAMO SVAKO MESTO KOJE IMA
- # vidimo sta se desi
- # AKO SMO nasli
- if igra.gotovo(): # da li je sada gotovo?
- rezultat = self.get_rezultat(igra) # ko je pobedio?
- 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
- def najlosiji_potez(self,igra):
- najbolji_rezultat = None
- najbolji_pomeraj = None
- # trazi najlosiji potez
- # ide kroz sve slobodne pocizije
- for m in igra.izaberi_poziciju():
- # oznacava potez protivnika
- igra.mark(self.protivnik_potez,m)
- # igra.print_tabla()
- # raw_input("NAJGORI::::" + str(m))
- if igra.gotovo(): # da li je sada gotova igra
- rezultat = self.get_rezultat(igra)
- else:
- sledeci_potez,rezultat = self.najbolji_potez(igra) # POKUPI SE NAJBOLJI POTEZ ZA COVEKA
- igra.vrati_poslednji_potez() # PONISTI GA
- # ako je nasao jos bolji potez za cvoveka, to postoje najbolji potez
- if najbolji_rezultat == None or rezultat < najbolji_rezultat:
- najbolji_rezultat = rezultat
- najbolji_pomeraj = m
- # NADJEN NAJBOLJI POTEZ ZA COVEKA
- # najboli za coveka je najgori za komp !!!!!!
- return najbolji_pomeraj, najbolji_rezultat
- def get_rezultat(self,igra):
- # ako je igra gotova i AI pobeduje, vracamo 1
- # ako je igra gotova i AI ne pobedjuje, vracamo -1
- if igra.gotovo():
- if igra.pobednik == self.oznaka:
- return 1
- elif igra.pobednik == self.protivnik_potez: # self.protivnik_oznaka
- return -1
- return 0 # ako igra nakon ovog poteza nece biti zavrsena, vracamo 0
- if __name__ == '__main__':
- igra=IKSOKS()
- x= raw_input("Izaberi X ili O")
- 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