Уроки · 34
Сколько угодно кружков
В уроке «Цикл for» количество кружков было зашито в код —
ровно пять. Цикл там избавил нас от пяти одинаковых строк draw_circle,
но число кружков всё равно было известно заранее, ещё когда мы писали
код.
У for есть вторая, более важная сила: один и тот же код работает для
любого количества, каким бы оно ни оказалось. Циклу всё равно,
сколько раз повторяться — пять, один или десять: он просто проходит
диапазон 0..COUNT, сколько бы чисел в нём ни было.
// Тело цикла не изменилось ни на строку — другим стало только COUNT.for i in 0..COUNT { // ...}Код при этом остаётся ровно тем же самым, что и в уроке «Цикл
for» — тот же START_X, тот же STEP, то же тело
цикла. Меняется только само число COUNT, и теперь оно приходит не
захардкоженным, а из поля ниже.
Попробуй сам
Заголовок раздела «Попробуй сам»Тот же цикл, что и в прошлом уроке, но количество кружков теперь
можно менять полем ниже — код при этом не трогаем совсем, for сам подстраивается под новое число:
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ограничен шестнадцатью — дальше при таком фиксированном шаге кружки начали бы вылезать за правый край экрана демки.