8869

5698

from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)

column = 4                          # столбцы
row = 4                             # строки
btn = []                            # список кнопок
playGround = [0] * 14
playGround += [2, 2]
shuffle(playGround)

def play(n):                        # функция
    paCopy = playGround.copy()
    if n in [7, 11]:                # движение вправо
        for j in range(3):
            for i in range(14, -1, -1):
                if playGround[i+1] == 0 and (i+1)%4 != 0:
                    playGround[i+1] = playGround[i]
                    playGround[i] = 0
        for i in range(14, -1, -1):
                if playGround[i+1] == playGround[i] and (i+1)%4 != 0:
                    playGround[i+1] = playGround[i] * 2
                    playGround[i] = 0
        for i in range(14, -1, -1):
                if playGround[i+1] == 0 and (i+1)%4 != 0:
                    playGround[i+1] = playGround[i]
                    playGround[i] = 0
    elif n in [4, 8]:                # движение влево
        for j in range(3):
            for i in range(1, 16):
                if playGround[i-1] == 0 and (i)%4 != 0:
                    playGround[i-1] = playGround[i]
                    playGround[i] = 0
        for i in range(1, 16):
                if playGround[i-1] == playGround[i] and (i)%4 != 0:
                    playGround[i-1] = playGround[i] * 2
                    playGround[i] = 0
        for i in range(1, 16):
                if playGround[i-1] == 0 and (i)%4 != 0:
                    playGround[i-1] = playGround[i]
                    playGround[i] = 0
    elif n in [1, 2]:                # движение вверх
        for j in range(3):
            for i in range(4, 16):
                if playGround[i-4] == 0:
                    playGround[i-4] = playGround[i]
                    playGround[i] = 0
        for i in range(4, 16):
            if playGround[i-4] == playGround[i]:
                playGround[i-4] = playGround[i] * 2
                playGround[i] = 0
        for i in range(4, 16):
            if playGround[i-4] == 0:
                playGround[i-4] = playGround[i]
                playGround[i] = 0
    elif n in [13, 14]:                # движение вниз
        for j in range(3):
            for i in range(11, -1, -1):
                if playGround[i+4] == 0:
                    playGround[i+4] = playGround[i]
                    playGround[i] = 0
        for i in range(11, -1, -1):
                if playGround[i+4] == playGround[i]:
                    playGround[i+4] = playGround[i] * 2
                    playGround[i] = 0
        for i in range(11, -1, -1):
                if playGround[i+4] == 0:
                    playGround[i+4] = playGround[i]
                    playGround[i] = 0
    else: return
    if paCopy == playGround:
        return
    a = []
    for i in range(16):
        if playGround[i] == 0:
            a += [i]
    if len(a) != 0:
        shuffle(a)
        b = [2,2,2,4]
        shuffle(b)
        playGround[a[0]] = b[0]
    for i in range(16):
        btn[i].config(text =  playGround[i] if playGround[i] != 0 else " ")

def kbd(event):
    d = {'Up':1, 'Down':14, 'Left':4, 'Right':7}
    play(d[event.keysym])

tk = Tk()
for i in range(row):
    f = Frame()
    f.pack(expand=YES, fill=BOTH)
    for j in range(column):
        n=i*column+j
        btn += [Button(f, font =("mono", 16, "bold"), width = 4, height=2)]
        btn[-1].pack(expand=YES, fill=BOTH, side=LEFT)
        btn[-1].config(text = playGround[n] if playGround[n] != 0 else " ")
        btn[-1].config(command=lambda n=n:play(n))
tk.bind('<Key>', kbd)

mainloop()

Ggv

from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)

column = 4                          # столбцы
row = 4                             # строки
btn = []                            # список кнопок
playGround = [0] * 14
playGround += [2, 2]
shuffle(playGround)

def play(n):                        # функция
    paCopy = playGround.copy()
    if n in [7, 11]:                # движение вправо
        for j in range(3):
            for i in range(14, -1, -1):
                if playGround[i+1] == 0 and (i+1)%4 != 0:
                    playGround[i+1] = playGround[i]
                    playGround[i] = 0
        for i in range(14, -1, -1):
                if playGround[i+1] == playGround[i] and (i+1)%4 != 0:
                    playGround[i+1] = playGround[i] * 2
                    playGround[i] = 0
        for i in range(14, -1, -1):
                if playGround[i+1] == 0 and (i+1)%4 != 0:
                    playGround[i+1] = playGround[i]
                    playGround[i] = 0
    elif n in [4, 8]:                # движение влево
        for j in range(3):
            for i in range(1, 16):
                if playGround[i-1] == 0 and (i)%4 != 0:
                    playGround[i-1] = playGround[i]
                    playGround[i] = 0
        for i in range(1, 16):
                if playGround[i-1] == playGround[i] and (i)%4 != 0:
                    playGround[i-1] = playGround[i] * 2
                    playGround[i] = 0
        for i in range(1, 16):
                if playGround[i-1] == 0 and (i)%4 != 0:
                    playGround[i-1] = playGround[i]
                    playGround[i] = 0
    elif n in [1, 2]:                # движение вверх
        for j in range(3):
            for i in range(4, 16):
                if playGround[i-4] == 0:
                    playGround[i-4] = playGround[i]
                    playGround[i] = 0
        for i in range(4, 16):
            if playGround[i-4] == playGround[i]:
                playGround[i-4] = playGround[i] * 2
                playGround[i] = 0
        for i in range(4, 16):
            if playGround[i-4] == 0:
                playGround[i-4] = playGround[i]
                playGround[i] = 0
    elif n in [13, 14]:                # движение вниз
        for j in range(3):
            for i in range(11, -1, -1):
                if playGround[i+4] == 0:
                    playGround[i+4] = playGround[i]
                    playGround[i] = 0
        for i in range(11, -1, -1):
                if playGround[i+4] == playGround[i]:
                    playGround[i+4] = playGround[i] * 2
                    playGround[i] = 0
        for i in range(11, -1, -1):
                if playGround[i+4] == 0:
                    playGround[i+4] = playGround[i]
                    playGround[i] = 0
    else: return
    if paCopy == playGround:
        return
    a = []
    for i in range(16):
        if playGround[i] == 0:
            a += [i]
    if len(a) != 0:
        shuffle(a)
        b = [2,2,2,4]
        shuffle(b)
        playGround[a[0]] = b[0]
    for i in range(16):
        btn[i].config(text =  playGround[i] if playGround[i] != 0 else " ")

def kbd(event):
    d = {'Up':1, 'Down':14, 'Left':4, 'Right':7}
    if event.keysym in d:
        play(d[event.keysym])

tk = Tk()
for i in range(row):
    f = Frame()
    f.pack(expand=YES, fill=BOTH)
    for j in range(column):
        n=i*column+j
        btn += [Button(f, font =("mono", 16, "bold"), width = 4, height=2)]
        btn[-1].pack(expand=YES, fill=BOTH, side=LEFT)
        btn[-1].config(text = playGround[n] if playGround[n] != 0 else " ")
        btn[-1].config(command=lambda n=n:play(n))
tk.bind('<Key>', kbd)

mainloop()

Ррп