Advertisement
kernel_memory_dump

Untitled

May 16th, 2014
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.12 KB | None | 0 0
  1.  
  2.  
  3. class IKSOKS:
  4.  
  5.     def __init__(self):
  6.  
  7.  
  8.         self.tabla = [ '-' for i in range(0,9) ]
  9.         self.poslednjiPotez = []
  10.         self.pobednik = None
  11.  
  12.     def print_tabla(self):
  13.  
  14.  
  15.         print "\nTabla:"
  16.  
  17.         for j in range(0,9,3):#pravi pajton listu od 3 elementa za 3 reda,od nula do devet sa korakom 3
  18.             for i in range(3):
  19.                 if self.tabla[j+i] == '-':
  20.                     print "%d |" %(j+i),
  21.                 else:
  22.                     print "%s |" %self.tabla[j+i],
  23.  
  24.             print "\n",
  25.  
  26.  
  27.     def izaberi_poziciju(self):#vraca slobodna mesta u tabeli tacnije tamo gde je crtica
  28.  
  29.  
  30.         pomeraj = []
  31.         for i,v in enumerate(self.tabla):#i redni borj objekta u kolekciji a V je vrednost odnosno samo objekat
  32.             if v=='-':
  33.                 pomeraj.append(i)
  34.         return pomeraj
  35.  
  36.     def mark(self,oznaka,pozicija):
  37.  
  38.         self.tabla[pozicija] = oznaka
  39.         self.poslednjiPotez.append(pozicija)
  40.  
  41.     def vrati_poslednji_potez(self):
  42.  
  43.  
  44.         self.tabla[self.poslednjiPotez.pop()] = '-'
  45.         self.pobednik = None
  46.  
  47.     def gotovo(self):
  48.  
  49.  
  50.         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)]
  51.  
  52.         for i,j,k in pobeda:
  53.             if self.tabla[i] == self.tabla[j] == self.tabla[k] and self.tabla[i] != '-':
  54.                 self.pobednik = self.tabla[i]
  55.                 return True
  56.  
  57.         if '-' not in self.tabla:
  58.             self.pobednik = '-'
  59.             return True
  60.  
  61.         return False
  62.  
  63.     def start(self,igrac1,igrac2):
  64.  
  65.  
  66.         self.ig1 = igrac1
  67.         self.ig2 = igrac2
  68.  
  69.         for i in range(9):
  70.             self.print_tabla()
  71.  
  72.             if i%2==0:
  73.                 if self.ig1.tip == 'H':
  74.                     print "\t\t[Moj potez]"
  75.                 else:
  76.                     print "\t\t[Komp igra]"
  77.  
  78.                 self.ig1.pomeraj(self)
  79.             else:
  80.                 if self.ig2.tip == 'H':
  81.                     print "\t\t[Moj potez]"
  82.                 else:
  83.                     print "\t\t[Komp igra]"
  84.                 self.ig2.pomeraj(self)
  85.  
  86.             if self.gotovo():
  87.                 self.print_tabla()
  88.                 if self.pobednik == '-':
  89.                     print "\nNereseno!"
  90.                 else:
  91.                     print "\nWinner : %s" %self.pobednik
  92.                 return
  93.  
  94. class Ja:
  95.  
  96.  
  97.     def __init__(self,oznaka):
  98.         self.oznaka = oznaka
  99.         self.tip = 'H'
  100.  
  101.     def pomeraj(self, igra):
  102.  
  103.         while True:
  104.  
  105.             m = raw_input("Unesi poziciju:")
  106.  
  107.             try:
  108.                 m = int(m)
  109.             except:
  110.                 m = -1
  111.  
  112.             if m not in igra.izaberi_poziciju():
  113.                 print "Pogresno ,ponovi !"
  114.             else:
  115.                 break
  116.  
  117.         igra.mark(self.oznaka,m)
  118.  
  119. class Komp:
  120.  
  121.  
  122.     def __init__(self, oznaka):
  123.         self.oznaka = oznaka
  124.         self.tip = 'C'
  125.  
  126.         if self.oznaka == 'X':
  127.             self.protivnik_potez = 'O'
  128.         else:
  129.             self.protivnik_potez = 'X'
  130.  
  131.     def pomeraj(self,igra):
  132.         izaberi_poziciju,rezultat = self.najbolji_potez(igra)#ovo igra racunar,racunar trazi svoj najbolji potez uz pomoc ove funk.
  133.         igra.mark(self.oznaka,izaberi_poziciju)
  134.  
  135.  
  136.  
  137.     def najbolji_potez(self,igra):
  138.  
  139.         najbolji_rezultat = None
  140.         najbolji_pomeraj = None
  141.  
  142.         for m in igra.izaberi_poziciju():
  143.             igra.mark(self.oznaka,m)
  144.  
  145.             if igra.gotovo():#uslov za zavrsetak rekurzije
  146.                 rezultat = self.get_rezultat(igra)
  147.             else:
  148.                 sledeci_potez,rezultat = self.najlosiji_potez(igra)
  149.  
  150.             igra.vrati_poslednji_potez()
  151.  
  152.             if najbolji_rezultat == None or rezultat > najbolji_rezultat:
  153.                 najbolji_rezultat = rezultat
  154.                 najbolji_pomeraj = m
  155.  
  156.         return najbolji_pomeraj, najbolji_rezultat
  157.  
  158.  
  159.  
  160.     # metoda za nalazenje najboljeg poteza za coveka
  161.     #
  162.     def najlosiji_potez(self,igra):
  163.  
  164.         najbolji_rezultat = None
  165.         najbolji_pomeraj = None
  166.  
  167.         for m in igra.izaberi_poziciju():
  168.             igra.mark(self.protivnik_potez,m)
  169.  
  170.             if igra.gotovo():#zavrsetak igre the end  (zavrstak simulacije jednog poteza)
  171.                 rezultat = self.get_rezultat(igra)
  172.             else:
  173.                 sledeci_potez,rezultat = self.najbolji_potez(igra)
  174.  
  175.             igra.vrati_poslednji_potez()
  176.  
  177.             if najbolji_rezultat == None or rezultat < najbolji_rezultat:
  178.                 najbolji_rezultat = rezultat
  179.                 najbolji_pomeraj = m
  180.  
  181.         return najbolji_pomeraj, najbolji_rezultat
  182.  
  183.     def get_rezultat(self,igra):
  184.         if igra.gotovo():
  185.             if igra.pobednik  == self.oznaka:
  186.                 return 1
  187.             elif igra.pobednik == self.protivnik_potez:
  188.                 return -1
  189.         return 0
  190.  
  191.  
  192. if __name__ == '__main__':
  193.     igra=IKSOKS()
  194.     x= raw_input("Izaberi X ili O").upper()
  195.     if  x == "X":
  196.         Igrac1 = Ja("X")
  197.         Igrac2 = Komp("O")
  198.     else:
  199.         Igrac1 = Komp("X")
  200.         Igrac2 = Ja("O")
  201.     igra.start( Igrac1, Igrac2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement