Advertisement
here2share

# Tk_2048_Game.py

Aug 7th, 2015
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.89 KB | None | 0 0
  1. # Tk_2048_Game.py -- a slightly edited copy
  2.  
  3. from Tkinter import *
  4. from random import randint, choice
  5. from time import sleep
  6.  
  7.  
  8. main_back = 'papaya whip'
  9. root = Tk()
  10. root['bg'] = main_back
  11. backs = {0: 'chocolate2', None: 'chocolate2', 2: 'orange', 4: 'dark orange', 8: 'tomato', 16: 'orange red', 32: 'red', 64: 'firebrick2', 128: 'firebrick3', 256: 'gold2', 512: 'goldenrod2', 1024: 'DarkGoldenrod2', 2048: 'yellow2'}
  12. root.geometry("480x480+0+0")
  13.  
  14. xX = [2, 2, 2, 2, 2, 2, 2, 2, 2, 4]
  15. field = [[None] * 4 for i in range(4)]
  16. for i in range(4):
  17.     for j in range(4):
  18.         Label(root, height=2, width=4, font="Arial 25", bg=backs[0]).place(y=i * 100, x=j * 100)
  19.  
  20.  
  21. i, j = randint(0, 3), randint(0, 3)
  22. t = choice(xX)
  23. field[i][j] = Label(text=t, font="Arial 25", height=2, width=4, bg=backs[t])
  24. field[i][j].place(y=i*100, x=j*100)
  25. summ = Label(text=t, width=4, height=2, font="Arial 20", bg='chocolate2')
  26. summ.place(x=400, y=250)
  27. alph = 0.0030
  28.  
  29.  
  30. def add_tile():
  31.     bind_on()
  32.     i, j = randint(0, 3), randint(0, 3)
  33.     t = choice(xX)
  34.     if not field[i][j]:
  35.         field[i][j] = Label(root, text=t, height=2, width=4, font="Arial 25", bg=backs[t])
  36.         field[i][j].place(y=i*100, x=j*100)
  37.         summ['text'] += t
  38.         root.update()
  39.     else:
  40.         add_tile()
  41.  
  42. def left(event):
  43.     bind_off()
  44.     allow=0
  45.     for i in range(4):
  46.         free = 0
  47.         for j in range(4):
  48.             if not field[i][j]:
  49.                 free += 1
  50.             else:
  51.                 if free > 0:
  52.                     allow = 1
  53.                     field[i][j - free] = field[i][j]
  54.                     for d in range(1, 101):
  55.                         field[i][j - free].place(y=i*100, x=j*100-free*d)
  56.                         root.update()
  57.                         sleep(alph)
  58.                     field[i][j] = None
  59.                 if j - free > 0 and field[i][j - free]["text"] == field[i][j - free - 1]["text"]:
  60.                     allow = 1
  61.                     for d in range(1, 101):
  62.                         field[i][j - free].place(y=i*100, x=(j-free)*100-d)
  63.                         root.update()
  64.                         sleep(alph)
  65.                     field[i][j - free].destroy()
  66.                     field[i][j - free - 1]["text"] *= 2
  67.                     field[i][j - free - 1]["bg"] = backs[field[i][j - free - 1]["text"]]
  68.                     field[i][j - free] = None
  69.                     free += 1
  70.                     root.update()
  71.     if allow: add_tile()
  72.     else: bind_on()
  73.  
  74.  
  75. def top(event):
  76.     bind_off()
  77.     allow=0
  78.     for j in range(4):
  79.         free = 0
  80.         for i in range(4):
  81.             if not field[i][j]:
  82.                 free += 1
  83.             else:
  84.                 if free > 0:
  85.                     allow = 1
  86.                     field[i - free][j] = field[i][j]
  87.                     for d in range(1, 101):
  88.                         field[i - free][j].place(y=i*100-free*d, x=j*100)
  89.                         root.update()
  90.                         sleep(alph)
  91.                     field[i][j] = None
  92.                 if i - free > 0 and field[i - free][j]["text"] == field[i - free - 1][j]["text"]:
  93.                     allow = 1
  94.                     for d in range(1, 101):
  95.                         field[i-free][j].place(y=(i-free)*100-d, x=j*100)
  96.                         root.update()
  97.                         sleep(alph)
  98.                     field[i - free - 1][j]["text"] *= 2
  99.                     field[i - free][j].destroy()
  100.                     field[i - free - 1][j]["bg"] = backs[field[i - free - 1][j]["text"]]
  101.                     field[i - free][j] = None
  102.                     free += 1
  103.                     root.update()
  104.     if allow: add_tile()
  105.     else: bind_on()
  106.  
  107.  
  108. def right(event):
  109.     bind_off()
  110.     allow=0
  111.     for i in range(4):
  112.         free = 0
  113.         for j in range(3, -1, -1):
  114.             if not field[i][j]:
  115.                 free += 1
  116.             else:
  117.                 if free > 0:   
  118.                     allow = 1
  119.                     field[i][j + free] = field[i][j]
  120.                     for d in range(1, 101):
  121.                         field[i][j + free].place(y=i*100, x=j*100+free*d)
  122.                         root.update()
  123.                         sleep(alph)
  124.                     field[i][j] = None
  125.                 if j + free < 3 and field[i][j + free]["text"] == field[i][j + free + 1]["text"]:
  126.                     allow = 1
  127.                     for d in range(1, 101):
  128.                         field[i][j + free].place(y=i*100, x=(j+free)*100+d)
  129.                         root.update()
  130.                         sleep(alph)
  131.                     field[i][j + free + 1]["text"] *= 2
  132.                     field[i][j + free].destroy()
  133.                     field[i][j + free + 1]["bg"] = backs[field[i][j + free + 1]["text"]]
  134.                     field[i][j + free] = None
  135.                     free += 1
  136.                     root.update()
  137.     if allow: add_tile()
  138.     else: bind_on()
  139.  
  140.  
  141. def down(event):
  142.     bind_off()
  143.     allow=0
  144.     for j in range(4):
  145.         free = 0
  146.         for i in range(3, -1, -1):
  147.             if not field[i][j]:
  148.                 free += 1
  149.             else:
  150.                 if free > 0:
  151.                     allow = 1
  152.                     field[i + free][j] = field[i][j]
  153.                     for d in range(1, 101):
  154.                         field[i+free][j].place(y=i*100+free*d, x=j*100)
  155.                         root.update()
  156.                         sleep(alph)
  157.                     field[i][j] = None
  158.                 if i + free < 3 and field[i + free][j]["text"] == field[i + free + 1][j]["text"]:
  159.                     allow = 1
  160.                     for d in range(1, 101):
  161.                         field[i + free][j].place(y=(i+free)*100+d, x=j*100)
  162.                         root.update()
  163.                         sleep(alph)
  164.                     field[i + free + 1][j]["text"] *= 2
  165.                     field[i + free][j].destroy()
  166.                     field[i + free][j] = None
  167.                     field[i + free + 1][j]["bg"] = backs[field[i + free + 1][j]["text"]]
  168.                     free += 1
  169.                     root.update()
  170.     if allow: add_tile()
  171.     else: bind_on()
  172.  
  173. def bind_on():
  174.     root.bind("<Down>", down)  
  175.     root.bind("<Up>", top)
  176.     root.bind("<Left>", left)
  177.     root.bind("<Right>", right)
  178.  
  179. def bind_off():
  180.     root.unbind("<Down>")  
  181.     root.unbind("<Up>")
  182.     root.unbind("<Left>")
  183.     root.unbind("<Right>")
  184.    
  185. bind_on()
  186.  
  187. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement