Создаём «Змейку» — первую игру на Python и Pygame
Учимся программировать через разработку игр. Сегодня напишем знакомую всем «Змейку» — вспомним правила игры и реализуем их на Python.
Иллюстрация: Оля Ежак для Skillbox Media
Антон Яценко
Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.
Pygame — популярная библиотека для создания игр под различные устройства на Windows, macOS, Linux или Android. Она помогает разработчику не только описать геймплей, но и работать с клавиатурой, мышью, акселерометром, звуком и видео.
Первая версия Pygame была представлена Питом Шиннерсом в октябре 2000 года. За 22 года вокруг библиотеки сложилось большое комьюнити, а о работе с ней написано несколько десятков книг. Последняя стабильная версия на июль 2022 года — 2.1.2.
Давайте разберёмся в том, как устроена Pygame, и напишем свою первую игру — классическую «Змейку» на Python, которую студенты часто берут для курсовой работы по программированию.
Устанавливаем Pygame и разбираемся
Pygame — не самостоятельная библиотека. На самом деле это обёртка для библиотеки SDL, Simple DirectMedia Layer. Именно SDL позволяет задействовать любые внешние устройства — например, мышь или клавиатуру. А Pygame делает работу с ними удобной для Python-разработчика.
Установить Pygame просто. Для этого воспользуемся терминалом или командной строкой и командой pip:
Теперь игровое окно не закрывается само по себе. Однако и закрыть его мы тоже не сможем — если нажать на кнопку «Выход», ничего не произойдёт. Исправляем это с помощью кода: добавляем событие QUIT, закрывающее окно.
Всё получилось. Ближе к центру экрана появился синий квадрат, который и будет нашей змейкой.
Шаг 3
Описываем движения змейки
Управлять перемещением змейки можно с помощью специального класса Pygame KEYDOWN. Класс позволяет использовать четыре стандартных события, получая их с клавиавтуры: K_UP, K_DOWN, K_LEFT и K_RIGHT — они соответствуют движениям змейки вверх, вниз, влево и вправо. Срабатывание любого события из класса KEYDOWN приводит к изменению положения змейки. Зададим шаг этого движения в 10 пикселей.
Кроме того, мы должны создать две переменные для хранения значений координат первой клетки нашей змейки по осям x и y. Назовём их x1_change и y1_change.
Шаг 4
Учитываем препятствия — границы игрового поля
Если змейка попадает на границу экрана, то игрок терпит поражение, а игра заканчивается. Чтобы закодить это правило, можно воспользоваться оператором if, который определяет координаты x и y для змейки и анализирует, выходят ли они за границы игрового поля. Добавим необходимый код.
Шаг 5
Добавляем еду для змейки
Теперь добавим «еду». Используем библиотеку random, чтобы она появлялась в случайном месте на игровом поле. Когда наша змейка будет проходить через еду, то её длина будет увеличиваться. Это мы добавим на следующем шаге. Кроме того, дадим возможность игроку выйти из игры или начать игру заново после проигрыша.
А если выполнить условие для завершения игры, то появится сообщение с предложением выйти из игры или начать её заново:
Шаг 6
Увеличиваем длину змейки
Дополним наш код, чтобы длина змейки увеличивалась при поглощении еды. Для этого нам понадобится список, в котором будет храниться текущая длина змейки. Учтём ещё важный момент из правил: при столкновении головы змейки с её телом игра завершается.
Шаг 7
Добавляем отображение счёта
Добавим отображение счёта текущей игры. Для этого создадим функцию Your_score. Она будет отображать длину змейки, вычитая из неё 1 (ведь 1 — это начальный размер змейки, и это не является достижением игрока).
Можно считать, что наша работа над «Змейкой» закончена. Мы полностью реализовали геймплей, который запланировали на старте работы.
Итоговый код
Наш код полностью и без комментариев:
import pygame import time import random pygame.init() white = (255, 255, 255) yellow = (255, 255, 102) black = (0, 0, 0) red = (213, 50, 80) green = (0, 255, 0) blue = (50, 153, 213) dis_width = 800 dis_height = 600 dis = pygame.display.set_mode((dis_width, dis_height)) pygame.display.set_caption('Змейка от Skillbox') clock = pygame.time.Clock() snake_block = 10 snake_speed = 15 font_style = pygame.font.SysFont("bahnschrift", 25) score_font = pygame.font.SysFont("comicsansms", 35) def Your_score(score): value = score_font.render("Ваш счёт: " + str(score), True, yellow) dis.blit(value, [0, 0]) def our_snake(snake_block, snake_list): for x in snake_list: pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block]) def message(msg, color): mesg = font_style.render(msg, True, color) dis.blit(mesg, [dis_width / 6, dis_height / 3]) def gameLoop(): game_over = False game_close = False x1 = dis_width / 2 y1 = dis_height / 2 x1_change = 0 y1_change = 0 snake_List = [] Length_of_snake = 1 foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0 while not game_over: while game_close == True: dis.fill(blue) message("Вы проиграли! Нажмите Q для выхода или C для повторной игры", red) Your_score(Length_of_snake - 1) pygame.display.update() for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: game_over = True game_close = False if event.key == pygame.K_c: gameLoop() for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: x1_change = -snake_block y1_change = 0 elif event.key == pygame.K_RIGHT: x1_change = snake_block y1_change = 0 elif event.key == pygame.K_UP: y1_change = -snake_block x1_change = 0 elif event.key == pygame.K_DOWN: y1_change = snake_block x1_change = 0 if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0: game_close = True x1 += x1_change y1 += y1_change dis.fill(blue) pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block]) snake_Head = [] snake_Head.append(x1) snake_Head.append(y1) snake_List.append(snake_Head) if len(snake_List) > Length_of_snake: del snake_List[0] for x in snake_List[:-1]: if x == snake_Head: game_close = True our_snake(snake_block, snake_List) Your_score(Length_of_snake - 1) pygame.display.update() if x1 == foodx and y1 == foody: foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0 Length_of_snake += 1 clock.tick(snake_speed) pygame.quit() quit() gameLoop()
Что дальше?
Узнать об особенностях работы с Pygame и возможностях библиотеки можно в официальной документации. Углубиться в разработку и попробовать другие игры можно благодаря специализированным книгам:
- «Учим Python, делая крутые игры» Эла Свейгарта;
- «Beginning Game Development with Python and Pygame: From Novice to Professional» Уилла Макгугана;
- «Program Arcade Games: With Python and Pygame» Пола Винсента Крэйвена.
Больше интересного про код в нашем телеграм-канале. Подписывайтесь!
Как добавить pygame в visual studio
Pygame — это набор модулей (библиотек) языка программирования Python, предназначенный для написания компьютерных игр и мультимедиа-приложений. Pygame базируется на мультимедийной библиотеке SDL. Pygame-приложения могут работать под Android, Windows, Linux и др. ОС.
Установим python-pygame под Linux:
sudo apt-get install python-pygame
Проверим работоспособность Pygame в Python:
python Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) [GCC 7.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import pygame >>>
С Python ver. 2.7 работает
Проверим работоспособность Pygame в Python3:
python3 Python 3.6.7 (default, Oct 22 2018, 11:32:17) [GCC 8.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import pygame Traceback (most recent call last): File "", line 1, in ModuleNotFoundError: No module named 'pygame' >>> import pygame3
Установим Pygame, как рекомендуется на официальном сайте Pygame:
Сначала установим python3-pip:
sudo apt install python3-pip
python3 -m pip install -U pygame --user
Теперь проверим работоспособность Pygame в Python3:
python3 Python 3.6.7 (default, Oct 22 2018, 11:32:17) [GCC 8.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import pygame pygame 1.9.6 Hello from the pygame community. https://www.pygame.org/contribute.html >>>
Далее, на официальном сайте Pygame рекомендуется проверить работоспособность Pygame на примере:
python3 -m pygame.examples.aliens
Пакет Pygame поставляется с множеством примеров и если Вы устанавливали Pygame с ключём —user (имя пользователя в Linux системе), то все примеры Вы можете найти в папке ~/.local/lib/python3.6/site-packages/pygame/examples:
ls ~/.local/lib/python3.6/site-packages/pygame/examples aacircle.py fonty.py playmus.py aliens.py freetype_misc.py prevent_display_stretching.py arraydemo.py glcube.py __pycache__ audiocapture.py headless_no_windows_needed.py scaletest.py blend_fill.py __init__.py scrap_clipboard.py blit_blends.py liquid.py scroll.py camera.py macosx sound_array_demos.py chimp.py mask.py sound.py cursors.py midi.py stars.py data moveit.py testsprite.py dropevent.py oldalien.py textinput.py eventlist.py overlay.py vgrade.py fastevents.py pixelarray.py video.py
Запустим ещё что нибудь из этой папки:
python3 -m pygame.examples.stars
Для некоторых примеров понадобится установить дополнительные библиотеки. Так для демонстрации примера glcube, установим библиотеку PyOpenGL:
python3 -m pip install -U PyOpenGL --user
Cкачайте примеры из книги Al Sweigart Создание игр с Python и Pygame. Там Вы найдёте ещё несколько примеров:
~/Загрузки/PYTHON/makinggames$ ls *py blankpygame.py gemgem.py simulate.py tetromino.py catanimation.py inkspill.py slidepuzzle.py wormy.py drawing.py memorypuzzle_obfuscated.py squirrel.py flippy.py memorypuzzle.py starpusher.py fourinarow.py pentomino.py tetrominoforidiots.py
Запускаем игры в питоне:
python3 gemgem.py
Писать и редактировать игры на Python можно в редакторе IDLE:
sudo apt-get install idle-python3.6
Запуск редактора IDLE:
idle-python3.6
- Вы здесь:
- Главная
- Робототехника
- Создание игр на Python с Pygame
- Арифметические и унарные операции
- Коробка 3х3
- Пазлы
- Сапёр 2023
- Пятнадцать 2023
- Что ест уж 2023
- Игровое поле 2023
- Быки и коровы 2023
- Термины и определения
- Программа SOS
- Arduino Blink
- Китайский волчёк
- Головоломка Куб дяди Мити
- Головоломка Ханойская башня
- Головоломка Клёцки
- Головоломка Чайный сервиз
- Головоломка Тетраэдр
- Головоломка Что ест уж
- Головоломка косой Узел
- FreeCAD корпус для Orange Pi 3 LTS
- FreeCad корпус для Raspberry
- Решето Эратосфена
- ESP8266 tty терминал
- Blender отверстия
- Raspberry Pi Pico в Arduino IDE
- MicroPython на Raspberry Pi Pico
- Blink для ESP-C3-13-Kit на MicroPython
- MicroPython MicroREPL
- MicroPython WebREPL
- Драйвер для CH340 в Ubuntu 22.04
- MicroPython для ESP
- MicroPython и GPIO
- Робот на ESP8266 с датчиком HC-SR04
- Задача 001
- Esp8266 и HC-SR04
- ESP8266, драйвер MX1508 и сервопривод
- FORTH на Arduino
- Извлекаем слова из Flash памяти
- Матричная клавиатура
- Игра Flip-Flop
- Lines98 v2
- Логические операции
- Операции сравнения
- Esp8266 управление через web-интерфейс
- Игра 2048
- Битовые операции
- Игра PyNetWalk
- Энкодер
- Игра-головоломка Чайный сервиз v2
- Flip-flop 2x2x5 v2
- Игра Сапёр v3 на Python
- Игра Flip-Flop v3
- Lines98
- Микрофон
- Калькулятор v3
- Где ест уж v3
- Транзистор и фоторезистор.
- Датчик препятствий
- Игровое поле из Button
- Игра Memory
- Датчик инфракрасных импульсов
- Типы C++
- 3-D модель катушки ротора
- ESP32-C3 Wi-Fi точка доступа
- ESP32-C3 FTM
- ESP32-C3 Sigma-Delta модуляция
- Установка Arduino IDE для ESP32-C3
- ESP32-C3 analogReadMilliVolts
- ESP32-C3 Serial.print
- ledcWriteNote для ESP-C3-Kit
- Плата ESP-C3-32S Kit
- ШИМ в ESP-C3 Kit
- Программа Blink для ESP-C3 Kit
- Подключение ESP-C3-Kit к Arduino IDE
- Плата ESP-C3-13 Kit
- Калькулятор с tkinter
- Драйвер моторов MX1508
- Калькулятор на Arduino
- Raspberry Pi Pico Python SDK
- Raspberry Pi Pico C/C++ SDK
- Программирование на MMBASIC
- PicoMiteVGA
- Сервопривод и Ардуино
- Arduino машина с ИК управлением
- Двигатель постоянного тока
- ИК пульт ДУ
- Ультразвуковой дальномер HC-SR04
- АЦП и ШИМ в Arduino
- Крестики нолики v2.0
- Программа для музыкальной шкатулки
- Ханойские башни, игра
- Flip-Flop 4×4 и ООП
- AT90S2013 с внешним генератором
- Игра Кто быстрее
- Игра головоломка Peg
- Поход в пустыню
- Оригинальная игра Сапёр
- Программирование ATtiny861
- Программирование AT90S2013
- StringVar или ООП
- Клеточный автомат Конвея
- Flip-Flop 4×4 .
- ООП, after() функция задержки в tkinter
- Программирование AtTiny 13, 45, 85
- Игра-головоломка Где ест уж
- Игра-головоломка Чайный сервиз
- Пишем игру Flip-Flop v2
- Игра Быки и коровы на Python v2
- Крестики нолики
- Python сортировка
- Игра Красный или Синий?
- Индикатор 788BS
- Python Факториал
- Генератор псевдослучайных чисел
- Датчик температуры в ATtiny88
- Serial порт в ATtiny88
- Пишем библиотеку для MAX7219 и LED матрицы
- MAX7219 и Arduino
- Прерывания PCINT в Arduino
- Функция sleep() в Arduino для ATtiny88
- ATtiny88 datasheet на русском
- Фьюзы ATtiny88
- Arduino Fading and Blink
- Алгоритм Евклида. Нахождение НОД
- Python Числа Фибоначчи
- Python Tkinter игра Пикассо и Модильяни
- Ищем программатор для STM 32F030F4P6
- Python Tkinter игра Раскраска
- Пишем игру Быки и Коровы на Python
- Головоломка Ханойские башни на Python
- Головоломка Ханойские башни на Си
- Пишем игру Сапёр на Python
- Raspberry Pi Pico fading.py
- LCD МТ-16S2H и LiquidCrystal_74HC595
- EasyEDA для инженеров-электронщиков
- LCD МТ-16S2H и LiquidCrystalRus
- Raspberry Pi Pico и MicroPython
- Пишем игру пятнашки на Python
- Пишем игру на Python
- ESP8266 версии плат
- Регистр К155ИР13
- Linux или FreeBSD
- Триггеры
- Счетчик импульсов на 7493
- Счетчик импульсов на D-триггерах
- Цифровые индикаторы с общим катодом
- ATtiny88 программируем в Arduino IDE
- Конденсатор в кружке Робототехника
- Генератор на 555-м таймере
- Генератор НЧ на LM358
- Tkinter виджеты
- Pydoc в Python
- LM358 управление голосом
- Несимметричный мультивибратор
- QX5252F схема включения
- DC-DC uk преобразователь на QX5252
- DC-DC преобразователь на QX5252
- Python с Pygame обработка столкновений
- Логика в Python
- Сова на телевизор
- Транзисторы p-n-p и n-p-n
- IDLE
- Thonny установка и настройка
- Timer/Counter1 ATmega328
- Arduino IDE
- ATMEGA8
- Прерывания по таймерам в Arduino
- DC-DC преобразователь
- LED лампа светодиодная
- MOSFET
- Концепция музыкальной программы для Arduino
- Стробоскоп на 555-м таймере
- ШИМ на 555-м таймере
- ШИМ управление мощностью нагрузки
- Вентилятор для CPU и Arduino
- ATmega328P
- Храним константы в Flash-памяти программ
- Храним константы в EEPROM
- Параметры по умолчанию
- Цикл for in в Arduino
- Драйвер MAX7219 и светодиодная матрица 8х8
- WS2811 и RGB светодиод
- Assembler в Arduino
- Python Gtk игра Раскраска
- LGT8F328P в Arduino IDE
- Адрес i2c
- Музыкальная шкатулка
- LCD 1602 i2c и Arduino
- Корпус VESA для Orange Pi PC 2
- Blink для адресуемых RGB светодиодов
- ESP8266-01 Web-сервер
- ESP8266 прошивка AT-espressif
- Edragon, ESP firmware
- Esptool
- ESP8266 в Arduino IDE
- ESP8266-01 подключение USB-UART
- ESP8266-01 AT интерпретатор
- CuteCom монитор порта
- ESP8266-01 подключение
- SSD1306 IIC print()
- ATMega328 в Arduino без кварца
- Фьюзы в Arduino UNO
- Программирование Arduino Pro Mini
- L7805 стабилизатор напряжения
- MLX90614 — ИК термометр
- Датчик ИК импульсов
- Arduino-Hava Nagila
- Arduino-Финская полька
- Arduino-Гимн РФ
- Arduino-Григ В пещере Горного Короля
- heaptrack профилировщик памяти
- Консольная программа на Visual J#
- Консольная программа на C#
- Консольная программа на Visual Basic.NET
- Blender на русском
- Arduino Digispark ATTiny85
- cairo.Context object Деформации
- cairo.Context object Фигуры Лиссажу
- cairo.Context object Движение по криволинейной траектории
- cairo.Context object Пинг-понг по стенкам
- cairo.Context object Загружаем картинку
- cairo.Context object Трансформация прямоугольных координат
- cairo.Context object Штриховые линии
- cairo.Context object Шар с радиальной заливкой
- cairo.Context object Градиентная заливка
- cairo.Context object Сдвигаем и вращаем начало координат
- cairo.Context object Начало координат
- cairo.Context object Сглаживание контура изображения или шрифта
- cairo.Context object Углы соединения линий
- cairo.Context object Рисуем линии
- Gtk Drawin Area и GObject
- Gtk Drawin Area и PangoCairo
- Python Gtk окно с текстом
- Python Gtk игра Flip-Flop
- Python Gtk Крестики — нолики
- Anjuta Gtk Python Кнопка
- Visual Studio Code редактор
- Vala язык программирования
- Anjuta Gtk Python
- Glade Gtk Python сигналы
- Glade Gtk Python
- Python графическая библиотека Turtle
- Python графическая библиотека GTK
- Python графическая библиотека Tkinter
- Инкубатор
- Пример программы на Python с библиотекой Pygame
- Создание игр на Python с Pygame
- Классическая игра Жизнь
- Игра Жизнь на дисплее SSD1306 и Arduino
- SSD1306 Display
- Импульсный регулятор мощности на Ардуино
- Оператор switch case. Электронная игра на Arduino.
- Игра инверсия
- Android пишем программу на C++
- Цикл while. Алгоритм Евклида.
- Geany пишем программу на C++
- Как скомпилировать cpp под Linux
- Схема преобразователя напряжения на транзисторе
- Схема фонарика с 2-мя батарейками
- Author Login
- Карта сайта
© 2023 Системный интегратор
Уроки Python / Как установить модули в Visual Studio
Привет друзья! Сегодня мы с вами научимся устанавливать модули в Visual Studio. На этом уроке мы с вами: ✔ Установим модуль Django и Pillow (PIL) в Visual Studio для проекта на Python. ✔ Научимся создавать виртуальное окружение в Visual Studio для установки модулей Python. ✔ Телеграм — https://t.me/wiseplat ✔ Вступай в группу Вк — https://vk.com/wiseplat1 ✔ Подписывайся https://zen.yandex.ru/id/5e9a612424270736479fad54 ✔ Поддержи проект: https://wiseplat.org/donat #урокиpython #урокипитон #python #программирование #дляначинающих — Уроки от #OlegShpagin Ставь лайк, если тебе понравилось видео ►► Подписывайся на канал! visual studio,установка модуля,установка модуля python,пайтон,для начинающих,python с нуля уроки,питон с нуля,питон уроки,python уроки,visual studio модуль,visual studio установка модуля,visual studio работа с модулями,visual studio уроки,visual studio инсталяция модуля,visual studio настройка,настройка visual studio,пайчарм,уроки по питону,уроки питона,питон для начинающих,visual studio python,настройка visual studio python,django,pillow,python vs
Показать больше
Войдите , чтобы оставлять комментарии.
How to import pygame in visual studio code?
I use visual studio code for coding (python) and now I have to write a program with pygame for my project and I can’t import pygame in visual studio code (I can import it with the python script, it just can’t be import ed in visual studio code).
120k 25 25 gold badges 170 170 silver badges 304 304 bronze badges
asked Jan 26, 2019 at 8:15
39 1 1 gold badge 1 1 silver badge 2 2 bronze badges
in console of vscode use this command: pip install pygame
Jan 26, 2019 at 8:20
To elaborate on @Mehrdad’s suggestion: There’s a section on installing matplotlib in the Install and use packages section of the Visual Studio Code Get Started Tutorial. Something similar should work for pygame .
Jan 26, 2019 at 8:44
6 Answers 6
Here is the solution I tried:
From left bottom of your vs code you can find python environment, you can in the image I marked red:
after clicking in the red marked area you can see below option to select:
from the option select your desired one. Suppose first i was try selecting 2nd one but it was not working then i tried with the last one and it worked.
answered Jul 15, 2020 at 20:02
Md Nakibul Hassan Md Nakibul Hassan
2,726 1 1 gold badge 15 15 silver badges 19 19 bronze badges
- Open the terminal of Vscode.
- Type pip install pygame or pip3 install pygame .
- Import pygame and enjoy it.
answered Jun 23, 2019 at 14:31
Mohamadreza Kariminejad Mohamadreza Kariminejad
57 2 2 bronze badges
If it works in the console when you type ‘python yourscript.py’ but not in vs code, you should press ctrl+shift+p and use clic on Python select interpreter to switch to the right env. if it sstill doesn’t work then install the package by running ‘python -m pip install pygame’
answered Jul 17, 2019 at 9:36
305 2 2 silver badges 12 12 bronze badges
Another possible solution is the you could be using VS code in restricted mode. make sure you’re in a trusted browser on the app
answered May 31, 2022 at 19:00
kyle camuti kyle camuti
11 2 2 bronze badges
I have just typed this in VS Code and pygame is installed:
pip3 install pygame
answered May 9 at 9:31
Moh.Alkasem Moh.Alkasem
11 1 1 bronze badge
Valid and working pygame installation (at the time of posting), using Conda environments and python 3.10:
conda install -c conda-forge pygame
Using pip as others have suggested should work (in most cases), but if your aim is to have robust dependencies conda is probably a bit better.
Don’t forget to select the interpreter in vs code, it’ll throw errors or simply won’t show up if using pygame packages from other channels, such as this one