Pygame как сделать окно во весь экран

Обновлено: 20.05.2024

pygame и положение окна

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы ( 1 ) 94731 / 64177 / 26122 Ответы с готовыми решениями:

Счетчик сворачивания окна PyGame
Требуется вывод на экран кол-во сворачивании окна pygame.

Как отобразить только содержимое окна, скрыв очертания, в PyGame?
Как отобразить содержимое окна, но не отображать/скрыть само окно с изпользованием pyGame? Нашел.

При импорте pygame пишет что нет модуля pygame.base
Устанавливаю для kivy.Всё есть (sython,gsstreamer,kivy,pyscripter,python) , а вот фраем. pygame не.

Положение окна
Как вывести GetSystemMetrics GetClientRect GetWindowRect в рабочие области окна и обновлять по мере.

1272 / 660 / 362

Решение

спасибо работает.
Где взять информацию по ключам для os.environ?

Добавлено через 2 минуты
на сколько я понимаю там можно еще менять что-то с помощью ключей типа 'SDL_. '

1272 / 660 / 362 Где взять информацию по ключам для os.environ? Спасибо то что надо. Почему я сам это нагуглить не мог не понимаю. 87844 / 49110 / 22898

Помощь в написании контрольных, курсовых и дипломных работ здесь.


Положение окна
Всем привет! У меня в ДЛЛ позиция меню определяется по координатам X и Y выглядит это как то.


Положение окна на экране
Всем доброго времени суток. Кто может подсказать как определить и программно изменить положение.

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

pygame fullscreen mode exit

I'm running this little program that loads images to the screen in fullscreen mode but once it loads the program will not exit by any key combination and I end up having to reset the computer to complete whatever else I was doing.


18.7k 4 4 gold badges 28 28 silver badges 44 44 bronze badges asked Mar 31 '18 at 20:31 Telarius Chromack Telarius Chromack 77 1 1 silver badge 6 6 bronze badges

3 Answers 3

pygame.QUIT is a constant value (an integer) that is used to check the type of an event. To uninitialize pygame, you have to call pygame.quit() (lowercase), but that actually doesn't quit your game but only uninitializes the loaded pygame modules. I think it's only needed to close the window if you've started your game in a tkinter based editor like IDLE.

To quit a game you can just break out of the while loop and let Python end the program as usual, or you can call sys.exit() .

Since you can't click on the 'x' button to close the window in fullscreen mode, you have to use a key like Esc .

answered Apr 1 '18 at 5:40


18.7k 4 4 gold badges 28 28 silver badges 44 44 bronze badges You can also toggle the display mode. Apr 1 '18 at 6:09 Great it worked For some reason alt f4 worked in no frame mode so I assumed it will work the same way in full screen. Apr 1 '18 at 7:13

There's a boolean, running , that's not being used.

Instead of this:

. consider doing this:

answered Mar 31 '18 at 20:38 touch my body touch my body 1,342 17 17 silver badges 31 31 bronze badges sorry it didnt work, i got stuck on the fullscreen and had to reboot Mar 31 '18 at 20:49 Mar 31 '18 at 21:24

First off I assume that you are using Windows, and that the version is not Windows Vista or earlier. If you are using a macOS, then I can't help you.

If none of those work, and you do end up getting stuck and having to reboot your computer, then this will help you.

These commands work for me when I got stuck in fullscreen:

  • Ctrl + Esc
  • Just pressing the ⊞ (window) key

These both do the same thing, it pushes the window that pygame is opened in all the way to the back, opening the windows sidebar and thus revealing the task bar. It won't actually stop running the program, so if you click on the logo that represents your output, it will just go back to being stuck in fullscreen.

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

Вкратце: при использовании одного и того же сценария Python и одного и того же монитора использование PyGame в полноэкранном режиме позволяет получать изображения двух разных размеров на двух разных компьютерах.

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

Изображения имеют одинаковый размер на обоих компьютерах, когда соотношение (ширина, высота) совпадает с соотношением сторон исходного разрешения моего монитора. Если я использую комбинацию, которой нет в этом списке, например, в моем случае (1250, 850), изображения на экране масштабируются по-разному для каждого компьютера. Компьютеры довольно похожи, но у них нет одинакового графического адаптера.

В документации PyGame мы можем найти

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

PyGame выбирает разные соответствия для каждого компьютера?

Adam Francey 24 Июл 2015 в 01:07

2 ответа

Лучший ответ

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

Как увеличить экран отображения в PyGame?

Я новичок в программировании на Python, и недавно я начал работать с модулем PyGame. Вот простой фрагмент кода для инициализации экрана дисплея. Мой вопрос: В настоящее время кнопка максимизации отключена, и я не могу изменить размер экрана. Как включить его для переключения между полноэкранным и обратно?
Благодаря

Или, как рекомендует руководство в большинстве ситуаций, вызывая pygame.display.set_mode() с тегом FULLSCREEN .

В вашем случае это будет выглядеть как

(Пожалуйста, используйте pygame.FULLSCREEN вместо FULLSCREEN , потому что при тестировании моей собственной системой FULLSCREEN просто увеличилось окно без установки разрешения, а pygame.FULLSCREEN соответствовало моему разрешению, а также максимизации.)

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

Чтобы изменить размер окна, добавьте параметр pygame.RESIZABLE при настройке режима. Вы можете установить режим поверхности экрана несколько раз, но вам может потребоваться выполнить pygame.display.quit() , за которым следует pygame.display.init()

Это позволит вам переключаться с максимизации на исходный размер

Вам нужно будет добавить полный экранный параметр в объявление дисплея следующим образом:

Полноэкранный режим Pygame

Я только начинал новую игру с pygame на python 3.6.5 на ПК с Windows 10, когда у меня был действительно сумасшедший глюк, который я не мог решить. Это мой код, я потом объясню свою проблему.

Лучший ответ:

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

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

Нажатие кнопки A ничего не делает, потому что ваш код не проверяет правильность:

Все правильно, и код ведет себя так же, как вы его написали.

Я запускаю код с изменением выше, и он правильно вышел, когда я нажал A

Я обнаружил много проблем с вашим кодом. Вот несколько решений:

Первая проблема заключается в том, что вы используете event.type где вам нужно использовать event.key .

Второй event.type необходимо изменить на event.key .

Вторая проблема заключается в том, что K_a должен иметь префикс с pygame. , как это:

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

Создание игр на Python 3 и Pygame: Часть 2

Во второй из пяти частей туториала, посвящённого созданию игр с помощью Python 3 и Pygame, мы рассмотрим класс TextObject , используемый для рендеринга текста на экране. Мы создадим основное окно, в том числе и фоновое изображение, а затем научимся отрисовывать объекты: кирпичи, мяч и ракетку.

Класс TextObject

Класс TextObject предназначен для отображения текста на экране. Можно сделать вывод, что с точки зрения дизайна он должен быть подклассом класса GameObject , потому что тоже является визуальным объектом и его тоже иногда нужно двигать. Но я не хотел вводить глубокую иерархию классов, при которой весь отображаемый Breakout текст оставался на экране неизменным.

Класс TextObject создаёт объект шрифта. Он рендерит текст на отдельную текстовую поверхность, которая затем копируется (рендерится) на основную поверхность. Интересный аспект TextObject заключается в том, что у него нет какого-то фиксированного текста. Он получает функцию text_func() , вызываемую каждый раз, когда он рендерится.

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

Создание основного окна

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

Затем выполняется основной цикл, который постоянно заполняет экран однотонным серым цветом и вызывает метод таймера tick() с частотой кадров.

Использование фонового изображения

Обычно однотонный цвет фона выглядит не очень интересно. Pygame очень хорошо работает с изображениями. Для Breakout я нашёл любопытную фотографию настоящего космоса, сделанную НАСА. Код очень прост. Сначала он перед основным циклом загружает фоновое изображение с помощью функции pygame.image.load() . Затем вместо того, чтобы заливать экран цветом, он выполняет блиттинг (копирование битов) изображения на экран в позицию (0,0). В результате на экране отображается изображение.


Отрисовка фигур

Pygame может рисовать всё, что угодно. В модуле pygame.draw есть функции для отрисовки следующих фигур:

  • прямоугольника (rect)
  • многоугольника (polygon)
  • круга (circle)
  • эллипса (ellipse)
  • дуги (arc)
  • отрезка (line)
  • отрезков (lines)
  • сглаженного отрезка (anti-aliased line)
  • сглаженных отрезков (anti-aliased lines)

Отрисовка кирпичей

Кирпичи — это просто прямоугольники. В Pygame есть функция pygame.draw.rect() , получающая поверхность, цвет и объект Rect (левую и верхнюю координату, ширину и высоту) и рендерящая прямоугольник. Если дополнительный параметр ширины больше нуля, то он отрисовывает контур. Если ширина равна нулю (значение по умолчанию), то рисует сплошной прямоугольник.

Стоит заметить, что класс Brick является подклассом GameObject и получает все его свойства, но также имеет и цвет, который обрабатывает самостоятельно (потому что могут существовать игровые объекты, имеющие несколько цветов). Поле special_effect мы пока рассматривать не будем.

Отрисовка мяча

Мяч в Breakout — это просто круг. В Pygame есть функция pygame.draw.circle() , получающая цвет, центр, радиус и дополнительный параметр ширины, который по умолчанию равен нулю. Как и в функции pygame.draw.rect() , если ширина равна нулю, то отрисовывается сплошной круг. Ball тоже является подклассом GameObject.

Так как мяч всегда движется (в отличие от кирпичей), он также имеет скорость, которая передаётся для обработки базовому классу GameObject . Класс Ball имеет небольшое отличие — параметры x и y обозначают его центр, а параметры x и y, передаваемые базовому классу GameObject являются верхним левым углом ограничивающего прямоугольника. Чтобы преобразовать центр в верхний левый угол, достаточно вычесть радиус.

Отрисовка ракетки

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

Заключение

В этой части мы узнали о классе TextObject и о том, как рендерить текст на экране. Также мы познакомились с тем, как рисовать объекты: кирпичи, мяч и ракетку.

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

Пишем платформер на Python, используя pygame

image


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

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

Что такое платформер?

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

Одними из моих любимых игр данного жанра являются «Super Mario Brothers» и «Super Meat Boy». Давайте попробуем создать нечто среднее между ними.

Самое — самое начало.

Внимание! Используем python ветки 2.х, с 3.х обнаружены проблемы запуска нижеописанных скриптов!

Наверное, не только игры, да и все приложения, использующие pygame начинаются примерно так:

Запустив этот код, мы увидим окно, залитое зелененьким цветом.



(Картинка кликабельна)

Ну что же, начало положено, идём дальше.

Уровень.

А как без него? Под словом «уровень» будем подразумевать ограниченную область виртуального двумерного пространства, заполненную всякой — всячиной, и по которой будет передвигаться наш персонаж.

Для построения уровня создадим двумерный массив m на n. Каждая ячейка (m,n) будет представлять из себя прямоугольник. Прямоугольник может в себе что-то содержать, а может и быть пустым. Мы в прямоугольниках будем рисовать платформы.

Добавим еще константы

Затем добавим объявление уровня в функцию main


И в основной цикл добавим следующее:


Т.е. Мы перебираем двумерный массив level, и, если находим символ «-», то по координатам (x * PLATFORM_WIDTH, y * PLATFORM_HEIGHT), где x,y — индекс в массиве level

Запустив, мы увидим следующее:


Персонаж

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

Создаём класс нашего героя.

Для удобства, будем держать нашего персонажа в отдельном файле player.py


Что тут интересного?
Начнём с того, что мы создаём новый класс, наследуясь от класса pygame.sprite.Sprite, тем самым наследую все характеристики спрайта.
Cпрайт — это движущееся растровое изображение. Имеет ряд полезных методов и свойств.

self.rect = Rect(x, y, WIDTH, HEIGHT), в этой строчке мы создаем фактические границы нашего персонажа, прямоугольник, по которому мы будем не только перемещать героя, но и проверять его на столкновения. Но об этом чуть ниже.

Метод update(self, left, right)) используется для описания поведения объекта. Переопределяет родительский update(*args) → None. Может вызываться в группах спрайтов.

Метод draw(self, screen) используется для вывода персонажа на экран. Далее мы уберем этот метод и будем использовать более интересный способ отображения героя.

Добавим нашего героя в основную часть программы.

Перед определением уровня добавим определение героя и переменные его перемещения.

В проверку событий добавим следующее:

Т.е. Если нажали на клавишу «лево», то идём влево. Если отпустили — останавливаемся. Так же с кнопкой «право»

Само передвижение вызывается так: (добавляем после перерисовки фона и платформ)

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

И в начало основного цикла добавим следующее:

Завис в воздухе

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

И так, работаем в файле player.py

Добавим еще констант

В метод _init_ добавляем строки:

Добавляем входной аргумент в метод update
def update(self, left, right, up):
И в начало метода добавляем:


И перед строчкой self.rect.x += self.xvel
Добавляем

И добавим в основную часть программы:
После строчки left = right = False
Добавим переменную up


В проверку событий добавим

И изменим вызов метода update, добавив новый аргумент up:
hero.update(left, right)
на


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

Встань обеими ногами на землю свою.

Как узнать, что мы на земле или другой твердой поверхности? Ответ очевиден — использовать проверку на пересечение, но для этого изменим создание платформ.

Создадим еще один файл blocks.py, и перенесем в него описание платформы.

Дальше создадим класс, наследуясь от pygame.sprite.Sprite

Тут нет ни чего нам уже не знакомого, идём дальше.

В основной файле произведем изменения, перед описанием массива level добавим

Группа спрайтов entities будем использовать для отображения всех элементов этой группы.
Массив platforms будем использовать для проверки на пересечение с платформой.


Т.е. создаём экземплр класса Platform, добавляем его в группу спрайтов entities и массив platforms. В entities, чтобы для каждого блока не писать логику отображения. В platforms добавили, чтобы потом проверить массив блоков на пересечение с игроком.

Дальше, весь код генерации уровня выносим из цикла.


Запустив, мы увидим, что ни чего не изменилось. Верно. Ведь мы не проверяем нашего героя на столкновения. Начнём это исправлять.

Работаем в файле player.py

Удаляем метод draw, он нам больше не нужен. И добавляем новый метод collide


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

Ну, и для того, что бы это всё происходило, необходимо вызывать этот метод.
Изменим число аргументов для метода update, теперь он выглядит так:

И не забудьте изменить его вызов в основном файле.


Т.е. передвинули героя вертикально, проверили на пересечение по вертикали, передвинули горизонтально, снова проверили на пересечение по горизонтали.

Вот, что получится, когда запустим.

Фу[у]! Движущийся прямоугольник — не красиво!

Давайте немного приукрасим нашего МариоБоя.

Начнем с платформ. Для этого в файле blocks.py сделаем небольшие изменения.

Заменим заливку цветом на картинку, для этого строчку
self.image.fill(Color(PLATFORM_COLOR))
Заменим на


Мы загружаем картинку вместо сплошного цвета. Разумеется, файл «platform.jpg» должен находиться в папке «blocks», которая должна располагаться в каталоге с исходными кодами.

Вот, что получилось


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

Сперва добавим в блок констант.

Тут, думаю, понятно, анимация разных действий героя.

Теперь добавим следующее в метод __init__


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

Осталось в нужный момент показать нужную анимацию.

Добавим смену анимаций в метод update.

Больше, нужно больше места

Ограничение в размере окна мы преодолеем созданием динамической камеры.

Для этого создадим класс Camera

Далее, добавим начальное конфигурирование камеры

Создадим экземпляр камеры, добавим перед основным циклом:

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

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

Меньший прямоугольник центрируется относительно главного персонажа(метод update), и все объекты рисуются в меньшем прямоугольнике (метод apply), за счет чего создаётся впечатление движения камеры.

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


И перед ней добавим


Теперь можем изменить уровень.


Вот, собственно, и результат

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

upd pygame можно скачать отсюда, спасибо, Chris_Griffin за замечание
upd1 Вторая часть

Pygame и разрешение экрана

Помощь в написании контрольных, курсовых и дипломных работ здесь.

94731 / 64177 / 26122 Ответы с готовыми решениями:

Постоянное перемещение персонажа из одного угла экрана в другой (pygame)
import pygame window=pygame.display.set_mode((400,400)) pygame.display.set_caption('hello py.

Pygame: как сделать рабочее меню для игры с функциями настройки экрана
Добрый день. Недавно наткнулся на библиотеку Pygame и только начал её изучать. Мне бы хотелось.

При импорте pygame пишет что нет модуля pygame.base
Устанавливаю для kivy.Всё есть (sython,gsstreamer,kivy,pyscripter,python) , а вот фраем. pygame не.

Pygame ошибка module ‘pygame’ has no ‘init’ member
Всем здравствуйте. Недавно начал работать с VS code и выдает такая ошибка. Прикрепляю полностью.

1272 / 660 / 362 set_mode((1920, 1080))

Тут указывается размер области отрисовки, а у окно есть еще рамка, можно сделать окно на весь экран

это я понимаю. Если запустить с ключом FULLSCREEN все равно окно будет больше экрана. Оно по центру выравнивается с экранам, а края не видно 87844 / 49110 / 22898

Помощь в написании контрольных, курсовых и дипломных работ здесь.


pygame.error: cannot convert without pygame.display initialized
Только начал изучать спрайты Выдаёт ошибку: Traceback (most recent call last): File.


Как определить разрешение экрана?
Доброго времени суток. Есть какая-нибудь функция, которая возвращает разрешение экрана?

Почему разрешение экрана планшета на 1280 x600 , а разрешение экрана проектора 854 x 480?
Привет всем, вчера я посмотрел такой плашет с проектором, разрешение экрана планшета на 1280 x600.


Разрешение экрана монитора и разрешение экрана браузера
Почему разрешение экрана монитора и разрешение экрана браузера отличаются? В настройках виндовс.

Разрешение приложения - чтобы приложение подстраивалось под разрешение экрана
Можно ли средствами c++ bulder сделать так, чтобы разрешение приложения подстраивалось под.

Воспроизведение видео в окне Pygame

Помощь в написании контрольных, курсовых и дипломных работ здесь.

94731 / 64177 / 26122 Ответы с готовыми решениями:

Видео в pygame
Здравствуйте!=) import pygame from time import sleep pygame.init() running = True screen =.

Воспроизведение видео с Ютуба в окне с Tkintera
Задача воспроизвести потоковое видео в окне Tkinter с ютуба. Как это можно сделать. Если нет.

Воспроизведение видео в окне с известным Handle
Всем привет. Необходимо вывести видео в окно, handle которого известен. Насколько я понимаю, есть.


Работа с видео и PyGame
Хочу выводить на экран видео с помощью pygame и указывать нужный размер, но при указание размера.

1272 / 660 / 362 в pygame отсутствует модуль pygame.movie

Да, этот модуль убрали из pygame, можно попробовать так

Спасибо за наметку на копания. По крайней мере, видео работает. Но. Изначально у меня работало окно PyGame в полноэкранном режиме, в нем крутилась графика из картинок. При переходе к предложенному коду, полноэкранный режим отключился, открылось окошко по размеру видео, с рамкой и заголовком. После проигрывания видео, вставил вывод полноэкранной картинки как ранее, оно вывелось в окошко видеоплейера по его размерам. Попробовал подсунуть видео (короткое, на 40Мб) разрешением 1920х1080, по размеру полноэкранного режима, но во первых, при старте видео все равно возникла рамка окна плейера, т.е. полноценный полноэкранный режим пропал, а во вторых видео отыгралось на диких тормозах. Кручу к слову, на Raspbery Pi 3, но для нее в обычном режиме такое видео - не проблема.

Продолжу рыть по этой теме, но может быть, есть готовые мысли? Спасибо!

Добавлено через 1 час 51 минуту
В общем, покурил мануал на MoviePy, вещь сильная, но заточена на манипуляции с видеоклипами - редактирование, создание, создание эффектов, экспорт и т.п. Проигрывание видео в ней посредством clip.preview() - неходовая часть для создания превью, возможностей контроля процессом практически нет, в результате мне видимо не подходит.

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

Читайте также: