Advertisement
Guest User

Untitled

a guest
Apr 30th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.56 KB | None | 0 0
  1. import random
  2. import tkinter as tk
  3. from tkinter import ttk
  4. import tkinter.messagebox
  5.  
  6. root = tk.Tk()
  7.  
  8. """ *** Memory *** """
  9. board2 = [["0", "1", "2"], ["3", "4", "5"], ["6", "7", "8"]]
  10. a = ["X"]
  11.  
  12. """ *** Functions *** """
  13. player = tkinter.messagebox.askyesno("First thing first", "Playing against another player?")
  14. print("is there another player? ", player)
  15.  
  16.  
  17. def turn(pos1, board2, button, a):
  18. """ enter choice to memory and change the board and interface """
  19. print("playing with", a)
  20. for i in range(len(board2)):
  21. for n in range(len(board2[i])):
  22. if board2[i][n] == str(pos1):
  23. board2[i][n] = str(a[0])
  24.  
  25. # toggle button text
  26. aiturn = False
  27. if button["text"] == " ":
  28. button["text"] = str(a[0])
  29.  
  30. # change a to new turn
  31. if player:
  32.  
  33. if a[0] == "X":
  34. a[0] = "O"
  35. print("changed x to o")
  36.  
  37. else:
  38. a[0] = "X"
  39. print("changed o to x")
  40.  
  41. else:
  42. print("cant, already taken")
  43. aiturn = True
  44.  
  45. # check win state
  46. aiturn = win()
  47.  
  48. # Ai
  49.  
  50. if not player:
  51.  
  52. print("fired ai")
  53.  
  54. if not aiturn:
  55. board2, aiturn = checkatk(board2, aiturn)
  56. print("ai turn for atk is ", aiturn)
  57.  
  58. if not aiturn:
  59. board2, aiturn = checkdef(board2, aiturn)
  60. print("ai turn for def is ", aiturn)
  61.  
  62. if not aiturn:
  63. board2, pos1, a, button, aiturn = aiplay(board2, pos1, a, button, aiturn)
  64. print("ai turn for random is ", aiturn)
  65.  
  66. # aiturn = False
  67.  
  68. for i in range(3):
  69. print(board2[i][0], board2[i][1], board2[i][2])
  70.  
  71. # check win state
  72. aiturn = win()
  73.  
  74. return board2, pos1, button, a, aiturn
  75.  
  76.  
  77. def aiplay(board2, pos1, a, button, aiturn):
  78. """ chose a random number and play it"""
  79. pos1 = "".join(random.sample(["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1))
  80.  
  81. for i in range(len(board2)):
  82. for n in range(len(board2[i])):
  83. if str(board2[i][n]) == str(pos1):
  84. print(str(board2[i][n]), " is the changed value")
  85. board2[i][n] = "O"
  86. options[str(pos1)]()
  87. aiturn = True
  88.  
  89. return board2, pos1, a, button, aiturn
  90. else:
  91. # repeat if choice is taken
  92. board2, pos1, a, button, aiturn = aiplay(board2, pos1, a, button, aiturn)
  93. return board2, pos1, a, button, aiturn
  94.  
  95.  
  96. def win():
  97. """check win state"""
  98. for i in range(3):
  99.  
  100. if "XXX" == str("".join(board2[i][0:3])) or "XXX" == (board2[0][i] + board2[1][i] + board2[2][i]):
  101. reset(1)
  102. aiturn = True
  103. return aiturn
  104.  
  105. if (board2[0][0] + board2[1][1] + board2[2][2]) == "XXX" or (
  106. board2[0][2] + board2[1][1] + board2[2][0]) == "XXX":
  107. reset(1)
  108. aiturn = True
  109. return aiturn
  110.  
  111. for i in range(3):
  112.  
  113. if "OOO" == str("".join(board2[i][0:3])) or "OOO" == (board2[0][i] + board2[1][i] + board2[2][i]):
  114. reset(2)
  115.  
  116. if (board2[0][0] + board2[1][1] + board2[2][2]) == "OOO" or (
  117. board2[0][2] + board2[1][1] + board2[2][0]) == "OOO":
  118. reset(2)
  119.  
  120. info = 0
  121. for i in range(3):
  122. for n in range(3):
  123. if board2[i][n] == "X":
  124. info += 1
  125.  
  126. if board2[i][n] == "O":
  127. info += 1
  128.  
  129. if info == 9:
  130. reset(0)
  131. aiturn = True
  132. return aiturn
  133.  
  134.  
  135. def reset(n):
  136. """ win state, reset board """
  137. if n == 0:
  138. tkinter.messagebox.showinfo('No one won', 'No one won, restarting')
  139. else:
  140. tkinter.messagebox.showinfo('There is a winner!', 'Player ' + str(n) + ' is the winner!')
  141. numb = 0
  142. button1["text"] = " "
  143. button2["text"] = " "
  144. button3["text"] = " "
  145. button4["text"] = " "
  146. button5["text"] = " "
  147. button6["text"] = " "
  148. button7["text"] = " "
  149. button8["text"] = " "
  150. button9["text"] = " "
  151. for i in range(len(board2)):
  152. for n in range(len(board2[i])):
  153. board2[i][n] = str(numb)
  154. numb += 1
  155.  
  156. return board2
  157.  
  158.  
  159. def checkatk(board2, aiturn):
  160. """win the game on the next move"""
  161. danger = 0
  162. danger2 = 0
  163. danger3 = 0
  164. danger4 = 0
  165.  
  166. for n in range(3):
  167. for i in range(3):
  168. if i == 0:
  169. danger = 0
  170. if board2[n][i] == "O":
  171. danger += 1
  172.  
  173. if danger == 2:
  174. for i in range(3):
  175. if board2[n][i] != "O" and board2[n][i] != "X" and not aiturn:
  176. options[board2[n][i]]()
  177. print("Ai played")
  178. board2[n][i] = "O"
  179. danger = 0
  180. aiturn = True
  181.  
  182. for i in range(3):
  183. if i == 0:
  184. danger2 = 0
  185. if board2[i][n] == "O":
  186. danger2 += 1
  187.  
  188. if danger2 == 2:
  189. for i in range(3):
  190. if board2[i][n] != "O" and board2[i][n] != "X" and not aiturn:
  191. options[board2[i][n]]()
  192. print("Ai played")
  193. board2[i][n] = "O"
  194. danger2 = 0
  195. aiturn = True
  196.  
  197. if board2[1][1] == "O":
  198. danger3 += 1
  199. danger4 += 1
  200.  
  201. if board2[0][0] == "O":
  202. danger3 += 1
  203. if board2[2][2] == "O":
  204. danger3 += 1
  205.  
  206. if board2[2][0] == "O":
  207. danger4 += 1
  208. if board2[0][2] == "O":
  209. danger4 += 1
  210.  
  211. if danger3 == 2 and not aiturn:
  212. if board2[0][0] != "O" and board2[0][0] != "X":
  213. options[board2[0][0]]()
  214. print("Ai played")
  215. board2[0][0] = "O"
  216. aiturn = True
  217.  
  218. if board2[1][1] != "O" and board2[1][1] != "X":
  219. options[board2[1][1]]()
  220. print("Ai played")
  221. board2[1][1] = "O"
  222. aiturn = True
  223.  
  224. if board2[2][2] != "O" and board2[2][2] != "X":
  225. options[board2[2][2]]()
  226. print("Ai played")
  227. board2[2][2] = "O"
  228. aiturn = True
  229.  
  230. if danger4 == 2 and not aiturn:
  231. if board2[0][2] != "O" and board2[0][2] != "X":
  232. options[board2[0][2]]()
  233. print("Ai played")
  234. board2[0][2] = "O"
  235. aiturn = True
  236.  
  237. if board2[1][1] != "O" and board2[1][1] != "X":
  238. options[board2[1][1]]()
  239. print("Ai played")
  240. board2[1][1] = "O"
  241. aiturn = True
  242.  
  243. if board2[2][0] != "O" and board2[2][0] != "X":
  244. options[board2[2][0]]()
  245. print("Ai played")
  246. board2[2][0] = "O"
  247. aiturn = True
  248.  
  249. return board2, aiturn
  250.  
  251.  
  252. def checkdef(board2, aiturn):
  253. """block player in the next move"""
  254. danger = 0
  255. danger2 = 0
  256. danger3 = 0
  257. danger4 = 0
  258.  
  259. for n in range(3):
  260. for i in range(3):
  261. if i == 0:
  262. danger = 0
  263. if board2[n][i] == "X":
  264. danger += 1
  265.  
  266. if danger == 2:
  267. for i in range(3):
  268. if board2[n][i] != "O" and board2[n][i] != "X" and not aiturn:
  269. options[board2[n][i]]()
  270. print("Ai played")
  271. board2[n][i] = "O"
  272. danger = 0
  273. aiturn = True
  274.  
  275. for i in range(3):
  276. if i == 0:
  277. danger2 = 0
  278. if board2[i][n] == "X":
  279. danger2 += 1
  280.  
  281. if danger2 == 2:
  282. for i in range(3):
  283. if board2[i][n] != "O" and board2[i][n] != "X" and not aiturn:
  284. options[board2[i][n]]()
  285. print("Ai played")
  286. board2[i][n] = "O"
  287. danger2 = 0
  288. aiturn = True
  289.  
  290. if board2[1][1] == "X":
  291. danger3 += 1
  292. danger4 += 1
  293.  
  294. if board2[0][0] == "X":
  295. danger3 += 1
  296. if board2[2][2] == "X":
  297. danger3 += 1
  298.  
  299. if board2[2][0] == "X":
  300. danger4 += 1
  301. if board2[0][2] == "X":
  302. danger4 += 1
  303.  
  304. if danger3 == 2 and not aiturn:
  305. if board2[0][0] != "O" and board2[0][0] != "X":
  306. options[board2[0][0]]()
  307. print("Ai played")
  308. board2[0][0] = "O"
  309. aiturn = True
  310.  
  311. if board2[1][1] != "O" and board2[1][1] != "X":
  312. options[board2[1][1]]()
  313. print("Ai played")
  314. board2[1][1] = "O"
  315. aiturn = True
  316.  
  317. if board2[2][2] != "O" and board2[2][2] != "X":
  318. options[board2[2][2]]()
  319. print("Ai played")
  320. board2[2][2] = "O"
  321. aiturn = True
  322.  
  323. if danger4 == 2 and not aiturn:
  324. if board2[0][2] != "O" and board2[0][2] != "X":
  325. options[board2[0][2]]()
  326. print("Ai played")
  327. board2[0][2] = "O"
  328. aiturn = True
  329.  
  330. if board2[1][1] != "O" and board2[1][1] != "X":
  331. options[board2[1][1]]()
  332. print("Ai played")
  333. board2[1][1] = "O"
  334. aiturn = True
  335.  
  336. if board2[2][0] != "O" and board2[2][0] != "X":
  337. options[board2[2][0]]()
  338. print("Ai played")
  339. board2[2][0] = "O"
  340. aiturn = True
  341.  
  342. return board2, aiturn
  343.  
  344.  
  345. # functions to change the buttons the ai chose
  346.  
  347. def ch1():
  348. button1["text"] = "O"
  349.  
  350.  
  351. def ch2():
  352. button2["text"] = "O"
  353.  
  354.  
  355. def ch3():
  356. button3["text"] = "O"
  357.  
  358.  
  359. def ch4():
  360. button4["text"] = "O"
  361.  
  362.  
  363. def ch5():
  364. button5["text"] = "O"
  365.  
  366.  
  367. def ch6():
  368. button6["text"] = "O"
  369.  
  370.  
  371. def ch7():
  372. button7["text"] = "O"
  373.  
  374.  
  375. def ch8():
  376. button8["text"] = "O"
  377.  
  378.  
  379. def ch9():
  380. button9["text"] = "O"
  381.  
  382.  
  383. # dictionary
  384.  
  385. options = {"0": ch1,
  386. "1": ch2,
  387. "2": ch3,
  388. "3": ch4,
  389. "4": ch5,
  390. "5": ch6,
  391. "6": ch7,
  392. "7": ch8,
  393. "8": ch9,
  394. }
  395.  
  396. """ *** Layout *** """
  397.  
  398. button1 = ttk.Button(root, text=" ", command=lambda: turn("0", board2, button1, a))
  399. button2 = ttk.Button(root, text=" ", command=lambda: turn("1", board2, button2, a))
  400. button3 = ttk.Button(root, text=" ", command=lambda: turn("2", board2, button3, a))
  401. button4 = ttk.Button(root, text=" ", command=lambda: turn("3", board2, button4, a))
  402. button5 = ttk.Button(root, text=" ", command=lambda: turn("4", board2, button5, a))
  403. button6 = ttk.Button(root, text=" ", command=lambda: turn("5", board2, button6, a))
  404. button7 = ttk.Button(root, text=" ", command=lambda: turn("6", board2, button7, a))
  405. button8 = ttk.Button(root, text=" ", command=lambda: turn("7", board2, button8, a))
  406. button9 = ttk.Button(root, text=" ", command=lambda: turn("8", board2, button9, a))
  407.  
  408. root.grid_columnconfigure(0, weight=1)
  409. root.grid_columnconfigure(1, weight=1)
  410. root.grid_columnconfigure(2, weight=1)
  411.  
  412. root.grid_rowconfigure(0, weight=1)
  413. root.grid_rowconfigure(1, weight=1)
  414. root.grid_rowconfigure(2, weight=1)
  415.  
  416. button1.grid(row=0, column=0, sticky="nsew", padx=4, pady=4)
  417. button2.grid(row=0, column=1, sticky="nsew", padx=4, pady=4)
  418. button3.grid(row=0, column=2, sticky="nsew", padx=4, pady=4)
  419. button4.grid(row=1, column=0, sticky="nsew", padx=4, pady=4)
  420. button5.grid(row=1, column=1, sticky="nsew", padx=4, pady=4)
  421. button6.grid(row=1, column=2, sticky="nsew", padx=4, pady=4)
  422. button7.grid(row=2, column=0, sticky="nsew", padx=4, pady=4)
  423. button8.grid(row=2, column=1, sticky="nsew", padx=4, pady=4)
  424. button9.grid(row=2, column=2, sticky="nsew", padx=4, pady=4)
  425.  
  426. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement