Перейти к содержимому

Уроки · 34

Сколько угодно кружков

В уроке «Цикл for» количество кружков было зашито в код — ровно пять. Цикл там избавил нас от пяти одинаковых строк draw_circle, но число кружков всё равно было известно заранее, ещё когда мы писали код.

У for есть вторая, более важная сила: один и тот же код работает для любого количества, каким бы оно ни оказалось. Циклу всё равно, сколько раз повторяться — пять, один или десять: он просто проходит диапазон 0..COUNT, сколько бы чисел в нём ни было.

// Тело цикла не изменилось ни на строку — другим стало только COUNT.
for i in 0..COUNT {
// ...
}

Код при этом остаётся ровно тем же самым, что и в уроке «Цикл for» — тот же START_X, тот же STEP, то же тело цикла. Меняется только само число COUNT, и теперь оно приходит не захардкоженным, а из поля ниже.

Тот же цикл, что и в прошлом уроке, но количество кружков теперь можно менять полем ниже — код при этом не трогаем совсем, for сам подстраивается под новое число:

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