dffbdf
erer
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'gold' # цвет кнопки
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), color=DIGITS_COLOR, fontsize=DIGITS_SIZE)
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), color=DIGITS_COLOR, fontsize=DIGITS_SIZE)
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
print(pos)
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), color=DIGITS_COLOR, fontsize=DIGITS_SIZE)
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
x = pos[0] // CELL_SIZE # номер столбца
y = pos[1] // CELL_SIZE # номер строки
n = y * SIZE + x # номер нажатой клетки
print(x, y, n)
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), color=DIGITS_COLOR, fontsize=DIGITS_SIZE)
def play(n):
"""
Делает ход из клетки с номером n
в пустую клетку, если это возможно!
"""
m = playground.index(' ') # индекс пустой клетки
print(m)
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
x = pos[0] // CELL_SIZE # номер столбца
y = pos[1] // CELL_SIZE # номер строки
n = y * SIZE + x # номер нажатой клетки
play(n)
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), color=DIGITS_COLOR, fontsize=DIGITS_SIZE)
def play(n):
"""
Делает ход из клетки с номером n
в пустую клетку, если это возможно!
"""
m = playground.index(' ') # индекс пустой клетки
playground[n], playground[m] = playground[m], playground[n] # делаем ход
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
x = pos[0] // CELL_SIZE # номер столбца
y = pos[1] // CELL_SIZE # номер строки
n = y * SIZE + x # номер нажатой клетки
play(n)
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), color=DIGITS_COLOR, fontsize=DIGITS_SIZE)
def play(n):
"""
Делает ход из клетки с номером n
в пустую клетку, если это возможно!
"""
m = playground.index(' ') # индекс пустой клетки
if n in [m+1, m-1] and m // SIZE == n // SIZE or n in [m-SIZE, m+SIZE]:
playground[n], playground[m] = playground[m], playground[n] # делаем ход
return True
return False
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
x = pos[0] // CELL_SIZE # номер столбца
y = pos[1] // CELL_SIZE # номер строки
n = y * SIZE + x # номер нажатой клетки
if not play(n):
print('Этот ход невозможен!')
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), color=DIGITS_COLOR, fontsize=DIGITS_SIZE)
def play(n):
"""
Делает ход из клетки с номером n
в пустую клетку, если это возможно!
"""
m = playground.index(' ') # индекс пустой клетки
if n in [m+1, m-1] and m // SIZE == n // SIZE or n in [m-SIZE, m+SIZE]:
playground[n], playground[m] = playground[m], playground[n] # делаем ход
return True
return False
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
x = pos[0] // CELL_SIZE # номер столбца
y = pos[1] // CELL_SIZE # номер строки
n = y * SIZE + x # номер нажатой клетки
if not play(n):
print('Этот ход невозможен!')
def on_key_down(key):
"""
on_key_down(pos) особая функция, вызывается автоматически при нажатии
клавиши на клавиатуре. Через параметр key в функцию передаётся
код нажатой клавиши.
"""
if key == keys.SPACE : # выбор кнопки Старт
print('Необходимо перемешать числа')
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
from random import choice # выбрать случайный элемент списка
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), color=DIGITS_COLOR, fontsize=DIGITS_SIZE)
def play(n):
"""
Делает ход из клетки с номером n
в пустую клетку, если это возможно!
"""
m = playground.index(' ') # индекс пустой клетки
if n in [m+1, m-1] and m // SIZE == n // SIZE or n in [m-SIZE, m+SIZE]:
playground[n], playground[m] = playground[m], playground[n] # делаем ход
return True
return False
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
x = pos[0] // CELL_SIZE # номер столбца
y = pos[1] // CELL_SIZE # номер строки
n = y * SIZE + x # номер нажатой клетки
if not play(n):
print('Этот ход невозможен!')
def on_key_down(key):
"""
on_key_down(pos) особая функция, вызывается автоматически при нажатии
клавиши на клавиатуре. Через параметр key в функцию передаётся
код нажатой клавиши.
"""
if key == keys.SPACE : # выбор кнопки Старт
counter = 1000 # количество перемешиваний
while(counter != 0):
n = choice(range(SIZE**2)) # выбор случайного хода
if play(n): counter -= 1 # если ход сделан
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
from random import choice # выбрать случайный элемент списка
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
counter = 0 # счётчик ходов
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), color=DIGITS_COLOR, fontsize=DIGITS_SIZE)
def play(n):
"""
Делает ход из клетки с номером n
в пустую клетку, если это возможно!
"""
m = playground.index(' ') # индекс пустой клетки
if n in [m+1, m-1] and m // SIZE == n // SIZE or n in [m-SIZE, m+SIZE]:
playground[n], playground[m] = playground[m], playground[n] # делаем ход
return True
return False
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
global counter
x = pos[0] // CELL_SIZE # номер столбца
y = pos[1] // CELL_SIZE # номер строки
n = y * SIZE + x # номер нажатой клетки
if play(n): # ход сделан
counter += 1
print(counter)
def on_key_down(key):
"""
on_key_down(pos) особая функция, вызывается автоматически при нажатии
клавиши на клавиатуре. Через параметр key в функцию передаётся
код нажатой клавиши.
"""
global counter
if key == keys.SPACE : # выбор кнопки Старт
counter = 1000 # количество перемешиваний
while(counter != 0):
n = choice(range(SIZE**2)) # выбор случайного хода
if play(n): counter -= 1 # если ход сделан
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
from random import choice # выбрать случайный элемент списка
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
FONT_SIZE = DIGITS_SIZE // 2 # размер шрифта сообщений
FONT_COLOR = 'olive' # Цвет шрифта сообщений
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
counter = 0 # счётчик ходов
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), color=DIGITS_COLOR, fontsize=DIGITS_SIZE)
# печать сообщений
fnt_params = {'color': FONT_COLOR,'fontsize': FONT_SIZE}
screen.draw.text(str(counter)+"-й ход", (20, 20), **fnt_params) # счётчик ходов
def play(n):
"""
Делает ход из клетки с номером n
в пустую клетку, если это возможно!
"""
m = playground.index(' ') # индекс пустой клетки
if n in [m+1, m-1] and m // SIZE == n // SIZE or n in [m-SIZE, m+SIZE]:
playground[n], playground[m] = playground[m], playground[n] # делаем ход
return True
return False
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
global counter
x = pos[0] // CELL_SIZE # номер столбца
y = pos[1] // CELL_SIZE # номер строки
n = y * SIZE + x # номер нажатой клетки
if play(n): # ход сделан
counter += 1
def on_key_down(key):
"""
on_key_down(pos) особая функция, вызывается автоматически при нажатии
клавиши на клавиатуре. Через параметр key в функцию передаётся
код нажатой клавиши.
"""
global counter
if key == keys.SPACE : # выбор кнопки Старт
counter = 1000 # количество перемешиваний
while(counter != 0):
n = choice(range(SIZE**2)) # выбор случайного хода
if play(n): counter -= 1 # если ход сделан
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
from random import choice # выбрать случайный элемент списка
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
FONT_SIZE = DIGITS_SIZE // 2 # размер шрифта сообщений
FONT_COLOR = 'olive' # Цвет шрифта сообщений
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
counter = 0 # счётчик ходов
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
dig_params = {'color': DIGITS_COLOR,'fontsize': DIGITS_SIZE} # цвет и размер цифр
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), **dig_params)
# печать сообщений
fnt_params = {'color': FONT_COLOR,'fontsize': FONT_SIZE}
screen.draw.text(str(counter)+"-й ход", (20, 20), **fnt_params) # счётчик ходов
if playground == list(range(1, SIZE**2)) + [' ']: # Числа упорядочены
if counter > 0:
screen.draw.text("Победа!", (1.5*CELL_SIZE, 2*CELL_SIZE - DIGITS_SIZE / 3), **dig_params)
def play(n):
"""
Делает ход из клетки с номером n
в пустую клетку, если это возможно!
"""
m = playground.index(' ') # индекс пустой клетки
if n in [m+1, m-1] and m // SIZE == n // SIZE or n in [m-SIZE, m+SIZE]:
playground[n], playground[m] = playground[m], playground[n] # делаем ход
return True
return False
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
global counter
x = pos[0] // CELL_SIZE # номер столбца
y = pos[1] // CELL_SIZE # номер строки
n = y * SIZE + x # номер нажатой клетки
if play(n): # ход сделан
counter += 1
def on_key_down(key):
"""
on_key_down(pos) особая функция, вызывается автоматически при нажатии
клавиши на клавиатуре. Через параметр key в функцию передаётся
код нажатой клавиши.
"""
global counter
if key == keys.SPACE : # выбор кнопки Старт
counter = 1000 # количество перемешиваний
while(counter != 0):
n = choice(range(SIZE**2)) # выбор случайного хода
if play(n): counter -= 1 # если ход сделан
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
from random import choice # выбрать случайный элемент списка
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
FONT_SIZE = DIGITS_SIZE // 2 # размер шрифта сообщений
FONT_COLOR = 'olive' # Цвет шрифта сообщений
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
counter = 0 # счётчик ходов
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
dig_params = {'color': DIGITS_COLOR,'fontsize': DIGITS_SIZE} # цвет и размер цифр
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), **dig_params)
# печать сообщений
fnt_params = {'color': FONT_COLOR,'fontsize': FONT_SIZE}
screen.draw.text(str(counter)+"-й ход", (20, 20), **fnt_params) # счётчик ходов
if playground == list(range(1, SIZE**2)) + [' ']: # Числа упорядочены
if counter > 0:
screen.draw.text("Победа!", (1.5*CELL_SIZE, 2*CELL_SIZE - DIGITS_SIZE / 3), **dig_params)
if counter >= 0:
screen.draw.text("Клавиша", (WIDTH - CELL_SIZE + 20, HEIGHT - CELL_SIZE + 30), **fnt_params)
screen.draw.text("Пробел-", (WIDTH - CELL_SIZE + 20, HEIGHT - CELL_SIZE + 50), **fnt_params)
screen.draw.text("Старт", (WIDTH - CELL_SIZE + 20, HEIGHT - CELL_SIZE + 70), **fnt_params)
def play(n):
"""
Делает ход из клетки с номером n
в пустую клетку, если это возможно!
"""
m = playground.index(' ') # индекс пустой клетки
if n in [m+1, m-1] and m // SIZE == n // SIZE or n in [m-SIZE, m+SIZE]:
playground[n], playground[m] = playground[m], playground[n] # делаем ход
return True
return False
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
global counter
x = pos[0] // CELL_SIZE # номер столбца
y = pos[1] // CELL_SIZE # номер строки
n = y * SIZE + x # номер нажатой клетки
if play(n): # ход сделан
counter += 1
def on_key_down(key):
"""
on_key_down(pos) особая функция, вызывается автоматически при нажатии
клавиши на клавиатуре. Через параметр key в функцию передаётся
код нажатой клавиши.
"""
global counter
if key == keys.SPACE : # выбор кнопки Старт
counter = 1000 # количество перемешиваний
while(counter != 0):
n = choice(range(SIZE**2)) # выбор случайного хода
if play(n): counter -= 1 # если ход сделан
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
from random import choice # выбрать случайный элемент списка
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
FONT_SIZE = DIGITS_SIZE // 2 # размер шрифта сообщений
FONT_COLOR = 'olive' # Цвет шрифта сообщений
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
counter = 0 # счётчик ходов
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
dig_params = {'color': DIGITS_COLOR,'fontsize': DIGITS_SIZE} # цвет и размер цифр
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), **dig_params)
# печать сообщений
fnt_params = {'color': FONT_COLOR,'fontsize': FONT_SIZE}
screen.draw.text(str(counter)+"-й ход", (20, 20), **fnt_params) # счётчик ходов
if playground == list(range(1, SIZE**2)) + [' ']: # Числа упорядочены
if counter > 0:
screen.draw.text("Победа!", (1.5*CELL_SIZE, 2*CELL_SIZE - DIGITS_SIZE / 3), **dig_params)
if counter >= 0:
screen.draw.text("Клавиша", (WIDTH - CELL_SIZE + 20, HEIGHT - CELL_SIZE + 30), **fnt_params)
screen.draw.text("Пробел-", (WIDTH - CELL_SIZE + 20, HEIGHT - CELL_SIZE + 50), **fnt_params)
screen.draw.text("Старт", (WIDTH - CELL_SIZE + 20, HEIGHT - CELL_SIZE + 70), **fnt_params)
def play(n):
"""
Делает ход из клетки с номером n
в пустую клетку, если это возможно!
"""
m = playground.index(' ') # индекс пустой клетки
if n in [m+1, m-1] and m // SIZE == n // SIZE or n in [m-SIZE, m+SIZE]:
playground[n], playground[m] = playground[m], playground[n] # делаем ход
return True
return False
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
global counter
if playground == list(range(1, SIZE**2)) + [' ']:
return # если числа упорядочены
x = pos[0] // CELL_SIZE # номер столбца
y = pos[1] // CELL_SIZE # номер строки
n = y * SIZE + x # номер нажатой клетки
if play(n): # ход сделан
counter += 1
def on_key_down(key):
"""
on_key_down(pos) особая функция, вызывается автоматически при нажатии
клавиши на клавиатуре. Через параметр key в функцию передаётся
код нажатой клавиши.
"""
global counter
if key == keys.SPACE : # выбор кнопки Старт
counter = 1000 # количество перемешиваний
while(counter != 0):
n = choice(range(SIZE**2)) # выбор случайного хода
if play(n): counter -= 1 # если ход сделан
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
from random import choice # выбрать случайный элемент списка
import pgzrun
"""
Pygame Zero (pgzrun) - это обёртка над Pygame,
которая упрощает создание игр,
автоматизируя многие рутинные задачи.
"""
# Настройки игры, глобальные константы и переменные
WIDTH = HEIGHT = 500 # ширина и высота окна
SIZE = 4 # размер игрового поля (4x4)
CELL_SIZE = WIDTH // SIZE # размер клетки
TITLE = "Головоломка 15" # заголовок окна
BACKGROUND_COLOR = 'khaki' # цвет кнопки
GRID_COLOR = 'dimgray' # цвет сетки
BORDER_COLOR = 'gold' # цвет бордюра
DIGITS_COLOR = 'sienna' # цвет цифр
DIGITS_SIZE = HEIGHT//10 # размер цифр
FONT_SIZE = DIGITS_SIZE // 2 # размер шрифта сообщений
FONT_COLOR = 'olive' # Цвет шрифта сообщений
playground = list(range(1, SIZE**2)) + [' '] # виртуальное игровое поле
counter = 0 # счётчик ходов
def draw():
"""
draw() особая функция, вызывается автоматически каждый кадр,
обычно, 60 FPS. Доступны объекты: screen, actors и др.
Назначение: отрисовка всего, что должно быть на экране.
"""
screen.fill(BACKGROUND_COLOR) # очистка экрана
dig_params = {'color': DIGITS_COLOR,'fontsize': DIGITS_SIZE} # цвет и размер цифр
for n in range(0, WIDTH+1, CELL_SIZE): # линии бордюра
screen.draw.filled_rect(Rect(n-7, 0, 15, HEIGHT), BORDER_COLOR) # вертикальные
screen.draw.filled_rect(Rect(0, n-7, WIDTH, 15), BORDER_COLOR) # горизонтальные
for n in range(CELL_SIZE, WIDTH, CELL_SIZE): # линии сетки
screen.draw.line((n, 0), (n, HEIGHT), GRID_COLOR) # вертикальные линии
screen.draw.line((0, n), (WIDTH, n), GRID_COLOR) # горизонтальные линии
for n in range(SIZE**2): # печать цифр
x = n % SIZE * CELL_SIZE + CELL_SIZE // 2 - 10
if playground[n] != ' ' and playground[n] > 9 :
x -= DIGITS_SIZE // 5
y = n // SIZE * CELL_SIZE + + CELL_SIZE // 2 - 15
screen.draw.text(str(playground[n]), (x, y), **dig_params)
# печать сообщений
fnt_params = {'color': FONT_COLOR,'fontsize': FONT_SIZE}
screen.draw.text(str(counter)+"-й ход", (20, 20), **fnt_params) # счётчик ходов
if playground == list(range(1, SIZE**2)) + [' ']: # Числа упорядочены
if counter > 0:
screen.draw.filled_rect(Rect(CELL_SIZE+1, 2*CELL_SIZE-DIGITS_SIZE*1.5, CELL_SIZE*2-1, DIGITS_SIZE), 'white')
screen.draw.filled_rect(Rect(CELL_SIZE+1, 2*CELL_SIZE-DIGITS_SIZE//2, CELL_SIZE*2-1, DIGITS_SIZE), 'blue')
screen.draw.filled_rect(Rect(CELL_SIZE+1, 2*CELL_SIZE+DIGITS_SIZE*0.5, CELL_SIZE*2-1, DIGITS_SIZE), 'red')
screen.draw.text("Победа!", (1.5*CELL_SIZE, 2*CELL_SIZE - DIGITS_SIZE*1.3), **dig_params)
if counter >= 0:
screen.draw.text("Клавиша", (WIDTH - CELL_SIZE + 20, HEIGHT - CELL_SIZE + 30), **fnt_params)
screen.draw.text("пробел-", (WIDTH - CELL_SIZE + 20, HEIGHT - CELL_SIZE + 50), **fnt_params)
screen.draw.text("Старт", (WIDTH - CELL_SIZE + 20, HEIGHT - CELL_SIZE + 70), **fnt_params)
def play(n):
"""
Делает ход из клетки с номером n
в пустую клетку, если это возможно!
"""
m = playground.index(' ') # индекс пустой клетки
if n in [m+1, m-1] and m // SIZE == n // SIZE or n in [m-SIZE, m+SIZE]:
playground[n], playground[m] = playground[m], playground[n] # делаем ход
return True
return False
def on_mouse_down(pos):
"""
on_mouse_down(pos) особая функция, вызывается автоматически при клике мыши
Через параметр pos в функцию передаётся кортеж из пары координат (x, y)
"""
global counter
if playground == list(range(1, SIZE**2)) + [' ']:
return # если числа упорядочены
x = pos[0] // CELL_SIZE # номер столбца
y = pos[1] // CELL_SIZE # номер строки
n = y * SIZE + x # номер нажатой клетки
if play(n): # ход сделан
counter += 1
def on_key_down(key):
"""
on_key_down(pos) особая функция, вызывается автоматически при нажатии
клавиши на клавиатуре. Через параметр key в функцию передаётся
код нажатой клавиши.
"""
global counter
if key == keys.SPACE : # выбор кнопки Старт
counter = 1000 # количество перемешиваний
while(counter != 0):
n = choice(range(SIZE**2)) # выбор случайного хода
if play(n): counter -= 1 # если ход сделан
# Запуск игры
pgzrun.go() # Запускается главный игровой цикл
Лист.