Advertisement
kernel_memory_dump

tictac youuu

Aug 27th, 2014
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.76 KB | None | 0 0
  1. import  sys
  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.         j = 0
  18.         for i in self.tabla:
  19.  
  20.             sys.stdout.write(i)
  21.             if j < 2:
  22.                  sys.stdout.write(" | ")
  23.  
  24.             if j == 2:
  25.                 sys.stdout.write("\n")
  26.                 j = 0
  27.             else:
  28.                 j += 1
  29.  
  30.  
  31.  
  32.     def izaberi_poziciju(self):
  33.  
  34.  
  35.         pomeraj = []
  36.         for i,v in enumerate(self.tabla):
  37.             if v=='-':
  38.                 pomeraj.append(i)
  39.         return pomeraj
  40.  
  41.     def mark(self,oznaka,pozicija):
  42.  
  43.         self.tabla[pozicija] = oznaka
  44.         self.poslednjiPotez.append(pozicija)
  45.  
  46.     def vrati_poslednji_potez(self):
  47.  
  48.  
  49.         self.tabla[self.poslednjiPotez.pop()] = '-'
  50.         self.pobednik = None
  51.  
  52.     def gotovo(self):
  53.         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)]
  54.  
  55.         for i,j,k in pobeda:
  56.             if self.tabla[i] == self.tabla[j] == self.tabla[k] and self.tabla[i] != '-':
  57.                 self.pobednik = self.tabla[i]
  58.                 return True
  59.  
  60.         if '-' not in self.tabla:
  61.             self.pobednik = '-'
  62.             return True
  63.  
  64.         return False
  65.  
  66.     def start(self,igrac1,igrac2):
  67.  
  68.  
  69.         self.ig1 = igrac1
  70.         self.ig2 = igrac2
  71.  
  72.         for i in range(9):
  73.  
  74.             self.print_tabla()
  75.  
  76.             if i%2==0:
  77.                 if self.ig1.tip == 'H':
  78.                     print "\t\t[Moj potez]"
  79.                 else:
  80.                     print "\t\t[Komp igra]"
  81.  
  82.                 self.ig1.pomeraj(self)
  83.             else:
  84.                 if self.ig2.tip == 'H':
  85.                     print "\t\t[Moj potez]"
  86.                 else:
  87.                     print "\t\t[Komp igra]"
  88.                 self.ig2.pomeraj(self)
  89.  
  90.             if self.gotovo():
  91.                 self.print_tabla()
  92.                 if self.pobednik == '-':
  93.                     print "\nNereseno!"
  94.                 else:
  95.                     print "\nWinner : %s" %self.pobednik
  96.                 return
  97.  
  98. class Ja:
  99.  
  100.  
  101.     def __init__(self,oznaka):
  102.         self.oznaka = oznaka
  103.         self.tip = 'H'
  104.  
  105.     def pomeraj(self, igra):
  106.  
  107.         while True:
  108.  
  109.             m = raw_input("Unesi poziciju:")
  110.  
  111.             try:
  112.                 m = int(m)
  113.             except:
  114.                 m = -1
  115.  
  116.             if m not in igra.izaberi_poziciju():
  117.                 print "Pogresno ,ponovi !"
  118.             else:
  119.                 break
  120.  
  121.         igra.mark(self.oznaka,m)
  122.  
  123. class Komp:
  124.  
  125.  
  126.     def __init__(self, oznaka):
  127.         self.oznaka = oznaka
  128.         self.tip = 'C'
  129.  
  130.         if self.oznaka == 'X':
  131.             self.protivnik_potez = 'O'
  132.         else:
  133.             self.protivnik_potez = 'X'
  134.  
  135.     def pomeraj(self,igra):
  136.         izaberi_poziciju,rezultat = self.najbolji_potez(igra)
  137.         igra.mark(self.oznaka,izaberi_poziciju)
  138.  
  139.  
  140.  
  141.     def najbolji_potez(self,igra):
  142.  
  143.         najbolji_rezultat = None
  144.         najbolji_pomeraj = None
  145.  
  146.  
  147.         #Pokupimo sve slobodne  pozicije sa table
  148.         #
  149.         for m in igra.izaberi_poziciju():
  150.  
  151.  
  152.             #  KOBAJAGI KOMP ODGIRA NEKI POTEZ
  153.  
  154.             igra.mark(self.oznaka,m)
  155.             #igra.print_tabla()
  156.             #raw_input("NAJBOLJI::::" + str(m))
  157.             #probamo da igramo na m-to mesto
  158.  
  159.             # IGRAMO SVAKO MESTO KOJE IMA
  160.             # vidimo sta se desi
  161.             # AKO SMO nasli
  162.  
  163.             if igra.gotovo(): # da li je sada gotovo?
  164.                 rezultat = self.get_rezultat(igra) # ko je pobedio?
  165.             else:
  166.                 sledeci_potez,rezultat = self.najlosiji_potez(igra)
  167.  
  168.             igra.vrati_poslednji_potez()
  169.  
  170.             if najbolji_rezultat == None or rezultat > najbolji_rezultat:
  171.                 najbolji_rezultat = rezultat
  172.                 najbolji_pomeraj = m
  173.  
  174.         return najbolji_pomeraj, najbolji_rezultat
  175.  
  176.     def najlosiji_potez(self,igra):
  177.  
  178.         najbolji_rezultat = None
  179.         najbolji_pomeraj = None
  180.  
  181.         # trazi najlosiji potez
  182.         # ide kroz sve slobodne pocizije
  183.         for m in igra.izaberi_poziciju():
  184.             # oznacava potez protivnika
  185.             igra.mark(self.protivnik_potez,m)
  186.            # igra.print_tabla()
  187.            # raw_input("NAJGORI::::" + str(m))
  188.  
  189.             if igra.gotovo(): # da li je sada gotova igra
  190.                 rezultat = self.get_rezultat(igra)
  191.             else:
  192.                 sledeci_potez,rezultat = self.najbolji_potez(igra)  # POKUPI SE NAJBOLJI POTEZ ZA COVEKA
  193.  
  194.             igra.vrati_poslednji_potez() # PONISTI GA
  195.  
  196.  
  197.             # ako je nasao jos bolji potez za cvoveka, to postoje najbolji potez
  198.             if najbolji_rezultat == None or rezultat < najbolji_rezultat:
  199.                 najbolji_rezultat = rezultat
  200.                 najbolji_pomeraj = m
  201.  
  202.         # NADJEN NAJBOLJI POTEZ ZA COVEKA
  203.         #  najboli za coveka je najgori za komp !!!!!!
  204.         return najbolji_pomeraj, najbolji_rezultat
  205.  
  206.     def get_rezultat(self,igra):
  207.         # ako je igra gotova i AI pobeduje, vracamo 1
  208.         # ako je igra gotova i AI ne pobedjuje, vracamo -1
  209.         if igra.gotovo():
  210.             if igra.pobednik  == self.oznaka:
  211.                 return 1
  212.             elif igra.pobednik == self.protivnik_potez: # self.protivnik_oznaka
  213.                 return -1
  214.         return 0 # ako igra nakon ovog poteza nece biti zavrsena, vracamo 0
  215.  
  216.  
  217. if __name__ == '__main__':
  218.     igra=IKSOKS()
  219.     x= raw_input("Izaberi X ili O")
  220.     if  x == "X":
  221.         Igrac1 = Ja("X")
  222.         Igrac2 = Komp("O")
  223.     else:
  224.         Igrac1 = Komp("X")
  225.         Igrac2 = Ja("O")
  226.     igra.start( Igrac1, Igrac2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement