Найти в Дзене

Урок 32. Программа «Градусник» на Pygame

В этой программе мы создаём интерактивный графический градусник, который показывает температуру на экране. Игрок может изменять температуру клавишами на клавиатуре, а столбик градусника будет подниматься или опускаться, меняя цвет. Также программа выводит текстовую реакцию на температуру. import pygame import sys pygame.init() # Размеры окна WIDTH, HEIGHT = 400, 600 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Градусник") font = pygame.font.SysFont("arial", 24) # Диапазон температур MIN_TEMP = -10 MAX_TEMP = 40 temperature = 20 # начальное значение def get_color(temp): if temp < 0: return (0, 100, 255) # синий elif temp < 20: return (0, 200, 255) # голубой elif temp < 30: return (0, 200, 0) # зелёный else: return (255, 0, 0) # красный def get_reaction(temp): if temp < 0: return "Мороз!" elif temp <= 15: return "Прохладно." elif temp <= 25: return "Комфортно." else: return "Жарко!" clock = pygame.time.Clock() running = True while
Оглавление

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

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

Также программа выводит текстовую реакцию на температуру.

Программа

-2
-3
-4
import pygame
import sys
pygame.init()
# Размеры окна
WIDTH, HEIGHT = 400, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Градусник")
font = pygame.font.SysFont("arial", 24)
# Диапазон температур
MIN_TEMP = -10
MAX_TEMP = 40
temperature = 20 # начальное значение
def get_color(temp):
if temp < 0:
return (0, 100, 255) # синий
elif temp < 20:
return (0, 200, 255) # голубой
elif temp < 30:
return (0, 200, 0) # зелёный
else:
return (255, 0, 0) # красный
def get_reaction(temp):
if temp < 0:
return "Мороз!"
elif temp <= 15:
return "Прохладно."
elif temp <= 25:
return "Комфортно."
else:
return "Жарко!"
clock = pygame.time.Clock()
running = True
while running:
clock.tick(60)
screen.fill((240, 240, 240))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Управление стрелками
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
temperature += 1
if event.key == pygame.K_DOWN:
temperature -= 1
temperature = max(MIN_TEMP, min(MAX_TEMP, temperature))
# Рамка градусника
pygame.draw.rect(screen, (0, 0, 0), (170, 100, 60, 350), 3)
# Вычисляем уровень заполнения
percent = (temperature - MIN_TEMP) / (MAX_TEMP - MIN_TEMP)
fill_height = int(350 * percent)
# Цвет столбика
color = get_color(temperature)
# Заполнение
pygame.draw.rect(
screen,
color,
(173, 100 + 350 - fill_height, 54, fill_height)
)
# Текст температуры
temp_text = font.render(f"{temperature} °C", True, (0, 0, 0))
screen.blit(temp_text, (150, 470))
# Реакция
reaction_text = font.render(get_reaction(temperature), True, (0, 0, 0))
screen.blit(reaction_text, (130, 520))
pygame.display.flip()
pygame.quit()
sys.exit()

1. Подключение библиотек

import pygame
import sys

Здесь подключаются две библиотеки.

pygame — используется для создания графического окна, рисования фигур и обработки событий.

sys — позволяет корректно завершить программу.

2. Инициализация Pygame

pygame.init()

Эта команда запускает все внутренние модули Pygame:

  • графику
  • обработку событий
  • шрифты
  • таймер

Без неё программа работать не сможет работать.

3. Создание окна программы

WIDTH, HEIGHT = 400, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Градусник")

Здесь задаются параметры окна.

WIDTH и HEIGHT — ширина и высота окна.

В нашем случае:

  • ширина — 400 пикселей
  • высота — 600 пикселей

Команда set_caption() устанавливает заголовок окна.

4. Создание шрифта

font = pygame.font.SysFont("arial", 24)

Эта строка создаёт шрифт для отображения текста.

Параметры:

  • "arial" — название шрифта
  • 24 — размер шрифта

Этот шрифт будет использоваться для вывода температуры и текста реакции.

5. Диапазон температур

MIN_TEMP = -10
MAX_TEMP = 40

Мы задаём минимальную и максимальную температуру, которую может показывать градусник.

Это нужно, чтобы ограничить значения.

Например:

  • нельзя сделать температуру меньше −10
  • нельзя поднять её выше +40

6. Начальная температура

temperature = 20

При запуске программы градусник показывает 20 градусов.

7. Функция выбора цвета

def get_color(temp):

Эта функция определяет цвет столбика градусника.

if temp < 0:

Температура ниже нуля — синий цвет.

elif temp < 20:

От 0 до 19 градусов — голубой цвет.

elif temp < 30:

От 20 до 29 — зелёный цвет.

else:

30 градусов и выше — красный цвет.

Это делает градусник более наглядным.

8. Функция реакции на температуру

def get_reaction(temp):

Эта функция выводит текстовую оценку температуры.

Варианты реакции:

0 Мороз
0–15 Прохладно
16–25 Комфортно
выше 25 Жарко

9. Таймер программы

clock = pygame.time.Clock()

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

10. Основной цикл программы

while running:

Этот цикл называется игровым циклом.

Он выполняется постоянно, пока окно программы открыто.

11. Ограничение частоты кадров

clock.tick(60)

Программа обновляется 60 раз в секунду.

12. Очистка экрана

screen.fill((240, 240, 240))

Каждый кадр экран очищается.

Цвет (240,240,240) — светло-серый.

13. Обработка событий

for event in pygame.event.get():

Программа проверяет, что делает пользователь.

Закрытие окна

if event.type == pygame.QUIT:
running = False

Если пользователь нажал крестик — программа завершается.

14. Управление температурой

if event.type == pygame.KEYDOWN:

Срабатывает при нажатии клавиши.

Клавиша вверх

if event.key == pygame.K_UP:
temperature += 1

Температура увеличивается.

Клавиша вниз

if event.key == pygame.K_DOWN:
temperature -= 1

Температура уменьшается.

15. Ограничение температуры

temperature = max(MIN_TEMP, min(MAX_TEMP, temperature))

Эта строка не позволяет выйти за пределы диапазона.

16. Рисование рамки градусника

pygame.draw.rect(screen, (0, 0, 0), (170, 100, 60, 350), 3)

Здесь рисуется контур градусника.

Параметры:

  • 170 — положение по X
  • 100 — положение по Y
  • 60 — ширина
  • 350 — высота
  • 3 — толщина линии

17. Расчёт уровня столбика

percent = (temperature - MIN_TEMP) / (MAX_TEMP - MIN_TEMP)

Эта формула переводит температуру в процент заполнения.

Высота столбика

fill_height = int(350 * percent)

Чем выше температура — тем выше столбик.

18. Определение цвета

color = get_color(temperature)

Здесь вызывается функция, которая выбирает цвет.

19. Рисование столбика температуры

pygame.draw.rect(
screen,
color,
(173, 100 + 350 - fill_height, 54, fill_height)
)

Это заливка градусника.

Интересный момент:

Столбик рисуется снизу вверх, поэтому используется формула:

100 + 350 - fill_height

20. Отображение температуры

temp_text = font.render(f"{temperature} °C", True, (0, 0, 0))
screen.blit(temp_text, (150, 470))

На экране появляется надпись, например:

20 °C

21. Отображение реакции

reaction_text = font.render(get_reaction(temperature), True, (0, 0, 0))
screen.blit(reaction_text, (130, 520))

Показывается сообщение:

  • Мороз
  • Прохладно
  • Комфортно
  • Жарко

22. Обновление экрана

pygame.display.flip()

После всех изменений экран перерисовывается.

23. Завершение программы

pygame.quit()
sys.exit()

Программа корректно закрывает все модули.

Итог

В этой программе мы научились:

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

Такой проект — отличный первый шаг к созданию графических приложений и игр на Python.