Advertisement
Guest User

Untitled

a guest
May 24th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.43 KB | None | 0 0
  1. import os,sys
  2. from Figura import *
  3. korisnik = True
  4.  
  5. pomocniRecnik = {}
  6. pomocniRecnik["a"] = 1
  7. pomocniRecnik["b"] = 2
  8. pomocniRecnik["c"] = 3
  9. pomocniRecnik["d"] = 4
  10. pomocniRecnik["e"] = 5
  11. pomocniRecnik["f"] = 6
  12. pomocniRecnik["g"] = 7
  13. pomocniRecnik["h"] = 8
  14.  
  15. recnikZaJelo = {} #Sadrzi polja figura koja su ostvarila uslov da pojedu
  16. recnikMogucihPoteza = {} #Sadrzi polja svih dostupnih poteza
  17.  
  18. def dodavanjeFigura():
  19. global tabla
  20. tabla = {}
  21. tabla["a"] = {}
  22. tabla["b"] = {}
  23. tabla["c"] = {}
  24. tabla["d"] = {}
  25. tabla["e"] = {}
  26. tabla["f"] = {}
  27. tabla["g"] = {}
  28. tabla["h"] = {}
  29. for i in range(8):
  30. tabla["a"][i + 1] = None
  31. tabla["b"][i + 1] = None
  32. tabla["c"][i + 1] = None
  33. tabla["d"][i + 1] = None
  34. tabla["e"][i + 1] = None
  35. tabla["f"][i + 1] = None
  36. tabla["g"][i + 1] = None
  37. tabla["h"][i + 1] = None
  38. for i in range(8):
  39. if i % 2 != 0:
  40. tabla["a"][i + 1] = Figura("a",i+1,"c",False)
  41. tabla["c"][i + 1] = Figura("c",i+1,"c",False)
  42. tabla["g"][i + 1] = Figura("g",i+1,"b",False)
  43. else:
  44. tabla["b"][i + 1] = Figura("b",i+1,"c",False)
  45. tabla["f"][i + 1] = Figura("f",i+1,"b",False)
  46. tabla["h"][i + 1] = Figura("h",i+1,"b",False)
  47. tabla["e"][2] = Figura("e",2,"c",False)
  48. tabla["e"][6] = Figura("e",6,"c",False)
  49. tabla["d"][1] = Figura("d",1,"c",False)
  50. iscrtavanjeTable()
  51.  
  52. def iscrtavanjeTable():
  53. global tabla
  54. flag = 0
  55. print(" 1 2 3 4 5 6 7 8")
  56. print("|-------------------------------|")
  57. #for red in tabla
  58. for k,v in tabla.items():
  59. #for kolona in red
  60. for k2,v2 in v.items():
  61. print("|",end="")
  62. if v2 == None:
  63. print(" ",end="")
  64. else:
  65. if v2.get_boja() == "b":
  66. print(" b ",end="")
  67. #moze da se izbrise velika slova
  68. elif v2.get_boja() == "B":
  69. print(" B ", end="")
  70. elif v2.get_boja() == "c":
  71. print(" c ",end="")
  72. else:
  73. print(" C ", end="")
  74. flag += 1
  75. if flag == 8:
  76. print("| "+k, end="")
  77. flag = 0
  78. print()
  79. if k != "h":
  80. print("|---+---+---+---+---+---+---+---|")
  81. print("|-------------------------------|")
  82. if korisnik == True:
  83. gameOn()
  84. else:
  85. potezRacunara()
  86.  
  87. def clearPrompt():
  88. """
  89. Cisti se command prompt
  90. """
  91. clear = lambda: os.system('cls')
  92. clear()
  93.  
  94.  
  95. def validanBroj(broj):
  96. """
  97. Proverava da li je broj ispravan.
  98. """
  99. if broj>0 and broj <= 8:
  100. return True
  101. return False
  102.  
  103. def validnoSlovo(slovo):
  104. """
  105. Proverava da li je slovo ispravno.
  106. """
  107. if slovo == "a" or slovo == "b" or slovo == "c" or slovo == "d" \
  108. or slovo == "e" or slovo == "f" or slovo == "g" or slovo == "h":
  109. return True
  110. return False
  111.  
  112. def validanUpisPoteza(potez):
  113. """
  114. Proverava da li je duzina upisa tacna,
  115. da li je prvi karakter slovo i drugi broj.
  116. """
  117. if len(potez) == 2:
  118. slovo = potez[0]
  119. broj = potez[1]
  120. try:
  121.  
  122. str(slovo) and int(broj)
  123.  
  124. return True
  125. except:
  126. return False
  127. return False
  128.  
  129. def ispisFiguraSaUslovomZaJelo():
  130. """
  131. Ispisuje sve figure koje su ostvarile uslov
  132. da pojedu i one se moraju pomeriti.
  133. """
  134.  
  135. #ISPISUJE MI POZICIJE NA KOJIMA CES BITI KAD POJEDES
  136.  
  137. #for k, v in recnikZaJelo.items():
  138. # for k2,v2 in v.items():
  139. # for broj in v2:
  140. # polje = k2 + str(v2)
  141. #print("Na polje ",polje," ces stati kad pojedes")
  142. print("nebitno")
  143.  
  144. def praznoPolje(slovo,broj):
  145. """
  146. Proverava da li je polje prazno.
  147. """
  148. for k,v in tabla.items():
  149. if slovo == k:
  150. for k2,v2 in v.items():
  151. if broj == k2:
  152. if v2 == None:
  153. return True
  154. return False
  155.  
  156. def proveraBojeSvojeFigure(slovo,broj):
  157. """
  158. Proverava boju izabrane figure
  159. """
  160. for k,v in tabla.items():
  161. if k == slovo:
  162. for k2,v2 in v.items():
  163. if k2 == broj:
  164. if v2.get_boja() == "b":
  165. return True
  166. return False
  167.  
  168. def ispravanUnosPocetnogPoteza(pocetniPotez):
  169. """
  170. Proverava ispravnost prvog poteza.
  171. """
  172. if validanUpisPoteza(pocetniPotez):
  173. slovo = pocetniPotez[0]
  174. broj = int(pocetniPotez[1])
  175. if validnoSlovo(slovo) and validanBroj(broj) and not praznoPolje(slovo,broj) \
  176. and proveraBojeSvojeFigure(slovo,broj):
  177. return True
  178. else:
  179. return False
  180. return False
  181.  
  182. def ispravanUnosKrajnjegPoteza(krajnjiPotez):
  183. """
  184. Proverava ispravnost krajnjeg poteza.
  185. """
  186. print("dal udje")
  187.  
  188. if validanUpisPoteza(krajnjiPotez):
  189. slovo = krajnjiPotez[0]
  190. broj = int(krajnjiPotez[1])
  191. if validnoSlovo(slovo) and validanBroj(broj) and praznoPolje(slovo,broj):
  192. print("usao1")
  193. return True
  194. return False
  195. return False
  196.  
  197.  
  198. def proveraJela():
  199. """
  200. Proverava dijagonalno polje da li sadrzi protivnicku
  201. figuru,ukoliko da,proverava dijagonalno polje od te
  202. figure da li je prazno.
  203. """
  204. #za red a
  205. #k = a,b,c,d,e,f,g,h, k je slovo
  206. #v = {1:None, 2:Figura, 3:none, 4:figura....do 8}
  207. #k2 = 1,2,3,4,5, k2 je broj
  208. #v2 = none,figura,none,figura
  209.  
  210. for k, v in tabla.items():
  211. for k2, v2 in v.items():
  212. if v2 != None:
  213. if v2.get_boja() == "b":
  214. recnikZaJelo[v2] = {}
  215. recnikZaJelo[v2][v2.get_redIznad2()] = []
  216. if k2 == 1:
  217. fDesno = tabla[v2.get_redIznad()][v2.get_kolonaDesno()]
  218. if fDesno != None:
  219. if (fDesno.get_boja() == "c" and praznoPolje(v2.get_redIznad2(), v2.get_kolonaDesno2())):
  220.  
  221. recnikZaJelo[v2][v2.get_redIznad2()].append(v2.get_kolonaDesno2())
  222.  
  223. elif k2 == 8: # proveri samo za levu kolonu
  224. fLevo = tabla[v2.get_redIznad()][v2.get_kolonaLevo()]
  225. if fLevo != None:
  226. if (fLevo.get_boja() == "c" and praznoPolje(v2.get_redIznad2(), v2.get_kolonaLevo2())):
  227. recnikZaJelo[v2][v2.get_redIznad2()].append(v2.get_kolonaLevo2())
  228.  
  229. else:
  230. # proveri i zalevu i za desnu
  231. fDesno = tabla[v2.get_redIznad()][v2.get_kolonaDesno()]
  232. fLevo = tabla[v2.get_redIznad()][v2.get_kolonaLevo()]
  233. if fDesno != None:
  234. if fDesno.get_boja() == "c":
  235. if praznoPolje(v2.get_redIznad2(),v2.get_kolonaDesno2()):
  236. recnikZaJelo[v2][v2.get_redIznad2()].append(v2.get_kolonaDesno2())
  237.  
  238. if fLevo != None:
  239. if fLevo.get_boja() == "c":
  240. if praznoPolje(v2.get_redIznad2(), v2.get_kolonaLevo2()):
  241. recnikZaJelo[v2][v2.get_redIznad2()].append(v2.get_kolonaLevo2())
  242.  
  243. def dostupniPotezi():
  244. """
  245. Trazi sva moguca polja koja su dostupna za igru.
  246. """
  247. global recnikMogucihPoteza,pomocniRecnik
  248. #ovde counter treba da uhvati velicinu recnika i onda na kraju proveravamo dal se promenio
  249.  
  250. for k,v in tabla.items():
  251. for k2,v2 in v.items():
  252. if v2 != None and v2.get_boja() == "b":
  253. # v2.set_kolona(k2)
  254. # v2.set_red(k)
  255. # ovo ne treba
  256. #praznoPolje(k,k2)
  257. recnikMogucihPoteza[v2] = {}
  258. recnikMogucihPoteza[v2][v2.get_redIznad()] = []
  259. if praznoPolje(v2.get_redIznad(),v2.get_kolonaDesno()):
  260. #pravilno resenje je mapa, gde ce figura biti kljuc, a vrednost ce biti lista torki(a1,b3,f2....), tj lista mogucih poteza
  261.  
  262. recnikMogucihPoteza[v2][v2.get_redIznad()].append(v2.get_kolonaDesno())
  263.  
  264. # counter+=1
  265. if praznoPolje(v2.get_redIznad(),v2.get_kolonaLevo()):
  266. recnikMogucihPoteza[v2][v2.get_redIznad()].append(v2.get_kolonaLevo())
  267.  
  268. #if counter > 0:
  269. # return True
  270.  
  271. #else:
  272.  
  273. # return False
  274.  
  275. def ispisDostupnihPoljaZaIgru():
  276. """
  277. Ispisuje sva polja figura koja su ostvarile
  278. uslov za skok.
  279. """
  280. print("Dostupna polja za igru: ")
  281. for k,v in recnikMogucihPoteza.items():
  282. for k2,v2 in v.items():
  283. polje = k2+str(v2)
  284. print(polje+" ",end="")
  285. print()
  286.  
  287.  
  288. def nevazeciPotez():
  289. """
  290. Vraca ispis.
  291. """
  292. print("Nevazeci potez.Probajte opet.\n")
  293.  
  294. def pomeranjeFigure(slovo, broj, slovo2, broj2):
  295. """
  296. Vrednost starog polja se postavlja na None,
  297. figura se postavlja na novo polje koje preuzima
  298. njene osobine.
  299. """
  300. global recnikZaJelo, recnikMogucihPoteza, uslovZaJelo, pomocniRecnik
  301. # tabla[slovo][broj] = None
  302. for k, v in tabla.items():
  303. print(v)
  304. if slovo == k:
  305. print("ovo je slovo", slovo)
  306. # slovo1 je f, slovo2 je d
  307. for k2, v2 in v.items():
  308. if k2 == broj:
  309. razlika = broj2 - broj
  310. print("ovo je razlika",razlika)
  311.  
  312. if razlika == 1:
  313. #
  314. tabla[v2.get_red()][v2.get_kolona()] = None
  315. v2.set_red(slovo2)
  316. # print("ovo je slovo2", slovo2)
  317. v2.set_kolona(broj2)
  318. if v2.get_red() == "a":
  319. v2.set_dama(True)
  320. v2.set_boja("B")
  321. red = v2.get_red()
  322. kolona = v2.get_kolona()
  323. tabla[red][kolona] = Figura(red, kolona, v2.get_boja(), v2.get_dama())
  324.  
  325. recnikZaJelo.clear()
  326. recnikMogucihPoteza.clear()
  327. clearPrompt()
  328.  
  329. else:
  330. #ZAVISI DAL SKACES LEVO ILI DESNO
  331. #v2
  332. print("ovo je reeed",v2.get_red())
  333.  
  334. f = tabla[v2.get_red()][v2.get_kolona()]
  335. #OVO JE FIGURICA SAD.
  336. kolonaLevo = v2.get_kolonaLevo()
  337. kolonaDesno = v2.get_kolonaDesno()
  338. iznad = v2.get_redIznad()
  339. tabla[v2.get_red()][v2.get_kolona()] = None
  340. v2.set_red(slovo2)
  341. # print("ovo je slovo2", slovo2)
  342. v2.set_kolona(broj2)
  343. if v2.get_red() == "a":
  344. v2.set_dama(True)
  345. v2.set_boja("B")
  346. red = v2.get_red()
  347. kolona = v2.get_kolona()
  348.  
  349. kolonaLevo2 = v2.get_kolonaLevo()
  350. kolonaDesno2 = v2.get_kolonaDesno()
  351.  
  352. print("ovo su kolonice")
  353. print(kolonaLevo)
  354. print(kolonaDesno)
  355. print(kolonaLevo2)
  356. print(kolonaDesno2)
  357.  
  358. if kolonaLevo == kolonaDesno2:
  359. tabla[iznad][kolonaLevo] = None
  360. elif kolonaDesno == kolonaLevo2:
  361. tabla[iznad][kolonaDesno] = None
  362.  
  363. #red i kolona su sadasnji
  364. tabla[red][kolona] = Figura(red, kolona, v2.get_boja(), v2.get_dama())
  365.  
  366. recnikZaJelo.clear()
  367. recnikMogucihPoteza.clear()
  368. clearPrompt()
  369. # else:
  370. # v2.set_red(slovo2)
  371. # v2.set_kolona(broj2)
  372. # if v2.get_red() == "a":
  373. # v2.set_dama(True)
  374. # v2.set_boja("B")
  375. # red = v2.get_red()
  376. # kolona = v2.get_kolona()
  377. # print("ovde")
  378. # print(red, kolona, v2.get_red(), v2.get_kolona())
  379. # tabla[red][kolona] = Figura(red, kolona, v2.get_boja(), v2.get_dama())
  380. # print(tabla[red][kolona], "OVDE")
  381. # tabla[slovo][broj] = None
  382.  
  383. # SAMO STAVI NONE TAMO GDE JE BILA FIGURA
  384. # recnikZaJelo.clear()
  385. # recnikMogucihPoteza.clear()
  386. # clearPrompt()
  387. iscrtavanjeTable()
  388.  
  389. def mogucnostKretanja(pocetniPotez):
  390. counter = 0
  391. #return True
  392. #proveri da li uopste moze da se krece tj da li si izabrao dobrog igraca
  393. slovo = pocetniPotez[0]
  394. broj = int(pocetniPotez[1])
  395. for k, v in tabla.items():
  396. if slovo == k:
  397. for k2,v2 in v.items():
  398. if k2 == broj:
  399.  
  400. #RESI OVDE PROBLEM SA NONE
  401. if praznoPolje(v2.get_redIznad(), v2.get_kolonaLevo()) or praznoPolje(v2.get_redIznad(), v2.get_kolonaDesno()):
  402. counter +=1
  403. else: #ako nije prazno polje proveri da li je crni gore
  404. if k2 == 1:
  405. fDesno = tabla[v2.get_redIznad()][v2.get_kolonaDesno()]
  406. if(fDesno.get_boja() == "c" and praznoPolje(v2.get_redIznad2(), v2.get_kolonaDesno2())):
  407. counter += 1
  408.  
  409. elif k2 == 8: # proveri samo za levu kolonu
  410. fLevo = tabla[v2.get_redIznad()][v2.get_kolonaLevo()]
  411. if(fLevo.get_boja() == "c" and praznoPolje(v2.get_redIznad2(), v2.get_kolonaLevo2())):
  412. counter += 1
  413. else:
  414. # proveri i zalevu i za desnu
  415. fDesno = tabla[v2.get_redIznad()][v2.get_kolonaDesno()]
  416. fLevo = tabla[v2.get_redIznad()][v2.get_kolonaLevo()]
  417. if(fLevo.get_boja() == "c" or fDesno.get_boja() == "c"):
  418. if praznoPolje(v2.get_redIznad2(), v2.get_kolonaLevo2()) or praznoPolje(v2.get_redIznad2(), v2.get_kolonaDesno2()):
  419. counter += 1
  420.  
  421. if counter > 0:
  422. return True
  423.  
  424. else:
  425.  
  426. return False
  427.  
  428.  
  429. #if k2 == 1:
  430. # print("k2 ", k2)
  431. # print("v2 ", v2)
  432. #proveri samo desno dole
  433. # slovo_ispod = v2.get_redIspod()
  434. # print(slovo_ispod)
  435. #elif k2 == 8:
  436. # slovo_ispod = v2.get_redIspod()
  437. # print(slovo_ispod)
  438. #else:
  439. # slovo_ispod = v2.get_redIspod()
  440. # print(slovo_ispod)
  441.  
  442. #samo da mi ispise ako korisnik unese polje koje je ispod da ne moze
  443.  
  444.  
  445. def krajnjiPotez():
  446. global slovo, broj#, uslovZaJelo
  447. while True:
  448.  
  449. kranjiPotez = \
  450. input("Unesite poooziciju na koju zelite da pomerite figuru[npr: a1]: ").lower()
  451. if validanUpisPoteza(kranjiPotez):
  452.  
  453. slovo_ispod = ""
  454.  
  455. for k, v in tabla.items():
  456. if slovo == k:
  457. for k2, v2 in v.items():
  458. if k2 == broj:
  459. if slovo != "h":
  460. slovo_ispod = v2.get_redIspod()
  461.  
  462. slovo2 = kranjiPotez[0]
  463. broj2 = int(kranjiPotez[1])
  464. if slovo_ispod == slovo2:
  465. nevazeciPotez()
  466. return
  467.  
  468. for k, v in recnikMogucihPoteza.items():
  469. for k2, v2 in v.items():
  470. for brojVrednost in v2:
  471. if slovo2 == k2 and broj2 == brojVrednost:
  472. if ispravanUnosKrajnjegPoteza(kranjiPotez):
  473. # and pravilnoKretanje(slovo,broj,slovo2,broj2):
  474.  
  475. pomeranjeFigure(slovo, broj, slovo2, broj2)
  476.  
  477.  
  478.  
  479. for k, v in recnikZaJelo.items():
  480. for k2, v2 in v.items():
  481. for brojic in v2:
  482. if slovo2 == k2 and broj2 == brojic:
  483. # k2 je d, a v2 je lista
  484. # if slovo2 == k2 and broj2 == v2:
  485. # if ispravanUnosKrajnjegPoteza(kranjiPotez) \
  486. # and pravilnoKretanje(slovo, broj, slovo2, broj2):
  487. # pomeranjeFigure(slovo, broj, slovo2, broj2)
  488. if ispravanUnosKrajnjegPoteza(kranjiPotez):
  489. # if pravilnoKretanje(slovo,broj,slovo2,broj2):
  490. # print("srecica")
  491. pomeranjeFigure(slovo, broj, slovo2, broj2)
  492. else:
  493. nevazeciPotez()
  494. else:
  495. nevazeciPotez()
  496.  
  497. #TAMO GDE JE BIO UZMI RED IZNAD KOLONU I LEVO I DESNO, I TAMO GDE JE SAD UZMI RED ISPOD LEVO I DESNO
  498. #I STA SE POKLOPI TAMO JE CRNI!!!
  499.  
  500. def gameOn():
  501. global korisnik, recnikMogucihPoteza, uslovZaJelo, slovo, broj
  502. a = False
  503. while True:
  504. proveraJela()
  505. ispisFiguraSaUslovomZaJelo()
  506. pocetniPotez = input("Unesite poziciju sa koje pomerate figuru[npr: a1]: ").lower()
  507.  
  508. if ispravanUnosPocetnogPoteza(pocetniPotez):
  509. if mogucnostKretanja(pocetniPotez):
  510. slovo = pocetniPotez[0]
  511. broj = int(pocetniPotez[1])
  512. #ispisFiguraSaUslovomZaJelo()
  513. dostupniPotezi()
  514. ispisDostupnihPoljaZaIgru()
  515. krajnjiPotez()
  516.  
  517.  
  518. if __name__ == "__main__":
  519. dodavanjeFigura()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement