Как сделать змейку: Вопрос: Как сделать змейку из бумаги? — Хобби и рукоделие

Содержание

Змейка на автодроме в 2021 году

Чтобы практическая часть экзамена по вождению не превратилась в пытку, необходимо много практиковаться. Особенно начинающим водителям тяжело дается упражнение «змейка на автодроме». Поэтому курсы вождения автомобиля в Москве так много уделяют внимания подготовке. Именно о об этом упражнении мы и поговорим в статье.

Новое упражнение «Змейка» на автодроме в 2021 году

Данное упражнение было взято в учебную программу в сентябре 2016 года и у большей части курсантов возникли трудности при сдаче именно этого элемента. При выполнении упражнения необходимо осуществить по одному повороту в каждую сторону. Главная особенность заключается в том, что это необходимо сделать по предельно плавной траектории, при этом не задеть ни один конус.

Сама площадка представляет собой изогнутый коридор с одним плавным поворотом налево и затем плавным поворотом направо. По ширине коридор составляет 3.9 метра, а радиус его внешней дуги равен 7,3 метра. Если провести расчеты, то станет очевидно, что запас пространства для успешного осуществления маневра присутствует. Раньше «Змейка» выполнялась при других условиях. Перед будущим водителем представлялась площадка в виде прямоугольника, в котором было 4 идентичных секций. Длина одной секции составляла 1,5 длины автомобиля + запас в 0,5 метра. Ширина была равна самой длине автомобиля. Сам манёвр напоминал по траектории движения при перемещении ползущей змеи.

Ошибки при выполнении упражнения «Змейка»

При выполнении упражнения, инспектор внимательно следит за тем, как курсант его выполняет. В случае допущенной ошибки начисляются штрафные баллы:

  • За опрокинутые элементы ограждения и пересечение линий горизонтальной разметки начисляются 5 штрафных баллов. Самая большая вероятность сбить конусы — это задеть их задней частью транспорта.
  • За пересечение стоп-линий курсант так же штрафуется на 5 баллов, т.к. данная ошибка считается грубым нарушением.
  • Перед линией «СТОП» не был задействован стояночный тормоз. Данная оплошность карается 3 штрафными баллами.
  • Если заглох двигатель – начисляется 1 штрафной балл.

Для того чтобы не сбить фишки, необходимо обеспечить равномерное движение автомобиля. Важно не пользоваться педалью газа и двигаться исключительно на сцеплении.

Ошибки, при допущении которых не начисляют штрафные баллы, а сразу ставят за экзамен «Не сдал»:

  • Задержка выполнения испытания более чем на 30 секунд;
  • Выезд за границы участков испытательных упражнений, обозначенные белым или желтым цветом и разметочными конусами;
  • Осуществление движения задним ходом в тех случаях, когда этого не предусмотрено;
  • Отказ от выполнения испытательного упражнения.

Как правильно выполнить упражнение новая «Змейка» на автодроме

При выполнении новой «Змейки» чтобы не сбить конусы, расположенные в центральной части поворота, необходимо осуществлять движение по верной траектории: первая часть змейки необходимо проезжать по правой части коридора, а вторую часть по левой части.

Детальная инструкция для успешного выполнения упражнения:

  1. Необходимо остановиться у линии начала выполнения элемента. Автомобиль поставить предельно близко к фишке номер 1.
  2. Далее руль устанавливается таким образом, чтобы автомобиль ехал прямо и можно приступать к началу движения. Важно остановиться, когда правое зеркало заднего вида будет на одном уровне с конусом номер 1.
  3. Затем необходимо повернуть руль налево, но не до конца. Ровно до того момента, чтобы не задеть конус под номером 2.
  4. Потом начинается движение в направлении конуса номер 2 и перед ним осуществляется остановка.
  5. Далее необходимо повернуть руль налево до упора и выполнять движение, пока автомобиль не будет на одном уровне с конусом номер 3.
  6. Перед конусом номер 3 нужно остановиться и повернуть руль направо до упора.
  7. После начинается движение в сторону линии завершения упражнения. Важно не забыть остановиться перед линией.

Выполнив все действия так, как описано выше, упражнение будет считаться пройденным.

Советы, которые помогут проехать «Змейку» без ошибок

Наиболее «острой» проблемой для будущего водителя – это конусы, находящиеся во внутренней части поворотов. Не стоит начинать раньше времени крутить руль в нужную сторону поворота, это может повлечь за собой опрокидывание конусов задней частью автомобиля. Во избежание данного вида ошибки нужно стараться проезжать по предельно широкой траектории. Теория вождения помогает новичкам лучше подготовиться к практике с помощью тренажеров и имитации реального вождения — старайтесь больше тренироваться на них до реальной практики.

При движении по большему радиусу конусы сбиваются реже. Главное внимательно следить за движением автомобиля через лобовое стекло.

Если сравнивать старое упражнение «Змейка» и новое, то можно заметить, что современный вариант является более упрощенным. Нет необходимости в выполнении четырех аналогичных манёвров, что само по себе облегчает задачу и увеличивает шансы курсанта на успешную сдачу экзамена.

Как сделать «зрение» змейке на python для дальнейшего внедрение ИИ | АйТиФай

import pygame

from random import randrange

RES = 900
SIZE = 29
MARGIN = 1

x, y = randrange(SIZE+MARGIN, RES - SIZE, SIZE+MARGIN), randrange(SIZE+MARGIN, RES - SIZE, SIZE+MARGIN)
apple = randrange(SIZE+MARGIN, RES - SIZE, SIZE+MARGIN), randrange(SIZE+MARGIN, RES - SIZE, SIZE+MARGIN)
length = 1
snake = [(x, y)]
dx, dy = 0, 0
fps = 60
dirs = {'W': True, 'S': True, 'A': True, 'D': True, }
score = 0
speed_count, snake_speed = 0, 10
COUNT_BLOCKS = 30
FRAME_COLOR = (200, 200, 200)
WHITE = (250, 250, 250)
BLUE = (210, 250, 250)


pygame.init()
surface = pygame.display.set_mode([RES, RES])
clock = pygame.time.Clock()
font_score = pygame.font.SysFont('Arial', 24, bold=True)
font_end = pygame.font.SysFont('Arial', 66, bold=True)




while True:
    def close_game():
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

    surface.fill(FRAME_COLOR)

    for row in range(COUNT_BLOCKS):
        for column in range(COUNT_BLOCKS):
            if (column+row)%2==0:
                color = BLUE
            else:
                color = WHITE
            pygame.draw.rect(surface,color,[(SIZE+MARGIN)*column,
                                            (SIZE+MARGIN)*row, SIZE ,SIZE])
    # drawing snake, apple
    [pygame.draw.rect(surface, pygame.Color('green'), (i, j, SIZE, SIZE)) for i, j in snake]
    pygame.draw.rect(surface, pygame.Color('red'), (*apple, SIZE, SIZE))
    # show score
    render_score = font_score.render(f'SCORE: {score}', 1, pygame.Color('orange'))
    surface.blit(render_score, (5, 5))
    # snake movement
    speed_count += 1
    if not speed_count % snake_speed:
        x += dx * (SIZE+MARGIN)
        y += dy * (SIZE+MARGIN)
        snake.append((x, y))
        snake = snake[-length:]
    # eating food
    if snake[-1] == apple:
        apple = randrange(0, RES - SIZE, SIZE+MARGIN), randrange(0, RES - SIZE, SIZE+MARGIN)
        length += 1
        score += 1
        #snake_speed -= 1
        #cancel speed increase
        snake_speed = max(snake_speed, 4)
    # game over
    if x < 0 or x > RES - (SIZE+MARGIN) or y < 0 or y > RES - (SIZE+MARGIN) or len(snake) != len(set(snake)):
        while True:
            render_end = font_end.render('GAME OVER', 1, pygame.Color('orange'))
            surface.blit(render_end, (RES // 2 - 200, RES // 3))
            pygame.display.flip()
            close_game()

    pygame.display.flip()
    clock.tick(fps)
    close_game()
    # controls
    key = pygame.key.get_pressed()
    if key[pygame.K_w]:
        if dirs['W']:
            dx, dy = 0, -1
            dirs = {'W': True, 'S': False, 'A': True, 'D': True, }
    elif key[pygame.K_s]:
        if dirs['S']:
            dx, dy = 0, 1
            dirs = {'W': False, 'S': True, 'A': True, 'D': True, }
    elif key[pygame.K_a]:
        if dirs['A']:
            dx, dy = -1, 0
            dirs = {'W': True, 'S': True, 'A': True, 'D': False, }
    elif key[pygame.K_d]:
        if dirs['D']:
            dx, dy = 1, 0
            dirs = {'W': True, 'S': True, 'A': False, 'D': True, }

Как сделать змейку из ниток и бумаги: мастер-класс с фото

Наверняка, у вас в доме найдется бросовый картон, нитки, ножницы и другие материалы для творчества. Они понадобятся вам для моделирования замечательных детских поделок. Стоит только включить фантазию и не бояться экспериментировать, ведь испортить здесь ничего невозможно, это бросовый материал.

В этом уроке показано, как сделать детскую поделку в виде змейки. Совсем простую, легкую и очень яркую. Цвет змейки будет зависеть от ниток, которые есть у вас в наличии. Для примера использовались вязальные нити, но их можно заменить любыми шнурками, веревочками или джутовой нитью, затем по желанию ее прокрасить гуашью или акриловой краской.

Для выполнения змейки подготовьте:

Как сделать змейку из бросовых материалов поэтапно

  1. Подготовьте для работы необходимые материалы. Из плотного картона будет вырезана основа. Если картон вам кажется тонким, то вы можете вырезать 2-3 одинаковые заготовки и склеить их, чтобы получить более плотную деталь.
    Если у вас готовых глазок для детского творчества нет, то вы всегда можете нарисовать их или приклеить бумажные. А нитки подойдут абсолютно любые, даже бросовые или другие материалы, чтобы сделать свою змейку яркой и полосатой.
  2. На подготовленном листочке картона начертите змейку: продолговатую, с округлой головой и тонким заостренным хвостом.
  3. По окантовке вырежьте и при необходимости склейте между собой 3 одинаковые детали, чтобы получить более плотную поделку.
  4. Наклейте на голову розовый фоамиран и обрежьте по контуру. Так вы украсите голову. Подготовьте кукольные глазки.
  5. Вырежьте маленький расщепленный на конце хвостик из красного фоамирана или картона и приклейте его впереди, а сверху на голову наклейте одинаковые глазки.
  6. Остальная часть змейки пока будет не покрыта, и серый картон нужно сверху обрамить подготовленными нитями. Приклейте с помощью клея или скотча конец нити и начинайте плотным слоем наматывать.
  7. Покройте таким образом всю змейку, кроме головы, от шеи до хвоста. При этом вы можете чередовать по своему усмотрению цвета так, чтобы получить полосатую поделку.
  8. Яркая и необычная нарядная змейка получается – очень легкая детская поделка, которая позволяет развить мелкую моторику, воображение и усидчивость.

Как слепить пет шопа змейку из пластилина

Давайте вместе с вами разберемся, как слепить пет шопа змейку из пластилина. На самом деле у настоящих змей очень маленькая голова, все дети примерно знают, как они выглядят, хоть, возможно, и никогда не видели их живьем. Однако в случае пет шопа такие пропорции не подойдут. У всех зверушек из маленького зоомагазина, предлагаемых известным производителем, очень большая голова, с огромными глазами. Итак, создавая пет шопа змею, мы должны сделать центральным элементом именно голову, а туловище будет второстепенным. Также следует изначально решить вопрос о том, какой цвет пластилина использовать для лепки поделки. Выбирайте ваш любимый цвет или просто любой яркий из заветной коробочки с мягкими брусочками.

Другие уроки на тему littlest pet shop:

Для работы можно подготовить зеленый и розовый цвета, чтобы получить одну из версий коллекционных littlest pet shop. Например, все части тела змеи могут быть ярко-зелеными, а дополнительные островки вы можете сделать розовыми. Также нужно будет показывать глазки и длинный красный змеиный язычок.

Скатайте зеленый шарик. Рассчитывайте пластилин, исходя из того, что эта деталь будет самой крупной, дополнительно вам придется сделать лишь туловище с хвостом, но эта цельная деталь будет малой.

Налепите на лобную часть розовую лепешку. Продавите глаза.

Постепенно заполните ямки для глаз белым, розовым (фиолетовым) и черным пластилином.

Сделайте тонкую окантовку ресничек и белые блики.

Разрежьте рот и вставьте красный язычок.

Сделайте две мягкие заготовки для туловища – зеленого и розового цветов.

Вытяните зеленый пластилин в морковку – тонкую, длинную, заостренную с одного конца. Налепите розовый пластилин на зеленую морковку. Сделайте розовую часть брюшком змейки, надрезав продольные полосы стекой.

Изогните хвост, пусть он буден не очень длинным. Вверх вставьте кусочек спички.

Соедините туловище с головой.

Очаровательная и милая пет шоп змейка из пластилина готова. Ползать такая игрушка не сможет, но выглядит очень правдоподобно.

Проект змейка на Unreal Engine 4 C++

Спойлер к проекту змейка

Что должно получиться с проектом змейки. Реализованной на Unreal Engine 4

1) Будет реализован HUD интерфейс общения с пользователем

2) Змейка будет двигаться по полю управляемая с клавиатуры

3) Змейка будет есть яблоки

4) Размер змеи будет зависть от количество съеденных яблок 

5) Добавим ускорения движению змейке.

6) Добавим блоки, убивающие змейку если она на них, наедет.

Что ж великий план начнем … )


01) Создаем заготовку для проекта змейка в редакторе Unreal Engine 4


1) Создание С++ проекта с встроенными ресурсами

2) Сохранение в проекте карты игры 

3) Добавление в проект класса Pawn который станет нашими глазами в игре

4) Добавление в игру трех классов Actor которые станут нашими игровыми блоками

а) Змейкой

б) Яблоком

в) Стеной

5) Добавляем в проект HUD widget который будет отображать нам меню, набранные очки, статус паузы.

02) Описание класса Pawn для игры Snake на Unreal Engine 4

 1) Создаем и настраиваем компоненты пешки такие как:

  а) Основа модели на которой будет строиться пешка UBoxComponent

  б) Пружинный штатив на который будет опираться камера в игре USpringArmComponent

  в) Камера наши глаза в игре UCameraComponent крепим камеру на штатив USpringArmComponent::SocketName

 2) Настраиваем пешке свойства 

  а) Позиционируем штатив по отношению к основе модели SetRelativeLocation

  б) Поворачиваем штатив по отношению к основе модели SetRelativeRotation

  в) Отключаем столкновение штатива с другими игровыми объектами oCollisionTest

 3) Настраиваем игровой режим создав на основе C++ класса базовый класс Blueprint

03) Подготовка материалов Unreal Engine 4 для дальнейшего использования в игре

a) Выбор из набора материалов предоставленных нам разработчиками 

b) Модификация цвета выбранных материалов 

c) Создание материала для опасной зоны

04) Создание актера в Unreal Engine 4, змейки для дальнейшей игры

a) Использование стандартной сферы из компонентов Unreal Engine 4 для создания тела

b) Загрузка материалов из Content Browser (обозревателя ресурсов)  

c) Генерация уникальных имен для частей змейки

d) Настройка длинны змейки через параметр

05) Задаем видимость частей змейки и описываем функцию движения ее по уровню.

а) Описываем как спрятать ненужные блоки змейки SetVisibility

б) Создаем параметр на основе которого будем определять какой длинны будет наша змейка

в) Запрещаем хвосту сталкиваться с объектами

г) Создаем переменную задающую направление движения змейке

д) Описываем функции движения змейки

г) Опишем задание скорости движения змейки

06) Размещаем змейку на уровне командой из пешки, и описываем управление змейкой через пешку.


07) Создаем PicUp яблоко которое может собирать змейка

.
08) Добавляем генератор случайного поля PikUp яблок для нашей змейки.


09) Создаем блок помеху убивающую змейку при столкновении

10) Размещаем widget интерфейс на экране игры

a. Создаем переменную для хранения режима игры в классе пешки

b. Создаем в коде С++ видимую функцию из Blueprint схемы

c. Настраиваем видимость разных элементов меню

d. Задаем видимость главного меню при стартовом режиме игры

e. Задаем видимость мыши при отображении меню

f. Добавляем функции страта игры из кода С++ видимость в Blueprint схеме

g. Добавляем кнопке старта игры вызов функции из кода С+

11) Добавляем на экран отображение набранных очков персонажем в игре.

a. Задаем переменную для подсчета очков в C++ коде

b. Заставляем змейку считать данные очки после столкновения с яблоками

c. Описываем функцию передачи очков в Blueprint граф

d. Задаем видимость для очков в момент старта игры

e. Задаем вывод очков, полученных C++ функцией от змейки на экран игры.

12) Добавляем игре возможность переходить в режим паузы и обратно.

a. Создаем переменную, которая будет контролировать состояние паузы

b. Описываем функции, которая будет возвращать состояние паузы из С++ кода в Blueprint

c. Добавляем событие паузы на кнопку пробел.

d. Описываем логику включения и отключения паузы в игре.

13) Добавим время жизни яблока на сцене игры

a. Объявим переменные для расчета времени прошедшее после создания яблока

b. Добавим расчет прошедшего времени в функцию Tick

c. Уничтожим яблоко если оно прожило свое время.

14) Добавляем статус завершения игры

a. Передача урона от стены к змейке

b. Передача сообщения от змейки в пешку что она получила урон

c. Уничтожение змейки и смена режима игры на выход в главное меню

d. Добавим к кнопке выход логику завершения игры

🐍 Как создать игру “Змейка” на языке Python – IT is good

Если вы любите играть в змейку, я уверен, что эта статья будет вам интересна.

В этой статье я расскажу вам, как придумать простую игру-змейку, которую будет легко разработать даже новичку в Python.

Существует несколько способов создания этой игры, один из которых включает использование библиотеки Python PyGame – библиотеки Python, которую мы используем для создания игр.

Другой способ – это использование библиотеки turtle.

Этот модуль поставляется с предустановленным Python и предоставляет пользователям виртуальный холст для создания фигур и изображений.

Поэтому в этой статье мы будем использовать библиотеку turtle для реализации нашей простой игры в змейку, которая будет удобна для начинающих разработчиков Python.

В дополнение к этому модулю мы также будем использовать два других модуля, а именно;

  • Модуль Time – Этот метод позволит нам отслеживать количество секунд, прошедших с предыдущего момента времени.
  • Модуль Random – он генерирует числа случайным образом в Python.
  • Другие основные инструменты, которые вам понадобятся, включают текстовый редактор по вашему выбору. В этой статье я буду использовать VSCode. Конечно, вам нужно будет установить Python 3 на вашу машину, если у вас его еще нет

Это должно быть весело!

Как работает игра “Змейка

Конечная цель этой игры заключается в том, чтобы игрок набрал наибольшее количество очков, управляя змеей, чтобы собрать еду, которая отображается на экране.

Игрок управляет змеей с помощью четырех клавиш направления, которые соотносимы с направлением движения змеи.

Если змея врежется в блок или в саму себя, игрок проиграет игру.

Для реализации этой игры мы выполним следующие шаги.

  • Импортируем в нашу программу предустановленные модули (turtle, time, и random).
  • Создание экрана игры с помощью модуля turtle.
  • Установка клавиш для направления движения змейки по экрану.
  • Реализация игрового процесса.

Создайте файл snakegame.py, в который мы добавим код реализации.

Импортирование модулей

В этой части кода мы импортируем модули turtle, time и random, которые по умолчанию предустановлены в Python.

Кроме того, мы установим значения по умолчанию для начального счета игрока, максимального счета, которого игрок достигнет, и времени задержки игрока при каждом ходе.

Для вычисления времени задержки здесь используется модуль time.

Добавьте следующий фрагмент кода в ваш файл snakegame.py.

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

Создание экрана игры

Модуль turtle, который мы импортируем здесь, позволит нам создать виртуальный холст, который будет экраном окна игры.

Отсюда мы можем создать тело змеи и еду, которую она будет собирать.

На нашем экране также будет отображаться отслеживаемый счет игрока.

Добавьте этот код в файл Python.

turtle.mainloop()

 

Затем мы создадим еду, которую собирает змея.

Мы хотим отображать счет игрока каждый раз, когда змея собирает еду, а также наивысший счет, которого игрок достигает во время игры.

Поэтому мы используем метод pen.write() для реализации этого.

Метод hideturtle() скрывает значок экрана на участке заголовка, на котором написан этот текст.

Важно добавить turtle.mainloop() в конце вашего кода, который будет отображать экран дольше, чтобы пользователь мог что-то сделать на экране.

Настройка клавиш направления для змеи

Здесь мы установим определенные клавиши, которые будут определять направление движения змейки по экрану.

Мы будем использовать “L” для левой стороны, “R” для правой, “U” для вверх, “D” для вниз.

Мы реализуем эти направления с помощью функции направления черепахи, которую мы будем вызывать у змеи.

Добавьте следующий фрагмент кода в свой код.

def moveleft():
    if snake.direction != "right":
        snake.direction = "left"

def moveright():
    if snake.direction != "left":
        snake.direction = "right"

def moveup():
    if snake.direction != "down":
        snake.direction = "up"

def movedown():
    if snake.direction != "up":
        snake.direction = "down"

def move():
    if snake.direction == "up":
        coord_y = snake.ycor()
        snake.sety(coord_y+20)

    if snake.direction == "down":
        coord_y = snake.ycor()
        snake.sety(coord_y-20)

    if snake.direction == "right":
        coord_x = snake.xcor()
        snake.setx(coord_x+20)

    if snake.direction == "left":
        coord_x = snake.xcor()
        snake.setx(coord_x-20)

wind.listen()
wind.onkeypress(moveleft, 'L')
wind.onkeypress(moveright, 'R')
wind.onkeypress(moveup, 'U')
wind.onkeypress(movedown, 'D')

Функция move() выше задает движение змейки в определенном положении в пределах точного значения координат.

Функция listen() является слушателем событий, вызывающим методы, которые перемещают змею в определенном направлении, когда игрок нажимает клавишу.

Реализация геймплея игры в змейку

После того, как мы заложили основные принципы игры в змейку, нам предстоит сделать игру в реальном времени.

Для этого необходимо сделать следующее:

  • Увеличение длины змеи каждый раз, когда она собирает еду, предпочтительно используя другой цвет.
  • Увеличение счета игрока каждый раз, когда змея собирает еду, и отслеживание самого высокого результата.
  • Игрок может контролировать змею, чтобы она не столкнулась со стеной или собственным телом.
  • Игра перезапускается при столкновении змеи.
  • При перезапуске игры счет игрока обнуляется, а на экране сохраняется наивысший счет игрока.
  • Добавьте остальную часть этого кода в свой файл python.
segments = []


while True:
    wind.update()
    if snake.xcor() > 290 or snake.xcor() < -290 or snake.ycor() > 290 or snake.ycor() < -290:
        time.sleep(1)
        snake.goto(0, 0)
        snake.direction = "Stop"
        snake.shape("square")
        snake.color("green")

        for segment in segments:
            segment.goto(1000, 1000)
            segments.clear()
            player_score = 0
            delay_time = 0.1
            pen.clear()
            pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

        if snake.distance(snake_food) < 20:
            coord_x = random.randint(-270, 270)
            coord_y = random.randint(-270, 270)
            snake_food.goto(coord_x, coord_y)

            
            added_segment = turtle.Turtle()
            added_segment.speed(0)
            added_segment.shape("square")
            added_segment.color("white")
            added_segment.penup()
            segments.append(added_segment)
            delay_time -= 0.001
            player_score += 5

            if player_score > highest_score:
                highest_score = player_score
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

    
    for i in range(len(segments)-1, 0, -1):
        coord_x = segments[i-1].xcor()
        coord_y = segments[i-1].ycor()
        segments[i].goto(coord_x, coord_y)

    if len(segments) > 0:
        coord_x = snake.xcor()
        coord_y = snake.ycor()
        segments[0].goto(coord_x, coord_y)
    move()

    for segment in segments:
        if segment.distance(snake) < 20:
            time.sleep(1)
            snake.goto(0, 0)
            snake.direction = "stop"
            snake.color('white')
            snake.shape('square')

            for segment in segments:
                segment.goto(1000, 1000)
                segment.clear()
                player_score = 0
                delay_time = 0.1
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

     time.sleep(delay_time)

turtle.mainloop()

В приведенном выше фрагменте кода мы задаем случайную позицию для пищи змеи в пределах экрана.

Каждый раз, когда змея собирает эту пищу, сегмент ее тела увеличивается, окрашиваясь в другой цвет; в данном случае – в белый, чтобы выделить ее рост.

Заключение 🐍

Использование библиотеки “turtle” – это один из забавных и простых способов создания игры в змейку, как мы видели в этой статье.

В качестве альтернативы, вы можете реализовать то же самое, используя библиотеку PyGame

см. также:

 

Поделитесь статьей:

Как сделать змейку-магнит из полимерной глины 🚩 магнит из полимерной глины 🚩 Рукоделие 🚩 KakProsto.ru: как просто сделать всё

Змейка из полимерной глины может стать хорошим сувениром, если из нее сделать магнит на холодильник. Сделать ее очень просто, справится даже тот, кто только начинает работать с полимерной глиной.

Статьи по теме:

Вам понадобится

  • Полимерная глины четырех цветов: зеленая, белая, красная, черная, темно-зеленые акриловые краски, канцелярский нож, гель для запекания, лак для пластики, игла, кисточка для рисования, резиновые перчатки, магнит, клей.

Инструкция

Возьмите кусок зеленой глины, раскатайте из нее колбаску. Одна сторона колбаски должна быть тоньше другой.

Наденьте резиновые перчатки, продолжайте раскатывать колбаску уже в них. Сделайте тонкую сторону еще тоньше. Сформируйте из толстой стороны голову змеи.

Скрутите змейку в спираль, начните с хвоста. Спираль должна быть скручена в одной плоскости, чтобы не было видно приклеенного сзади магнита.

Нацарапайте иголкой чешуйчатый рисунок на теле змеи.

Смажьте голову гелем для запекания. Сделайте из белой и черной полимерной глины глаза, насадите их на гель сверху.

Сделайте в голове прорезь при помощи ножа — получится рот, немного приоткройте его.

Промажьте полость рта гелем, вставьте язык. Язык сделайте из глины красного цвета.

Запеките змею в духовке в течение 15 минут. Нужная температура указана на упаковке вашей глины.

Нанесите акриловой краской на тело змейки несколько полосок.

Подождите, пока просохнет краска. Покройте готовое изделие лаком. Приклейте с обратной стороны магнит в центре спирали.

Змейка из полимерной глины готова. Можете повесить магнит на холодильник или кому-нибудь подарить его!


Обратите внимание

Работать с полимерной глиной нужно в резиновых перчатках, чтобы не испортить изделие отпечатками пальцев.

Учебное пособие по Бенди Снейку — Эта жизнь пилигрима

Вот краткое руководство по шитью для всех детей, которые любят змей.

Подсказка: из них получаются отличные набивки для чулок!

Эти маленькие ребята карманного размера и набиты ершиками для труб, чтобы они могли гнуться. Скрутите их. Сверните их. Согните их узлом.

Они будут упакованы в чулки моих мальчиков на следующей неделе (не могу поверить, что через неделю я буду паковать чулки!!!) вместе с другими различными шоколадками, сливами и другими маленькими сокровищами.

Я уверен, что они станут хитом не только потому, что мои мальчики любят всех без исключения животных, но и потому, что они будут маленькими маленькими змеями, которые будут сочетаться с этими большими змеями-путешественниками , которые по-прежнему будут проводить много времени за игрой. Теперь я просто вижу безмерную привлекательность дошкольного воображения…

Продолжайте читать для быстрого и простого руководства, чтобы использовать некоторые из ваших обрезков ткани и посмотреть, как сделать этих забавных парней.

(Посмотрите здесь, если вы новичок в шитье).

Необходимые материалы
  • Обрезки ткани
  • ершики для труб
  • рис
  • нить для вышивания
  • красный войлок
Метод

1.Отрежьте кусок ткани размером 15х4 см.

2. Сложите ткань вдоль пополам лицевыми сторонами внутрь и проутюжьте. На изнаночной стороне ткани нарисуйте контур змеи. Тело змеи должно быть шириной 3/4 дюйма, с ромбовидной головой и заостренным хвостом. Вырежьте из красного фетра язык длиной один дюйм и с раздвоенным концом.

3. Заправьте язык между тканью так, чтобы один его конец находился на кончике головы, а раздвоенный конец был направлен вниз к телу змеи. Закрепить на месте.

4. Приколите тело змеи, чтобы детали оставались на месте.Прошейте по периметру змейки, начиная с середины вокруг одной стороны и оставляя двухдюймовое отверстие для выворачивания.

5. Обрежьте припуск на шов до 3/8″ по всему периметру змейки.

6. Выверните змейку на лицевую сторону с помощью инструмента для поворота, пинцета или того и другого.

7. Положите примерно столовую ложку риса в отверстие и пальцами протолкните его вниз к головке. Вы хотите, чтобы он был полным, но не слишком тесным.

8. Возьмите 5 ершиков для труб и сдвиньте их в шахматном порядке, чтобы они растянулись по всей длине змеи.Слегка скрутите их вместе и вставьте в змейку через отверстие. Протолкните их часть пути в голову, а затем вниз к хвосту.

9. Зашейте отверстие потайным стежком.

10. Аккуратно прошейте нижнюю часть головы змеи, чтобы запечатать рис.

11. Используйте нить для вышивания, чтобы вышить глаза.

Готово!

 

 

Как сделать средство для изготовления змей из пузырей

Сейчас мы максимально используем хорошую погоду и пытаемся сделать вещи, которые можно использовать в саду, и этот средство для изготовления змей из пузырей так весело и легко сделать из вещей. которые уже есть у вас дома, все, что вам нужно сделать, это добавить капельку воображения, и у вас будут пузырьковые змеи в кратчайшие сроки.

Как сделать змей из пузырей в домашних условиях

Этот пост содержит партнерские ссылки. Если вы совершите покупку после перехода по одной из этих ссылок, я сделаю небольшую комиссию (надеюсь, достаточно, чтобы пить чай весь год) — без каких-либо дополнительных затрат для вас! Это позволяет мне продолжать создавать и делиться бесплатными учебными пособиями и контентом для вас. Спасибо!

  • Бутылка
  • Ножницы *
  • Резинка
  • Фланель, лицевая ткань или старый носок
  • Пузырьковая смесь и вода
  • Пищевой краситель (по желанию)

Найдите чистую пустую пластиковую бутылку, диаметр бутылки будет определять ширину ваших пузырьковых змей.

С помощью ножниц или канцелярского ножа (под наблюдением взрослых) помогите ребенку отрезать дно от пластиковой бутылки.

Вместе с детьми накройте открытый конец бутылочки куском ткани, похожей на мочалку или хлопковый носок. Мы использовали фланель и нарезали ее в форме круга (чтобы концы не погрузились в смесь для пузырей). Серьезно, подойдет любая старая фланель, эта была хорошо использованной, нет причин покупать новую.

Закрепите ткань резинкой, чтобы ткань оставалась на месте.Нет резинки, тогда не волнуйтесь, просто обмотайте ее лентой.

Приготовьте собственную смесь для мыльных пузырей (ее нельзя пить) для ваших пузырьковых змей

Домашняя смесь для пузырей — это пустяк, но вам действительно нужно помнить о волшебном ингредиенте!

  • Средство для мытья посуды
  • Вода
  • Глицерин (можно найти в отделе выпечки в супермаркете)

Смешайте 3 столовые ложки средства для мытья посуды с 250 мл воды (дистиллированная вода дает наилучшие результаты) и добавьте 1 столовую ложку глицерина.Эту смесь лучше всего оставить на ночь, чтобы она отстоялась перед использованием.

Поместите смесь для пузырей в неглубокую миску или тарелку.

Как сделать змей из радужных пузырей

Сделать змею из радужных пузырей так же просто, как добавить краску на конец, обтянутый тканью. Мы добавили синие и красные цвета пузырьковым змеям с помощью пищевого красителя. Дети капнули пищевой краситель на край, обтянутый тканью. Было немного грязно, но детям понравилось. Вы также можете использовать жидкую акварель.

Окуните ткань в раствор для пузырей и подуйте по бутылке. Медленное выдувание производит самые длинные змеи. У нас был сильный ветер, и он продолжал сдувать наших змей!

Веселись и наслаждайся!

 

Обязательно закрепите этот пост, чтобы всегда иметь под рукой рецепт домашних пузырей. И пока у вас есть смесь для пузырей, почему бы не попробовать свои силы и массивные пузыри!


Изготовление бумажной змеи из пустых рулонов туалетной бумаги

Сделаем поделку змея из бумаги!

Ищете поделку дошкольника из пустых рулонов туалетной бумаги? Попробуйте эту поделку из бумажной змеи, вдохновленную живой змеей, которую видели во время шоу в Центре науки Свободы в Нью-Джерси.

В прошлые выходные мы побывали в научном центре Либерти и увидели живую змею на шоу животных.

Мой сын и я были просто очарованы внешним видом, скользящими движениями и узорами на змее и вдохновились сделать эту бумажную змею после возвращения домой.

Эта статья содержит партнерские ссылки.

Поделка в виде змеи из туалетной бумаги

Это то, что мы использовали, чтобы сделать змею из рулона туалетной бумаги!
Материалы для изготовления бумажной змеи
Разве это не круто? Я никогда не видел змею так близко.Также обратите внимание на узоры.
Как сделать змею из туалетной бумаги

Шаг 1

Покрасьте пустые втулки от туалетной бумаги кистью в любой цвет по вашему выбору.

Мы выбрали коричневый цвет, вдохновленный настоящей змеей, которую мы видели во время нашей поездки на выходных в научный центр (см. рисунок выше).

Мой малыш очень любил раскрашивать булочки.

Шаг 2

Дайте окрашенным валикам высохнуть.

Шаг 3

Вырежьте из губки квадратную форму, чтобы сделать узор.

Смешайте ложку черной краски с коричневой краской, чтобы получить темно-коричневую краску. Окуните губку в краску, чтобы сделать квадратный узор на раскрашенных бумажных рулонах.

Шаг 4

Затем повторите предыдущий шаг, используя желтую краску на обеих сторонах коричневых квадратов.

Дайте этому слою краски высохнуть.

Шаг 5

Пока краска сохнет, делаем язык и глаза змее .

Чтобы сделать змеиный язык , поверните ершик, как показано ниже.

Чтобы сделать глаза змеи , вырежьте центральную часть глаз из черной ленты и приклейте ее посередине желтой пуговицы, чтобы получились глаза змеи.

Если у вас нет черной ленты, вы можете использовать черный картон или просто черный маркер, чтобы нарисовать глаза.

Шаг 6

Возьмите один из раскрашенных рулонов бумаги, приклейте горячим клеем змеиный язык внутрь рулона и закройте рулон бумаги.

Вырежьте два маленьких треугольника с каждой стороны, чтобы получилась голова змеи, как показано на рисунке.

Затем приклейте змее глаза.

Шаг 7

Теперь возьмите ленту, вставьте ее на другой конец первого бумажного рулона и приклейте:

  1. Если вы используете рулоны бумажных полотенец, как я, вы можете обрезать их до размера рулонов туалетной бумаги, чтобы сделать змею пышной.
  2. Проденьте каждый рулон и приклейте ленту к нижней части с помощью горячего клея.
  3. Когда вы дойдете до последнего рулона, заклейте конец клеем и придайте ему форму хвоста с помощью ножниц.

Готовая поделка-змейка из туалетной бумаги

Поделка змеи из бумаги готова. Теперь вы можете взять змею и тренировать ее, как хотите, танцевать или скользить с ней. Нам очень нравится, как получилось это змеиное ремесло.

Змеиная поделка для дошкольного и детского сада

Это отличный проект для дошкольников или детского сада, который можно выполнить с группой детей: нанизать из каждого нарисованного детьми рулона большую змею и показать ее.

Мой сын любил носить змеиную поделку и притворяться, что держит в руках настоящую змею, и корчить испуганные лица.

Активное время 20 минут

Общее время 20 минут

Сложность легкий

Ориентировочная стоимость $0

Материалы

  • рулоны туалетной бумаги, рулоны бумажных полотенец или рулоны для рукоделия
  • моющаяся краска на ваш выбор — мы использовали коричневый, черный и желтый
  • губка
  • кисть
  • кнопки
  • черная лента
  • красный ершик для труб
  • лента

Инструменты

  • Пистолет для горячего клея
  • Клей для горячего клея
  • Ножницы или ножницы для дошкольного обучения

Инструкции

  1. Покрасьте пустые рулоны туалетной бумаги и бумажных полотенец в одинаковый цвет — мы использовали коричневый цвет и дайте им высохнуть.
  2. Вырежьте из губки ромбовидный узор, чтобы использовать его в качестве штампа для змеиной кожи.
  3. Окуните губку в темную краску и сделайте узор из ромбов по краю окрашенных валиков. Дайте высохнуть.
  4. Окуните губку в более светлый цвет и повторите описанный выше шаг.
  5. Сделайте змеиный язык из красного ершика для труб, скрутив и сделав раздвоенный конец.
  6. Сделайте змеиные глаза из пуговиц и черной ленты или черной бумаги.
  7. Поместите язычок на конец одной окрашенной трубки, а затем приклейте и сожмите до конца.Отрежьте обе стороны, чтобы голова змеи стала более треугольной.
  8. Клей для змеиных глаз.
  9. Приклейте веревку или ленту к головному концу, а затем приклейте другие окрашенные детали. У нас было 12 штук для нашей змейки. Закрепите конец в хвостовой части большим количеством клея.

Дополнительное обучение змее для детей

Хотите укрепить свое «змеиное» обучение?

Вот одна из наших любимых книг о жутких ползающих рептилиях: Рептилия (Книги очевидцев)

Книга очевидца Рептилия содержит полноцветные фотографии и подробно рассказывает о среде обитания, поведении и естественной истории рептилий.Она предназначена для чтения в возрасте 9-12 лет, но детям младшего возраста понравится изучать предмет и рассматривать картинки.

Другие книги о змеях для детей

Другие поделки в виде змей из блога детских мероприятий

Как получилась ваша поделка змея из бумаги?

Как создать игру «Змейка» в SwiftUI | by Sarah

Мы собираемся определить направление смахивания и заставить змею постоянно двигаться в этом направлении, пока направление не изменится. Давайте сначала создадим перечисление для направлений:

У нас будет таймер для управления скоростью змеи.Чтобы сделать змею медленнее или быстрее, мы можем изменить интервалы таймера. Размер змейки используется вместо сетки. Это поможет нам контролировать положение змеи и ее пищу. В нашей игре нам потребуются следующие переменные:

Внутри нашего тела добавим ZStack . Внутри этого вы можете добавить цвет для фона. Нам понадобится еще ZStack для нашего прямоугольника со змеей и прямоугольника с едой. Чтобы создать тело змеи, мы собираемся перебрать массив, содержащий положение тела змеи.Задайте обоим прямоугольникам ширину и высоту нашей переменной snakeSize . Последний элемент в нашем представлении — это текстовое представление, которое появляется при включении нашей переменной gameOver :

Создайте функцию, определяющую положение наших прямоугольников. Чтобы расположить змею и еду в невидимой сетке, нам нужно использовать размер змеи, чтобы определить, сколько строк и столбцов мы можем иметь в нашем представлении:

К одному из наших ZStacks мы можем добавить .onAppear в установите положение для нашей змеи и еды, используя функцию, которую мы создали выше:

Создайте функцию, которая проверяет, находится ли змея внутри или снаружи границ экрана, проверяет направление свайпа пользователя, а затем перемещает змею в этом направлении:

Мы можем определить, в каком направлении пользователь провел пальцем, с помощью следующего кода, который использует DragGesture для получения начальной и конечной позиции смахивания, а затем вычисляет разницу между координатами x и y для определения смахивания направление.Добавьте следующую функцию к нашему первому ZStack :

Все, что нам нужно добавить к нашему ZStack , чтобы закончить игру, — это функция .onReceieve , которая берет наш таймер и обновляет позиции змеи и еды. Когда змея окажется на еде, добавьте новую позицию к нашему массиву положений тела змеи, чтобы сделать змею длиннее:

Готово! Спасибо за прочтение.

КУКЛА ЗМЕЯ — Mini Mad Things

Нам нравится делать игрушки своими руками из переработанных материалов.Нашего волнистого друга-змею так любили и с ним играли, что мне пришлось сделать еще одну, чтобы дети могли получить по змее.

МАТЕРИАЛЫ:
  • Крышки для бутылок
  • Толстый гофрированный картон
  • Деревянные бусины 15 мм
  • Маленькие пластиковые бусины
  • Строка
  • Выпученные глаза
  • Краски (опционально)
КАК:

Нарисуйте на картоне крышку бутылки. Мы вырезаем примерно 25 картонных дисков того же размера, что и крышки молочных бутылок, чтобы сделать тело змеи, и 5 картонных дисков меньшего размера для хвоста.Если вы хотите сделать свою змейку длиннее, просто нарежьте больше дисков!

Убедившись, что крышки всех ваших бутылок чистые, сделайте отверстие в середине крышки каждой бутылки, достаточно большое, чтобы через него можно было легко продеть шнур. Чтобы сделать наши отверстия, мы нагрели металлическую шпажку и проплавили отверстие. В качестве альтернативы вы можете использовать острие, дрель или ножницы, чтобы аккуратно проделать отверстие. (Взрослые, помогите с этим!) Проделайте отверстия посередине каждого из ваших картонных дисков.

Чтобы начать изготовление змеи, отрежьте кусок тонкого шнура длиной примерно 150 см.Вденьте иглу для вышивания в середину шнура. Взяв за концы шнура, нанижите по 4 маленькие пластиковые бусины с каждой стороны и завяжите на концах узелки, чтобы бусинки не соскочили. Теперь нанижите на иглу 8 маленьких бисеринок, чтобы получился язык змеи в форме буквы Y.

Начните нанизывать картонные диски, крышки от бутылок и деревянные бусины, чтобы сделать тело вашей змеи. Добавьте деревянную бусину на внутреннюю сторону крышки каждой бутылки, это создаст пространство между крышкой бутылки и следующим картонным диском, позволяя вашей змейке волнообразно двигаться.

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

Добавьте несколько маленьких бусин на конец, завяжите узел, чтобы закрепить и обрежьте лишний шнур. Либо нарисуйте, либо приклейте выпученные глаза, чтобы сделать глаза для вашей змеи. Отрежьте шнур длиной ок. 100 см в длину и привяжите каждый конец к голове и телу змеи, чтобы получилась марионетка. Теперь пусть ваша змея покачивается!

НАШИ ЛЮБИМЫЕ ПОДЕЛКИ >>>

Здесь, в Mini Mad Things, когда я не занят созданием шторма с моими малышами, я также управляю небольшим интернет-магазином, продающим ряд экологически чистых ПРИНАДЛЕЖНОСТЕЙ ДЛЯ ХУДОЖЕСТВА для детей, КОРОБОК ДЛЯ МАСТЕРСКИХ МАТЕРИАЛОВ и красивых КНИГ для творчества.Все продукты, которые я продаю, опробованы и проверены моей замечательной командой строгих экспертов по контролю качества (моих малышей), и мы продаем только те товары, которые нам нравятся!

Посетите наш интернет-магазин ЗДЕСЬ >>>

Натуральные акварельные краски

Мастерская рисования для детей

Набор для вышивки и украшений

Художественная мастерская для детей


ИЩЕТЕ БОЛЬШЕ РАЗВЛЕЧЕНИЙ ДЛЯ МАТЕРИАЛОВ?

Если вы ищете более творческие развлечения, сделанные из переработанных материалов, ознакомьтесь с нашей электронной книгой UP-CYCLED KIDS CRAFTS!

Эта электронная книга включает в себя 20 замечательных художественных и ремесленных проектов, которые можно сделать дома, используя предметы вторичной переработки и несколько простых материалов для рукоделия.Книга включает в себя подборку художественных проектов, игрушек, сделанных своими руками, и забавных поделок, каждый найдет что-то для себя.

ПРИКРЕПИТЬ НАШИ ПОДЕЛКИ НА PINTEREST

Как сделать игру Snake с помощью Python? | Часть 2 (движение головой)

Эй, я Банджи с другим учебником для начинающих , таких как я!
Это вторая часть создания игры «Змейка «.
В этой части мы пытаемся создать функцию для перемещения головы змеи по экрану.
Давайте погрузимся в программирование и посмотрим, что получится…

Если вы будете следовать этой серии руководств, вы должны помнить последнюю часть наших кодов. (Как сделать игру «Змейка» с помощью Python? | Часть 1).
Поскольку наш код становится все длиннее и длиннее, я не буду повторять последнюю часть еще раз

Станем новичком!

Так что не бойтесь быть новичком, просто продолжайте двигаться вперед, и я обещаю, что вместе мы многому научимся, НАВСЕГДА !


Для перемещения головы змеи мы создадим новую функцию и назовем ее move() .

  деф ход():
    проходить
  
Войти в полноэкранный режимВыйти из полноэкранного режима

мы хотим принять какие-то меры, поэтому давайте посмотрим, что мы можем сделать, и после этого я объясню вам, что произошло.

  # Функция перемещения
деф ход():
    # Вверх
    если head.direction == "Вверх":
        у = голова.ycor()
        head.sety(y + 10)
  
Войти в полноэкранный режимВыйти из полноэкранного режима

Поместите эту часть кода над циклом while .
На самом деле здесь происходит следующее:

Если направление головы равно направлению вверх, повернуть голову по координате y. мы установили 10, но это полностью зависит от вас, просто поиграйте с ним!

Если вы запустите этот код, ничего не произойдет!
Потому что вам нужно поместить функцию перемещения в цикл!
, так что это будет так:

  импортная черепаха
время импорта


# Настроить экран
окна = черепаха.Экран()
windows.title("Змеиная игра от Banji")
окна.bgcolor("Розовый")
windows.setup(ширина = 1000, высота = 700)
windows.tracer(0)

# Змеиная голова
голова = черепаха.Черепаха()
голова.скорость(0)
голова.форма("квадрат")
head.color("черный")
голова.penup()
голова.goto(0, 0)
head.direction = "стоп"


деф ход():
    # Вверх
    если head.direction == "Вверх":
        у = голова.ycor()
        head.sety(y + 10)

# Основной игровой цикл
пока верно:
    Центр обновления Windows()

    # помещаем функцию перемещения в цикл
    переехать()
windows.mainloop()



  
Войти в полноэкранный режимВыйти из полноэкранного режима

если вы снова запустите этот код, ничего не произойдет, знаете почему?

Потому что головка .direction() должно быть таким же!
Итак, давайте заменим "стоп" на "Вверх" и снова запустим коды.

  импортная черепаха
время импорта



окна = черепаха.Экран()
windows.title("Змеиная игра от Banji")
windows.bgcolor("Розовый")
windows.setup(ширина = 1000, высота = 700)
windows.tracer(0)


голова = черепаха.Черепаха()
голова.скорость(0)
голова.форма("квадрат")
head.color("черный")
голова.penup()
голова.goto(0, 0)



# Вы должны изменить эту часть
head.direction = "Вверх"



деф ход():

    если голова.направление == "Вверх":
        у = голова.ycor()
        head.sety(y + 10)


пока верно:
    Центр обновления Windows()

    # перемещаем функцию в цикле
    переехать()
windows.mainloop()



  
Войти в полноэкранный режимВыйти из полноэкранного режима

Запустите программу еще раз…
На этот раз вы не видите змеиную голову!
Черт возьми 🙁
Причина этой проблемы:

Причина Змеиная голова движется так быстро, что ее не видно!
Для решения этой проблемы мы будем использовать время для замедления движения головы.
В модуле времени есть метод sleep .
На самом деле sleep() приостанавливает выполнение на заданное количество секунд.
Посмотрите, как мы можем использовать модуль time с методом sleep() .

 
импортная черепаха
время импорта


# Настроить экран
окна = черепаха.Экран()
windows.title("Змеиная игра от Banji")
windows.bgcolor("Розовый")
windows.setup(ширина = 1000, высота = 700)
windows.tracer(0)

# Змеиная голова
голова = черепаха.Черепаха()
голова.скорость(0)
голова.форма("квадрат")
head.color("черный")
голова.penup()
# head.goto(0, 0)
head.direction = "Вверх"


деф ход():
    # Вверх
    если head.direction == "Вверх":
        у = голова.ycor()
        head.sety(y + 10)

# Основной игровой цикл
пока верно:
    Центр обновления Windows()

    переехать()


    #Добавление модуля Time и метода сна в наш основной цикл
    время сна (0,1)



windows.mainloop()



  
Войти в полноэкранный режимВыйти из полноэкранного режима

Поскольку у нас есть 4 направления, нам нужно добавить другие направления в нашу функцию move() .

  деф ход():
    # Вверх
    если head.direction == "Вверх":
        у = голова.ycor()
        head.sety(y + 10)

    # Вниз
    если head.direction == "Вниз":
        у = голова.ycor()
        head.sety(y - 10)

    # Двигай влево
    если head.direction == "Влево":
        х = голова.xcor()
        head.setx(x - 10)

    # Переместить вправо
    если head.direction == "Вправо":
        х = голова.xcor()
        head.setx(x + 10)
  
Войти в полноэкранный режимВыйти из полноэкранного режима

Итак, если вы хотите остановить движение, просто установите на голову.direction = "Вверх" до head.direction = "стоп" .
А что, если мы хотим двигать змеиную голову с помощью клавиатуры?
Нам нужно определить функции для каждого направления.

  # Функции перехода
защита go_up():
    head.direction = "Вверх"

защита go_down():
    head.direction = "Вниз"

защита go_left():
    head.direction = "Влево"

защита go_right():
    head.direction = "Вправо"
  
Войти в полноэкранный режимВыйти из полноэкранного режима

Поместите эту функцию над функцией move() .
Затем для следующего шага есть метод .listen() для сбора ключевых событий.
После этого нам нужно определить еще один метод .onkeypress(функция, клавиша) !

Давайте посмотрим:

  # Привязка клавиатуры
окна.слушай()
windows.onkeypress(go_up, ключ = "w")
windows.onkeypress(go_down, ключ = "s")
windows.onkeypress(go_left, ключ = "а")
windows.onkeypress(go_right, ключ = "d")
  
Войти в полноэкранный режимВыйти из полноэкранного режима

Поместите этот фрагмент кода над циклом while .
Если вы хотите проверить полные коды или если вы настолько ЛЕНИВЫ , что пишете много кодов, вы можете проверить мой gitlab.
Часть 2 | Как переместить Змеиную Голову? (полные коды)

Теперь, если вы запустите программу, вы увидите, что голова движется по экрану, что оооочень круто!
Мне это нравится, просто продолжай учиться.


Если вы обнаружили какие-либо Ошибки или проблемы в кодах, или если у вас есть какие-либо предложения, не стесняйтесь оставлять Комментарий ниже.
Спасибо, что читаете мои уроки и статьи.

Продолжайте двигаться вперед

Приятного путешествия 👊

Код с 💛

🅑🅐🅝🅙🅘

Replit Docs — Змейка с PyGame

Snake была невероятно популярной игрой, которую в основном помнили по мобильным телефонам 1990-х годов. На тот момент для многих это была единственная игра на телефоне. В самой простой форме это очень простая игра, но все же странно интересная.Это также отличная игра для изучения основ создания игр.

В этом уроке мы реализуем самую простую форму Змеи в pygame

Обзор и требования

Мы будем использовать веб-IDE Replit для создания нашей версии Snake.

Давайте немного подумаем, что нам нужно сделать. Змея в своей основной форме представляет собой серию блоков, представляющих змею, движущуюся по сетке, направление которой контролирует игрок. Также в ней есть простые правила — когда змея касается сторон экрана, она умирает.Если змея перекрестится, она тоже погибнет. Если змея съест немного еды (блок другого типа), она вырастет на 1 блок. Затем еда снова появляется в другом случайном месте на экране.

Несколько компонентов, которые нам нужно построить:

  • Способ рисовать блоки и перемещать их по экрану.
  • Способ получить направление движения от игрока к змее.
  • Способ определить, вышла ли змея за пределы экрана.
  • Способ определить, переступила ли змея через себя (или укусила ли себя, как другая аналогия).
  • Способ случайного размещения еды на экране.
  • Способ определить, съела ли змея пищу или прикоснулась к ней.
  • Способ выращивания змеи.

Есть о чем подумать! Давайте начнем и создадим проект в Replit.

Создание нового проекта

Перейдите к Replit и создайте новый repl. Выберите Python в качестве языка. Теперь дайте этой реплике имя, например «snake-pygame».

После загрузки repl вы должны увидеть main.py файл. Здесь мы начнем кодировать.

Начало работы с Pygame

Обычно используемая игровая среда в Python — это pygame. Он имеет функциональные возможности для рисования форм и изображений на экране, ввода данных пользователем, воспроизведения звуков и многого другого. Мы будем использовать некоторые базовые функции при создании этой игры, чтобы посмотреть, как она работает.

Мы можем импортировать его в наш проект, добавив следующую строку в наш файл main.py :

  импорт pygame  

Чтобы запустить инфраструктуру pygame, нам нужно добавить код инициализации:

  пигейм.в этом()
границы = (300 300)
окно = pygame.display.set_mode (границы)
pygame.display.set_caption("Змея")  

Строка 1 этого кода запускает систему pygame, инициализируя ее модули (например, код шрифта, звука или графики). Строка 2 создает новый кортеж с именем bounds . Этот кортеж содержит размеры окна, в котором мы будем запускать нашу игру про змейку. Строка 3 создает новое окно для отображения нашей игры. Строка 4 дает окну заголовок или заголовок.Это может быть все, что вы хотели бы назвать игрой.

Если вы запустите проект с помощью кнопки « Run > » вверху в центре реплики, вы должны увидеть небольшое пустое окно. Это означает, что все инициализировано и работает до сих пор.

Создание класса Змеи

Теперь, когда у нас есть основная структура, давайте создадим класс для моделирования нашей змеи. Этот класс будет иметь следующие обязанности:

  1. Отслеживание местоположения змеи.
  2. Отслеживание длины змеи.
  3. Позволить змее расти.
  4. Проверка на коллизии с границами окна.
  5. Проверка, не пересекла ли змея («укусила») себя
  6. Отслеживание направления движения змеи.

Давайте начнем с создания нового файла с именем змея.py . Добавьте следующий код:

  из импорта enum Enum

Направление класса (перечисление):
  ВВЕРХ = 0
  ВНИЗ = 1
  ВЛЕВО = 2
  ВПРАВО = 3

класс Змея:
  длина = нет
  направление = Нет
  тело = нет
  размер_блока = Нет
  цвет = (0,0,255)
  границы = Нет

  def __init__(я, размер_блока, границы):
    себя.размер_блока = размер_блока
    self.bounds = границы
    самовозрождение ()

  деф респаун(сам):
    собственная длина = 3
    self.body = [(20,20),(20,40),(20,60)]
    self.direction = Направление.ВНИЗ  

Первый класс в этом файле — это перечисление, которое является хорошим способом сгруппировать набор связанных констант. Мы используем это, чтобы определить допустимые направления, в которых может двигаться змея, и сделать код, который проверяет и изменяет направления, легко читаемым и изменяемым по сравнению с простым использованием чисел или строк для определения направлений.

Затем мы определяем сам класс Snake . Первые несколько строк настраивают некоторые переменные — в Python это не является строго обязательным, но упрощает отслеживание переменных или свойств в нашем классе.

Затем у нас есть метод инициализации в строке, начинающейся с def __init__ . Когда мы создаем экземпляр нашего класса Snake , мы передаем block_size , который должен быть целым числом с размером каждого блока, составляющего нашу сетку.Это используется для размера каждого сегмента змейки, а также для позиционирования и перемещения змейки на доске. Мы также передаем границ , которые представляют собой набор целых чисел с шириной и высотой игровой области (того же размера, что и область экрана). Так мы можем проверить, вышла ли змея за границы. В методе инициализатора мы назначаем эти входные данные инициализатора нашим внутренним переменным, чтобы позже мы могли использовать их в других методах. Затем мы вызываем наш внутренний метод respawn , который содержит настройки по умолчанию для длины змеи, начальные определения сегментов тела и начальное направление.Мы также будем вызывать respawn всякий раз, когда змея падает или умирает каким-либо другим образом, чтобы сбросить игру.

Давайте немного посмотрим на переменную body . Это список Python, содержащий кортежи (или пары) координат. Каждая из этих координат описывает верхние левые x и y положения экрана сегмента тела или блока. Мы будем добавлять (дополнять) этот список по мере роста змеи. Мы также используем этот список при рисовании змеи.

Рисование змеи

Теперь, когда у нас есть основы класса Snake и код его инициализации, давайте добавим метод для рисования змеи на экране.Добавьте это к классу Snake :

  def draw(self, game, window):
    для сегмента в self.body:
      game.draw.rect(окно, self.color, (сегмент[0],сегмент[1],self.block_size, self.block_size))  

Этот метод принимает экземпляр pygame, game и окно (или поверхность в общей терминологии pygame) для рисования. Затем он перебирает каждый из кортежей в свойстве body и использует pygame, встроенный в метод draw.rect , для рисования прямоугольника для каждого блока или сегмента змеи в списке body.Мы также используем наш параметр block_size , чтобы установить ширину и высоту нарисованного прямоугольника.

Давайте попробуем то, что у нас есть. Мы просто увидим несколько статических блоков на экране, но это хороший тест, чтобы увидеть, все ли на правильном пути. Чтобы заставить его работать, давайте импортируем и создадим новый объект Snake и настроим первую часть нашего игрового цикла в main.py .

Добавьте код для импорта классов в файл snake.py в верхней части главного файла .py , прямо под строкой import pygame :

  из импорта змеи *  

Теперь мы добавляем следующий код прямо под строку pygame.display.set_caption("Snake") :

  размер_блока = 20
змея = змея (размер_блока, границы)  

Этот код устанавливает размер block_size для нашей сетки в 20 пикселей по умолчанию. Затем мы создаем новый экземпляр нашего класса Snake с размером блока и границами, которые мы использовали для установки размера нашего окна, и это то, что змейка будет использовать для проверки, касается ли она края окна.

Теперь давайте настроим наш игровой цикл. Игровой цикл — это центральный координирующий код большинства игр. Он обрабатывает ввод данных пользователем, обновляет статус игрока (например, позицию, счет и т. д.), проверяет взаимодействия и столкновения, а также обрабатывает рисование.

Добавьте следующее в файл main.py , чтобы настроить игровой цикл:

  запуск = Истина
во время работы:
  pygame.time.delay (100)

  для события в pygame.event.get():
    если event.type == pygame.ВЫЙТИ:
      запустить = Ложь

  окно.заполнить((0,0,0))
  змея.draw(pygame, окно)
  pygame.display.flip()  

Этот код устанавливает цикл, который повторяется каждые 100 мс, пока из окна не будет получен сигнал выхода. Это запускается, когда игрок нажимает кнопку «Закрыть окно» в верхней части окна. Pygame имеет концепцию очереди событий, в которую он записывает различные инициированные события. Мы можем читать эту очередь событий каждый раз, когда зацикливаемся в нашем игровом цикле, и проверять, не было ли какое-либо из событий сигналом QUIT .Затем мы можем установить условие для запуска цикла на False , и в следующий раз, когда цикл будет повторяться, наше условие while больше не будет истинным, и игра завершится.

Наш цикл также очищает окно в каждом раунде, готовясь к отрисовке обновленного состояния игры. Вы можете видеть это в строке window.fill((0,0,0)) . Это заполняет все окно черным цветом, указанным в кортеже цвета RGB (0,0,0) . Теперь, когда у нас есть чистый лист, мы можем вызвать метод draw для нашего объекта-змеи.Мы передаем объекты pygame и Window, чтобы Snake мог рисовать на них. Когда мы визуализируем нашу еду, мы будем называть ее после этой строки.

Наконец, мы делаем финальную визуализацию на экране, вызывая pygame.display.flip() . Это берет все наши обновления и «переворачивает» их из оконного буфера на экран.

Чтобы проверить, что игровой цикл и отрисовка работают, запустите программу, нажав большую кнопку « Run > » в верхней части repl. В правом верхнем углу изображения вы должны увидеть черное окно с несколькими блоками, изображающими змею.

Перемещение змеи

Наш следующий шаг — заставить змею двигаться по экрану. Способ сделать это — проверить, в каком направлении движется змея, и добавить блок перед змеей в этом направлении. Затем нам нужно удалить блок в хвостовой части змеи.

Для этого добавьте этот метод в класс Snake в файле змеи .py:

  деф ход(сам):
    curr_head = self.body[-1]
    если self.direction == Направление.ВНИЗ:
      next_head = (curr_head[0], curr_head[1] + self.block_size)
      self.body.append (next_head)
    elif self.direction == Direction.UP:
      next_head = (curr_head[0], curr_head[1] - self.block_size)
      self.body.append (next_head)
    elif self.direction == Direction.RIGHT:
      next_head = (curr_head[0] + self.block_size, curr_head[1])
      self.body.append (next_head)
    elif self.direction == Direction.LEFT:
      next_head = (curr_head[0] - self.block_size, curr_head[1])
      себя.body.append(next_head)

    если self.length < len(self.body):
      self.body.pop(0)  

Этот метод получает "голову" змеи, которая является последним элементом нашего списка body . Python имеет удобную функцию отрицательных индексов. Это означает, что индекс -1 возвращает последний элемент в списке, -2 возвращает предпоследний и так далее. Это позволяет нам легко получить последний элемент или переднюю часть змеи в нашем списке body, используя код curr_head = self.тело[-1] .

После того, как мы получили голову змеи, мы проверяем, в каком направлении движется змея. Если она движется вверх или вниз, мы добавляем новый блок, копируя координату x текущей головы и добавляя или вычитая ( в зависимости от того, идет ли змея вверх или вниз) одна сетка block_size к координате y. Точно так же, если змея движется влево или вправо, мы добавляем новый блок в список body , используя координату y текущей головы, но изменяя координату x на единицу block_size .

Как только это будет сделано, мы удалим блок в хвостовой части змеи, используя код self.body.pop(0) . Однако перед этим у нас есть условие: if self.length < len(self.body) . Это важно, когда мы доберемся до того, как змея ест или растет. Каждый раз, когда змея ест, мы будем увеличивать свойство length змеи. Затем мы можем использовать это свойство length , чтобы определить, должны ли мы на самом деле удалять хвостовой сегмент змеи, когда она движется.

Теперь давайте добавим вызов этого метода move в наш игровой цикл. В файле main.py измените игровой цикл, чтобы вызвать этот метод:

  запуск = Истина
во время работы:
  pygame.time.delay (100)

  для события в pygame.event.get():
    если event.type == pygame.ВЫЙТИ:
      запустить = Ложь

  змея.движение()
  окно.заполнить((0,0,0))
  змея.draw(pygame, окно)
  pygame.display.update()  

Обратите внимание, что мы добавили строку змея.move() . Это вызовет наш метод move , который мы добавляли к нашей змейке в каждом цикле.Это создаст впечатление, что змея плавно движется по экрану. Проверьте это, нажав кнопку « Run > » в верхней центральной части repl. Змея должна начинаться в левом верхнем углу окна и двигаться вниз по экрану, пока не исчезнет за пределами окна.

Управление змеей

Змея движется! Наша следующая задача — получить информацию от игрока, чтобы управлять змеей. Начнем с добавления следующего метода в класс Snake в змейке .py файл:

  руление (самостоятельное, направление):
    если self.direction == Direction.DOWN и direction != Direction.UP:
      self.direction = направление
    elif self.direction == Direction.UP и direction != Direction.DOWN:
      self.direction = направление
    elif self.direction == Direction.LEFT и direction != Direction.RIGHT:
      self.direction = направление
    elif self.direction == Direction.RIGHT и direction != Direction.LEFT:
      self.direction = направление  

Этот метод работает, принимая аргумент direction , который должен быть одним из наших значений перечисления Direction , которые мы определили ранее.Затем мы делаем проверку для каждого возможного направления, чтобы убедиться, что новое введенное направление не является полностью противоположным направлением, в котором в данный момент движется змея — это потому, что мы не хотим допускать реверсирования змеи в нашей игре. Если входное направление является допустимым движением, мы обновляем свойство направления змеи. Как вы помните из нашего метода move , это свойство используется для определения того, как обновить свойство list body змеи, чтобы создать движение змеи.

Теперь, когда мы можем обновить направление змеи с помощью управляющей команды, нам нужно получить информацию от игрока. В Pygame есть полезный метод key.get_pressed() , который возвращает список, содержащий логический элемент для каждой клавиши на клавиатуре. Это позволяет нам определить, какую клавишу нажимает игрок, просматривая значение по правильному индексу в этом списке клавиш. К счастью, нам не нужно запоминать правильный индекс для каждого ключа, поскольку pygame имеет читаемые имена, определенные как константы, которые мы можем использовать.Например, чтобы узнать, нажата ли стрелка вверх, мы можем вызвать keys = pygame.key.get_pressed() , чтобы получить список состояний для всех клавиш. Затем мы можем найти состояние клавиши «Стрелка вверх», просмотрев запись для этой клавиши с кодом keys[pygame.K_UP] . Если клавиша нажата, она будет иметь значение True ; если не нажимать, его значение будет False .

Давайте добавим код в наш игровой цикл, чтобы проверять, нажаты ли клавиши со стрелками «Вверх», «Вниз», «Влево» или «Вправо».Затем, в зависимости от нажатой клавиши, мы можем вызвать наш метод steer с обновленной командой направления. Добавьте следующий код над строкой snake.move() в игровом цикле в файле main.py :

  ключей = pygame.key.get_pressed()
  если ключи[pygame.K_LEFT]:
    змея.управлять(Направление.ВЛЕВО)
  элитные ключи[pygame.K_RIGHT]:
    змея.управлять(Направление.ВПРАВО)
  элитные ключи[pygame.K_UP]:
    змея.управлять(Направление.ВВЕРХ)
  элитные ключи[pygame.K_DOWN]:
    змея.руль(Направление.ВНИЗ)  

Давайте проверим это. Нажмите кнопку « Run > » в верхней центральной части repl. Чтобы Pygame получал ввод с клавиатуры, вам нужно сначала быстро щелкнуть в окне игры, когда игра запускается. Теперь вы сможете использовать клавиши управления курсором, чтобы управлять змеей по экрану! У нас пока нет проверки границ, поэтому змея может исчезнуть за краем окна.

Добавление еды

У нас есть змея, она движется, и игрок может ею управлять.Давайте добавим немного пищи, которую змея может съесть, что заставит ее расти дольше.

Мы создадим еду так же, как создали змею. Создайте новый файл с именем food.py . В этом файле мы создадим класс Food для управления положением и отрисовкой еды на сетке.

В игре «Змейка» после того, как пищевой блок съеден, в случайном месте на сетке появляется еще один. Это означает, что нам понадобится генератор случайных чисел, чтобы определить местонахождение еды.В Python для этого есть модуль random . У него есть функция randint , которую мы можем использовать, чтобы найти случайную позицию на экране для размещения еды. Мы начнем с добавления ссылки на модуль random в файле food.py . Затем мы добавим класс Food .

  случайный импорт

Класс Еда:
    размер_блока = Нет
    цвет = (0,255,0)
    х = 0;
    у = 0;
    границы = Нет

    def __init__(я, размер_блока, границы):
        себя.размер_блока = размер_блока
        self.bounds = границы

    def draw(я, игра, окно):
        game.draw.rect(окно, self.color, (self.x, self.y, self.block_size, self.block_size))

    деф респаун(сам):
        blocks_in_x = (self.bounds[0])/self.block_size;
        blocks_in_y = (self.bounds[1])/self.block_size;
        self.x = random.randint(0, blocks_in_x - 1) * self.block_size
        self.y = random.randint(0, blocks_in_y - 1) * self.block_size  

Обратите внимание на сходство с классом Snake .У них обоих есть метод Draw и метод возрождения . Как правило, в играх большинство объектов имеют эту функциональность.

Класс Food также имеет свойства, аналогичные классу Snake . Он имеет block_size , что означает размер каждого блока в нашей виртуальной сетке. У него есть кортеж цвета , который мы будем использовать при рисовании еды. Он также имеет запись о границах окна, чтобы мы не рисовали еду за пределами видимого окна.Однако, поскольку еда состоит только из 1 блока, нам не нужен массив body , как класс змеи. Мы можем отслеживать его положение с помощью координатных переменных x и y.

Метод draw является упрощенной версией метода в классе змей. Это потому, что нам нужно нарисовать только 1 блок.

Метод возрождения интересен. Нам нужно выровнять нашу еду с нашей виртуальной сеткой, определяемой block_size . Однако если мы просто назовем random.randint , чтобы найти позицию x и y для еды, она может приземлиться на полпути через блок в сетке. Это сделает странным пытаться прицелиться змеей, так как змея не будет выровнена с едой.

Чтобы все было выровнено, нам нужно взять нашу информацию о размере окна, инкапсулированную в нашем свойстве bounds , и наши знания о block_size нашей сетки, чтобы определить размер окна с точки зрения блоков. . Так, например, если размер нашего окна или границ составляет 300x300 пикселей, а размер блока равен 20 пикселей, то в каждом измерении 300 пикселей/20 пикселей = 15 блоков.Затем мы можем выбрать случайную позицию с точки зрения размеров блока, то есть выбрать число от 1 до 15, в которое поместить еду. Чтобы получить фактические координаты экрана x и y для отрисовки блока, мы можем просто умножить номер нашего блока на block_size .

В первых 2 строках метода respawn находим количество блоков в каждом измерении, как описано выше. Затем следующие 2 строки находят случайный блок и переводят этот блок в координаты x и y. Вы можете заметить, что вместо того, чтобы найти случайное число между 1 и количеством блоков в измерении, мы находим число между 0 и количеством блоков минус 1.Это связано с тем, что окна x и y начинаются с 0, а не с 1, поэтому нам нужно сдвинуть диапазон на 1, чтобы компенсировать это.

У нас есть класс Food , поэтому мы можем создать его экземпляр и добавить в игровой цикл.

Сначала нам нужно добавить ссылку на файл food.py и импортировать класс Food . В файле main.py , чуть ниже строки import pygame , добавьте следующее:

  из импорта продуктов питания Продукты питания  

В основной .py , после строки snake = Snake(block_size, bounds) и непосредственно перед игровым циклом создайте новый объект Food , добавив строку:

  еда = еда (размер_блока, границы)  

В игровом цикле в main.py сразу после строки змея.draw(pygame, окно) мы можем добавить строку для рисования еды. Добавьте следующую строку:

  food.draw(pygame, окно)  

Отлично! Давайте проверим до этого момента, снова нажав кнопку « Run > ».Теперь вы должны увидеть змею, а также зеленый блок, представляющий еду.

Добавление обнаружения столкновений для продуктов питания

Вы заметите, что змея может пройти прямо над едой, и ничего не происходит. Основной концепцией игр является обнаружение столкновений. Поскольку мы используем строгую систему сетки, мы можем использовать упрощенную версию обнаружения столкновений. Мы будем использовать это, чтобы определить, переместилась ли змея или столкнулась с пищевым объектом. Затем мы можем увеличить длину змеи и снова возродить еду.

Мы возложим ответственность за проверку столкновений на класс Snake . В файле snap.py добавьте следующие два метода к классу Snake :

  по умолчанию есть(я):
    собственная длина += 1

  
  def check_for_food (я, еда):
    голова = self.body[-1]
    если head[0] == food.x и head[1] == food.y:
      сам.есть()
      еда.респаун()  

Первый способ, ест , увеличивает допустимую длину змейки.Помните, что свойство length используется в методе move для определения необходимости удаления хвостового сегмента.

Затем у нас есть метод check_for_food . Это принимает объект food в качестве аргумента. В этой функции мы получаем самый передний блок змеи, или head , обращаясь к последнему элементу в списке body . Напомним, что мы можем использовать отрицательный индекс для доступа к последнему элементу. Затем, поскольку мы используем строгую систему сетки для нашей игровой схемы, нам нужно только проверить, равны ли координаты x и y головы змеи координатам x и y объекта еды.Если они есть, мы вызываем метод eat для увеличения длины змейки. Мы также вызываем respawn на еде, чтобы она исчезла из своего текущего местоположения и снова появилась в другом месте.

В игровом цикле в файле main.py добавьте следующий код сразу после строки snap.move() :

  змея.check_for_food(еда)  

Это добавляет вызов нашего метода обнаружения столкновений с едой в каждом цикле игры, сразу после того, как змея переместилась в новый блок.

Мы можем проверить это еще раз и посмотреть, растет ли теперь наша змея, когда мы едим немного еды. Нажмите кнопку « Run > » еще раз для проверки.

Обнаружение столкновений с хвостом и столкновением

Теперь нам нужно добавить обнаружение столкновений, если змея пересекает саму себя. Это смертельный прием и один из способов достичь «Game Over» в Snake. Аналогично проверке, съела ли змея пищу, мы можем добавить метод к классу Snake в файле змеи.py , чтобы проверить, пересекла ли змея или укусила себя:

  защита check_tail_collision(self):
    голова = я.тело[-1]
    has_eaten_tail = Ложь

    для i в диапазоне (len (self.body) - 1):
      сегмент = self.body[i]
      если голова [0] == сегмент [0] и голова [1] == сегмент [1]:
        has_eaten_tail = Истина

    вернуть has_eaten_tail  

Этот метод получает голову змеи, как и в нашем методе check_for_food . Затем мы устанавливаем переменную флага, чтобы определить, съела ли змея свой хвост, и инициализируем ее значением False .

Следующая часть метода проходит через все сегменты, составляющие тело змеи, исключая последний элемент списка body , так как этот элемент представляет голову змеи.Затем мы проверяем координаты x и y головы и текущего сегмента. Если они совпадают, это означает, что голова змеи находится над сегментом тела, поэтому мы можем установить для нашего флага has_eaten_tail значение true.

После того, как все сегменты протестированы, мы возвращаем значение флага has_eaten_tail .

Последнее обнаружение, которое нам нужно добавить, — это перемещение змеи за пределы окна. Для этого мы можем добавить следующий метод к классу Snake :

  деф check_bounds(я):
    голова = я.тело[-1]
    если голова[0] >= self.bounds[0]:
      вернуть Истина
    если голова[1] >= self.bounds[1]:
      вернуть Истина

    если голова [0] < 0:
        вернуть Истина
    если голова[1] < 0:
        вернуть Истина

    вернуть Ложь  

Этот код еще раз извлекает блок head змеи из конца списка body . Затем он сверяет каждое измерение с границами окна. Если он выходит за пределы любой из этих границ, метод возвращает True .Если голова змеи все еще находится в пределах границ, возвращается значение False .

Добавление экрана «Игра окончена»

Теперь, когда мы можем обнаруживать коллизии в конце игры, мы можем добавить код в игровой цикл для вызова этих методов и обработки конца игры. Когда игра заканчивается, мы должны показать игроку сообщение «Игра окончена» на секунду или две. Затем мы можем сбросить змею и еду, чтобы дать игроку еще один шанс.

Чтобы добавить сообщение «Игра окончена», мы можем использовать модуль шрифта pygame.Основные шаги по использованию шрифта для вывода текста на экран:

  1. Создайте новый объект шрифта, указав тип шрифта, размер и параметры жирный / курсив , используя метод конструктора font.SysFont .
  2. Отобразите желаемый текст на поверхности, используя метод render для созданного выше объекта шрифта.
  3. blit отображаемый текст на поверхность главного окна.
  4. Обновите отображение окна, чтобы показать это.

Чтобы реализовать описанные выше шаги, создайте новый объект шрифта , добавив следующий код в строку food = Food(block_size,bounds) в файле main.py :

  шрифт = pygame.font.SysFont('comicsans',60, True)  

В игровом цикле нам нужно вызвать методы проверки столкновений, которые мы ранее добавили в класс змеи. Если обнаружено столкновение, мы можем отобразить наше сообщение «Игра окончена», приостановить и перезапустить игру.Добавьте следующий код под строкой змейка.check_for_food(food) в игровой цикл в файле main.py :

 , если змейка.check_bounds() == Истина или змейка.check_tail_collision() == Истина:
    text = font.render('Игра окончена', True, (255 255 255))
    window.blit(текст, (20,120))
    pygame.display.update()
    pygame.time.delay (1000)
    змея.респаун()
    еда.респаун()  

Этот код вызывает наши методы проверки границ и хвостового столкновения. Если какой-либо из них возвращает True , мы визуализируем новое сообщение «Game Over», используя приведенные выше шаги шрифта, и перебрасываем его в наше главное окно.Затем мы делаем задержку на 1000 мс (или 1 секунду), а затем возрождаем и змею, и объекты еды для новой игры.

Поздравляем! Базовая игра Snake завершена. Нажмите кнопку « Run > » в верхней части реплики, чтобы попробовать. Когда змея врежется в себя или выйдет за край окна, игра завершится и начнется новая.

Что попробовать дальше

В эту игру можно добавить бесконечное количество функций. Некоторые идеи:

  • Создать версию для 2 игроков.
  • Добавить препятствия для змеи.
  • Постепенно ускоряйте игру, чтобы сделать ее сложнее.
  • Добавьте улучшенную графику, используя модули изображений pygame для загрузки «спрайтов» и текстур для игры.
  • Добавьте звуковые эффекты и музыку, используя звуковые функции pygame.
.