2048 — браузерная игра, написанная 19-летним итальянским разработчиком Габриэле Чирулли (итал. Gabriele Cirulli) на языке программирования JavaScript.

Игровое поле имеет форму квадрата 4x4 клетки, в которых в случайном порядке появляются цифры 2 или 4. Целью игры является получение, путём сложения цифр из соседних клеток, наибольшего числа. 

#!/usr/bin/env python3
# 2048
# This is my version of the game, known as 2048.
#
# Created on April 24, 2025.
# Author: Diorditsa A.
#
# 2048.py is distributed in the hope that it will be useful, but
# WITHOUT WARRANTY OF ANY KIND; not even an implied warranty
# MARKETABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See. See the GNU General Public License for more information.
# You can get a copy of the GNU General Public License
# by link http://www.gnu.org/licenses/

from tkinter import *           # графическая библиотека
from random import *            # случайные числа и выборки

size = 5                        # размер поля
playground = [2, 2]+[0]*(size * size - 2)       # виртуальное игровое поле
shuffle(playground)
Btn = []                        # список кнопок

                                # отображение виртуального игрового поля на
def show():                     # пользовательский интерфейс
    for n in range(size*size):
        Btn[n].config(text=playground[n]
                      if playground[n] !=0 else " ")


def addnext():                  # добавить следующую цифру
    N = [i for i in range(size*size) if playground[i] == 0]
    if len(N) == 0: return
    playground[choice(N)] = 2


def shift(F, L, S, R):          # сдвинуть и сложить цифры
    # F Первая клетка в ряду
    # L Последняя клетка в ряду
    # S Шаг между клетками одного ряда
    # R Шаг между соседними рядами 
    for k in range(0, size*R, R):
        for n in range(size):
            for i in range(F, L-S, S):
                if playground[i+k] == 0:
                    playground[i+k], playground[i+k+S] = playground[i+k+S], 0
                if playground[i+k] == playground[i+k+S]:
                    playground[i+k] += playground[i+k+S]
                    playground[i+k+S] = 0
    

def play(event):                # обработчик клавиатуры
    if event.keysym in ('Up', 'Down', 'Left', 'Right'):
        eval(event.keysym + '()')
        addnext()
        show()


def Up():
    shift(0, size*size, size, 1)


def Down():
    shift(size*(size-1), -1, -size, 1)


def Right():
    shift(size-1, -1, -1, size)


def Left():
    shift(0, size, 1, size)
                

tk = Tk()
tk.title('2048')
tk.bind("<Key>", play)

n = 0
for y in range(size):
    f = Frame()
    f.pack(expand=YES, fill=BOTH)
    for x in range(size):
        Btn.append(Button(f, font=("mono", 16, "bold"),
                     width=5, height=3))
        Btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
        Btn[n].config(text=playground[n]
                   if playground[n]!=0 else " ")
        n += 1

mainloop()

Лист. 1.

#!/usr/bin/env python3
# 2048
# This is my version of the game, known as 2048.
#
# Created on April 24, 2025.
# Author: Diorditsa A.
#
# 2048.py is distributed in the hope that it will be useful, but
# WITHOUT WARRANTY OF ANY KIND; not even an implied warranty
# MARKETABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See. See the GNU General Public License for more information.
# You can get a copy of the GNU General Public License
# by link http://www.gnu.org/licenses/

from tkinter import *           # графическая библиотека
from random import *            # случайные числа и выборки

size = 4                        # размер поля
playground = [2, 2]+[0]*(size * size - 2)       # виртуальное игровое поле
shuffle(playground)
Btn = []                        # список кнопок

                                # отображение виртуального игрового поля на
def show():                     # пользовательский интерфейс
    for n in range(size*size):
        Btn[n].config(text=playground[n]
                      if playground[n] !=0 else " ")


def addnext():                  # добавить следующую цифру
    if not 0 in playground:
        tk.title('GAME OVER?')
        return
    N = [i for i in range(size*size) if playground[i] == 0]
    playground[choice(N)] = 2
    tk.title('2048')


def shift(F, L, S, R):          # сдвинуть и сложить цифры
    # F Первая клетка в ряду
    # L Последняя клетка в ряду
    # S Шаг между клетками одного ряда
    # R Шаг между соседними рядами 
    for k in range(0, size*R, R):
        for n in range(size):
            for i in range(F, L-S, S):
                if playground[i+k] == 0:
                    playground[i+k], playground[i+k+S] = playground[i+k+S], 0
                if playground[i+k] == playground[i+k+S]:
                    playground[i+k] += playground[i+k+S]
                    playground[i+k+S] = 0
    

def play(event):                # обработчик клавиатуры
    if   event.keysym == 'Up':    shift(0, size*size, size, 1)
    elif event.keysym == 'Down':  shift(size*(size-1), -1, -size, 1)
    elif event.keysym == 'Right': shift(size-1, -1, -1, size)
    elif event.keysym == 'Left':  shift(0, size, 1, size)
    else: return
    addnext()
    show()
                

tk = Tk()
tk.title('2048')
tk.bind("<Key>", play)

n = 0
for y in range(size):
    f = Frame()
    f.pack(expand=YES, fill=BOTH)
    for x in range(size):
        Btn.append(Button(f, font=("mono", 16, "bold"),
                     width=5, height=3))
        Btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
        Btn[n].config(text=playground[n]
                   if playground[n]!=0 else " ")
        n += 1

mainloop()

Лист. 1.

Задание: Перепишите программу так, чтобы добавляемые после каждого хода игрока цифры выделялись цветом.

#!/usr/bin/env python3
# 2048
# This is my version of the game, known as 2048.
#
# Created on April 24, 2025.
# Author: Diorditsa A.
#
# 2048.py is distributed in the hope that it will be useful, but
# WITHOUT WARRANTY OF ANY KIND; not even an implied warranty
# MARKETABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See. See the GNU General Public License for more information.
# You can get a copy of the GNU General Public License
# by link http://www.gnu.org/licenses/

from tkinter import *           # графическая библиотека
from random import *            # случайные числа и выборки

size = 4                        # размер поля
playground = [2, 2]+[0]*(size * size - 2)       # виртуальное игровое поле
shuffle(playground)
Btn = []                        # список кнопок

                                # отображение виртуального игрового поля на
def show():                     # пользовательский интерфейс
    for n in range(size*size):
        Btn[n].config(fg='black', text=playground[n]
                      if playground[n] !=0 else " ")


def addnext():                  # добавить следующую цифру
    if not 0 in playground:
        tk.title('GAME OVER?')
        return
    N = [i for i in range(size*size) if playground[i] == 0]
    n = choice(N)
    playground[n] = 2
    Btn[n].config(text=playground[n], fg='red')
    tk.title('2048')


def shift(F, L, S, R):          # сдвинуть и сложить цифры
    # F Первая клетка в ряду
    # L Последняя клетка в ряду
    # S Шаг между клетками одного ряда
    # R Шаг между соседними рядами 
    for k in range(0, size*R, R):
        for n in range(size):
            for i in range(F, L-S, S):
                if playground[i+k] == 0:
                    playground[i+k], playground[i+k+S] = playground[i+k+S], 0
                if playground[i+k] == playground[i+k+S]:
                    playground[i+k] += playground[i+k+S]
                    playground[i+k+S] = 0
    

def play(event):                # обработчик клавиатуры
    if   event.keysym == 'Up':    shift(0, size*size, size, 1)
    elif event.keysym == 'Down':  shift(size*(size-1), -1, -size, 1)
    elif event.keysym == 'Right': shift(size-1, -1, -1, size)
    elif event.keysym == 'Left':  shift(0, size, 1, size)
    else: return
    show()
    addnext()
                

tk = Tk()
tk.title('2048')
tk.bind("<Key>", play)

for y in range(size):
    f = Frame()
    f.pack(expand=YES, fill=BOTH)
    for x in range(size):
        Btn.append(Button(f, font=("mono", 16, "bold"),
                     width=5, height=3))
        Btn[-1].pack(expand=YES, fill=BOTH, side=LEFT)
        Btn[-1].config(text=playground[y*size+x]
                   if playground[y*size+x]!=0 else " ")

mainloop()

Лист. 1.

Лист. 1.

Лист. 1.