Печать

рвы

ры

 

Рис.

Файлы с картинками поместите в папку 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()

Лист.

Рис.