Уроки · 32
Цикл for
Нарисуем пять кружков в ряд посередине экрана. Можно просто вызвать
draw_circle пять раз, каждый раз со своим x:
draw_circle(60.0, screen_height() / 2.0, 40.0, YELLOW);draw_circle(220.0, screen_height() / 2.0, 40.0, YELLOW);draw_circle(380.0, screen_height() / 2.0, 40.0, YELLOW);draw_circle(540.0, screen_height() / 2.0, 40.0, YELLOW);draw_circle(700.0, screen_height() / 2.0, 40.0, YELLOW);Работает — но если кружков нужно не пять, а сто, придётся писать сто
почти одинаковых строк, отличающихся только числом. Для этого и
существует for: одна и та же строка выполняется несколько раз
подряд, а вместо конкретного числа каждый раз подставляется новое.
Что делает for
Заголовок раздела «Что делает for»for i in 0..5 { // здесь i по очереди равно 0, 1, 2, 3, 4}0..5 — это диапазон чисел от 0 до 5, не включая само 5 (та же идея,
что и в уроке «Случайная точка»: верхняя граница никогда не
достигается). for i in ... берёт из этого диапазона числа по одному
и каждый раз выполняет тело цикла заново — сначала с i = 0, потом с
i = 1, и так до i = 4. Пять чисел — тело цикла выполнится пять
раз.
Шаг между кружками
Заголовок раздела «Шаг между кружками»Раз i меняется от кружка к кружку, можно посчитать его x прямо по
i: каждый следующий кружок сдвигается на фиксированный шаг STEP
правее предыдущего, начиная от какой-то точки START_X:
// Начинаем от START_X и сдвигаемся на i шагов вправо.let x = START_X + STEP * (i as f32);Замени содержимое src/main.rs на это:
use macroquad::prelude::*;
// Сколько кружков рисуем.const COUNT: usize = 5;// Откуда начинаем и на сколько пикселей сдвигаем каждый следующий кружок.const START_X: f32 = 60.0;const STEP: f32 = 160.0;
#[macroquad::main("Цикл for")]async fn main() { loop { clear_background(BLACK);
// i по очереди принимает 0, 1, 2, 3, 4 — по разу на каждый кружок. for i in 0..COUNT { // Начинаем от START_X и сдвигаемся на i шагов вправо. let x = START_X + STEP * (i as f32); draw_circle(x, screen_height() / 2.0, 40.0, YELLOW); }
next_frame().await; }}Запусти как обычно:
cargo runПять жёлтых кружков встают ровным рядом посередине экрана — так же,
как если бы мы вручную выписали все пять draw_circle, только теперь
это одна строка draw_circle внутри for:
Что здесь происходит
Заголовок раздела «Что здесь происходит»for i in 0..COUNT— повторяет тело циклаCOUNTраз, даваяiпо очереди значения0, 1, 2, 3, 4.i as f32—iвнутриforцелое число (без дробной части, оно же просто счётчик), аSTEP—f32. Умножать их напрямую нельзя, разные типы — поэтомуiявно переводится вf32перед умножением (подробнее про целые числа иas— в уроке «Целые числа»).COUNT,START_XиSTEP—constвнеmain, как в уроке «Константы»: все три числа не меняются, пока программа работает.