Advertisement
kernel_memory_dump

Untitled

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