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.