Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter import *
- from random import randint
- from time import sleep
- root = Tk()
- STEP = 125
- root.geometry("500x500")
- color = {"2" : "pink",
- "4" : "red",
- "8" : "blue",
- "16": "brown",
- "32": "white",
- "64": "green",
- "128":"yellow"}
- field = [[None] * 4 for i in range(4)]
- def game_end():
- for line in field:
- if None in line:
- return False
- for i in range(4):
- for j in range(3):
- if field[i][j]["text"] == field[i][j + 1]["text"]:
- return False
- if field[j][i]["text"] == field[j + 1][i]["text"]:
- return False
- return True
- def add_title():
- i, j = randint(0, 3), randint(0, 3)
- while field[i][j] is not None:
- i, j = randint(0, 3), randint(0, 3)
- field[i][j] = Label(root, text = "2", height = 3, width = 1, font="Arial 24", bg="pink")
- for k in range(1, 5):
- field[i][j]["width"] = k
- field[i][j].place(y = i * STEP, x = j * STEP)
- root.update()
- sleep(0.25)
- def left(event):
- flag = False
- for i in range(4):
- free = 0
- for j in range(4):
- if field[i][j] is None:
- free += 1
- else:
- if free > 0:
- field[i][j - free] = field[i][j]
- field[i][j] = None
- for k in range(0, STEP + 1):
- field[i][j - free].place(y = i * STEP, x = j * STEP - free * k)
- root.update()
- sleep(0.001)
- flag = True
- if j - free > 0 and field[i][j - free]["text"] == field[i][j - free - 1]["text"]:
- for k in range(0, STEP + 1):
- field[i][j - free].place(y = i * STEP, x = (j - free) * STEP - k)
- root.update()
- sleep(0.001)
- field[i][j - free].destroy()
- field[i][j - free] = None
- field[i][j - free - 1]["text"] = str(int(field[i][j - free - 1]["text"]) * 2)
- field[i][j - free - 1]["bg"] = color[field[i][j - free - 1]["text"]]
- free += 1
- flag = True
- if flag:
- add_title()
- if game_end():
- lab = Label(root, text = "GAME OVER", height = 10, width = 10, font="Arial 24", bg="yellow")
- lab.place(x = 100, y = 100)
- def right(event):
- flag = False
- for i in range(4):
- free = 0
- for j in range(3, -1, -1):
- if field[i][j] is None:
- free += 1
- else:
- if free > 0:
- field[i][j + free] = field[i][j]
- field[i][j] = None
- field[i][j + free].place(y = i * STEP, x = (j + free) * STEP)
- flag = True
- if j + free < 3 and field[i][j + free]["text"] == field[i][j + free + 1]["text"]:
- field[i][j + free].destroy()
- field[i][j + free] = None
- field[i][j + free + 1]["text"] = str(int(field[i][j + free + 1]["text"]) * 2)
- free += 1
- flag = True
- if flag:
- add_title()
- if game_end():
- print('END')
- def down(event):
- flag = False
- for j in range(4):
- free = 0
- for i in range(3, -1, -1):
- if field[i][j] is None:
- free += 1
- else:
- if free > 0:
- field[i + free][j] = field[i][j]
- field[i][j] = None
- field[i + free][j].place(y = (i + free) * STEP, x = j * STEP)
- flag = True
- if i + free < 3 and field[i + free][j]["text"] == field[i + free + 1][j]["text"]:
- field[i + free][j].destroy()
- field[i + free][j] = None
- field[i + free + 1][j]["text"] = str(int(field[i + free + 1][j]["text"]) * 2)
- free += 1
- flag = True
- if flag:
- add_title()
- if game_end():
- print('END')
- def up(event):
- flag = False
- for j in range(4):
- free = 0
- for i in range(4):
- if field[i][j] is None:
- free += 1
- else:
- if free > 0:
- field[i - free][j] = field[i][j]
- field[i][j] = None
- field[i - free][j].place(y = (i - free) * STEP, x = j * STEP)
- flag = True
- if i - free > 0 and field[i - free][j]["text"] == field[i - free - 1][j]["text"]:
- field[i - free][j].destroy()
- field[i - free][j] = None
- field[i - free - 1][j]["text"] = str(int(field[i - free - 1][j]["text"]) * 2)
- free += 1
- flag = True
- if flag:
- add_title()
- if game_end():
- print('END')
- root.bind('<Down>', down)
- root.bind('<Left>', left)
- root.bind('<Up>', up)
- root.bind('<Right>', right)
- add_title()
- add_title()
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement