Advertisement
Guest User

Untitled

a guest
Nov 14th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.36 KB | None | 0 0
  1. from tkinter import *
  2. from random import randint
  3. from time import sleep
  4.  
  5. root = Tk()
  6. STEP = 125
  7. root.geometry("500x500")
  8. color = {"2" : "pink",
  9. "4" : "red",
  10. "8" : "blue",
  11. "16": "brown",
  12. "32": "white",
  13. "64": "green",
  14. "128":"yellow"}
  15.  
  16. field = [[None] * 4 for i in range(4)]
  17.  
  18. def game_end():
  19. for line in field:
  20. if None in line:
  21. return False
  22.  
  23. for i in range(4):
  24. for j in range(3):
  25. if field[i][j]["text"] == field[i][j + 1]["text"]:
  26. return False
  27. if field[j][i]["text"] == field[j + 1][i]["text"]:
  28. return False
  29. return True
  30.  
  31. def add_title():
  32. i, j = randint(0, 3), randint(0, 3)
  33. while field[i][j] is not None:
  34. i, j = randint(0, 3), randint(0, 3)
  35.  
  36. field[i][j] = Label(root, text = "2", height = 3, width = 1, font="Arial 24", bg="pink")
  37. for k in range(1, 5):
  38. field[i][j]["width"] = k
  39. field[i][j].place(y = i * STEP, x = j * STEP)
  40. root.update()
  41. sleep(0.25)
  42.  
  43. def left(event):
  44. flag = False
  45. for i in range(4):
  46. free = 0
  47. for j in range(4):
  48. if field[i][j] is None:
  49. free += 1
  50. else:
  51. if free > 0:
  52. field[i][j - free] = field[i][j]
  53. field[i][j] = None
  54. for k in range(0, STEP + 1):
  55. field[i][j - free].place(y = i * STEP, x = j * STEP - free * k)
  56. root.update()
  57. sleep(0.001)
  58. flag = True
  59. if j - free > 0 and field[i][j - free]["text"] == field[i][j - free - 1]["text"]:
  60. for k in range(0, STEP + 1):
  61. field[i][j - free].place(y = i * STEP, x = (j - free) * STEP - k)
  62. root.update()
  63. sleep(0.001)
  64. field[i][j - free].destroy()
  65. field[i][j - free] = None
  66. field[i][j - free - 1]["text"] = str(int(field[i][j - free - 1]["text"]) * 2)
  67. field[i][j - free - 1]["bg"] = color[field[i][j - free - 1]["text"]]
  68. free += 1
  69. flag = True
  70.  
  71. if flag:
  72. add_title()
  73. if game_end():
  74. lab = Label(root, text = "GAME OVER", height = 10, width = 10, font="Arial 24", bg="yellow")
  75. lab.place(x = 100, y = 100)
  76.  
  77. def right(event):
  78. flag = False
  79. for i in range(4):
  80. free = 0
  81. for j in range(3, -1, -1):
  82. if field[i][j] is None:
  83. free += 1
  84. else:
  85. if free > 0:
  86. field[i][j + free] = field[i][j]
  87. field[i][j] = None
  88. field[i][j + free].place(y = i * STEP, x = (j + free) * STEP)
  89. flag = True
  90. if j + free < 3 and field[i][j + free]["text"] == field[i][j + free + 1]["text"]:
  91. field[i][j + free].destroy()
  92. field[i][j + free] = None
  93. field[i][j + free + 1]["text"] = str(int(field[i][j + free + 1]["text"]) * 2)
  94. free += 1
  95. flag = True
  96.  
  97. if flag:
  98. add_title()
  99. if game_end():
  100. print('END')
  101.  
  102. def down(event):
  103. flag = False
  104. for j in range(4):
  105. free = 0
  106. for i in range(3, -1, -1):
  107. if field[i][j] is None:
  108. free += 1
  109. else:
  110. if free > 0:
  111. field[i + free][j] = field[i][j]
  112. field[i][j] = None
  113. field[i + free][j].place(y = (i + free) * STEP, x = j * STEP)
  114. flag = True
  115. if i + free < 3 and field[i + free][j]["text"] == field[i + free + 1][j]["text"]:
  116. field[i + free][j].destroy()
  117. field[i + free][j] = None
  118. field[i + free + 1][j]["text"] = str(int(field[i + free + 1][j]["text"]) * 2)
  119. free += 1
  120. flag = True
  121. if flag:
  122. add_title()
  123. if game_end():
  124. print('END')
  125.  
  126.  
  127. def up(event):
  128. flag = False
  129. for j in range(4):
  130. free = 0
  131. for i in range(4):
  132. if field[i][j] is None:
  133. free += 1
  134. else:
  135. if free > 0:
  136. field[i - free][j] = field[i][j]
  137. field[i][j] = None
  138. field[i - free][j].place(y = (i - free) * STEP, x = j * STEP)
  139. flag = True
  140. if i - free > 0 and field[i - free][j]["text"] == field[i - free - 1][j]["text"]:
  141. field[i - free][j].destroy()
  142. field[i - free][j] = None
  143. field[i - free - 1][j]["text"] = str(int(field[i - free - 1][j]["text"]) * 2)
  144. free += 1
  145. flag = True
  146. if flag:
  147. add_title()
  148. if game_end():
  149. print('END')
  150.  
  151.  
  152.  
  153. root.bind('<Down>', down)
  154. root.bind('<Left>', left)
  155. root.bind('<Up>', up)
  156. root.bind('<Right>', right)
  157. add_title()
  158. add_title()
  159. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement