рвы
ры

Рис.
Файлы с картинками поместите в папку images
import warnings
warnings.filterwarnings("ignore", category=RuntimeWarning, message=".*AVX2.*")
import pgzrun
from random import randint
SIZE = 22
SEG = 4
WIDTH = SIZE * 30
HEIGHT = SIZE * 20
BTM = HEIGHT - SIZE // 2
TOP = RGT = SIZE // 2
LFT = WIDTH - SIZE // 2
game_over = False
vx = 1
vy = 0
Rp = Actor("raspberry")
Rp.pos = (randint(11, WIDTH - 11), randint(11, HEIGHT - 11))
A = []
for n in range(SEG):
A.append(Actor("tetris"))
for n in range(len(A)):
A[n].pos = (WIDTH // 2, HEIGHT // 2)
XY = []
for i in range(len(A)):
for j in range(SIZE):
XY.append(A[i].x)
XY.append(A[i].y)
def bit_his_tail():
for n in range(2, len(A)):
if A[0].colliderect(A[n]):
return True
return False
def update(dt):
global game_over, vx, vy, SEG
if game_over:
return
if vx == 0:
if keyboard.left:
vx = -1
vy = 0
if keyboard.right:
vx = 1
vy = 0
if vy == 0:
if keyboard.up:
vy = -1
vx = 0
if keyboard.down:
vy = 1
vx = 0
A[0].x += vx
A[0].y += vy
for i in range(-1, -1*(len(XY)-2), -2):
XY[i] = XY[i-2]
XY[i-1] = XY[i-3]
XY[0] = A[0].x
XY[1] = A[0].y
for n in range(1, SEG):
A[n].x = XY[n*44]
A[n].y = XY[n*44+1]
# Столкновение
if not A[0].colliderect(A[2]) and (
A[0].y > BTM or A[0].y < TOP or
A[0].x > LFT or A[0].x < RGT or
bit_his_tail()):
game_over = True
# Поедание
if A[0].colliderect(Rp):
Rp.pos = (randint(11, WIDTH - 11), randint(11, HEIGHT - 11))
A.append(Actor("tetris"))
A[-1].pos = (A[-2].x, A[-2].y)
SEG += 1
for n in range(SIZE):
XY.append(A[-2].x)
XY.append(A[-2].y)
def draw():
screen.fill("#9ead86")
Rp.draw()
for n in range(len(A)-1, -1, -1):
A[n].draw()
if game_over:
screen.draw.text("GAME\nOVER", center=(WIDTH//2, HEIGHT//2),
fontsize=60)
pgzrun.go()
Лист.

Рис.