Нужна помощь с Turtle (Java Script)
У меня в данный момент есть данная картинка, которая не совпадает с оригиналом, если кто-то разбирается в этом, прошу помочь.
а вот и код:
let s = 0;
let a = 120;
let fo = 80;
for (let index = 0; index < 99; index++) {
if (s < 33) {
colour(255, 0, 0, 1);
} else if (s < 63) {
colour(0, 255, 0, 1);
} else if (s < 93) {
colour(0, 0, 255, 1);
}
left(a + 1.5);
forward((fo += 5));
s = (s + 1) % 99;
}
Ответы (1 шт):
Я в последний раз попробую вам помочь, хотя уже несколько раз вам давали примеры циклической смены цвета в некоем заданном диапазоне цветов. Похоже, у вас проблемы с пониманием такой базовой операции, как "деление по модулю". Эта операция возвращает остаток от деления одного числа на другое. Так, например, такой код:
for (let i = 0; i < 10; i++) {
console.log(i, i % 5);
}
выведет вам в консоли отладчика браузера такую последовательность:
0 0
1 1
2 2
3 3
4 4
5 0
6 1
7 2
8 3
9 4
То есть при последовательном увеличении значения переменной i остаток от её деления на 5 циклически изменяется от 0 до 4, это, надеюсь, понятно?
То, что вы делаете сейчас с помощью строки
s = (s + 1) % 99;
это получение остатка от деления номера итерации на 99 (не совсем понятно, зачем вам в данном случае отдельная переменная s, ну да ладно). Этот остаток циклически изменяется от 0 до 98. Совместно с конструкцией
if (s < 33) {
colour(255, 0, 0, 1);
} else if (s < 63) {
colour(0, 255, 0, 1);
} else if (s < 93) {
colour(0, 0, 255, 1);
}
вы меняете цвет пера таким образом:
- на итерациях 1..33, 100..132, 199..231 и так далее на красный;
- на итерациях 34..64, 133..163, 232..262 и так далее на зелёный;
- на итерациях 65..93, 164..192, 263..291 и так далее на синий;
- на итерациях 94..99, 193..198, 292..297 и так далее цвет пера не меняется.
Кстати, последний if здесь лишний, вполне достаточно такой конструкции:
if (...) {
...
} else if (...) {
...
} else {
...
}
То есть у вас получается такая картина:
- 33 красных отрезка;
- 31 зелёный отрезок;
- 35 синих отрезков.
И далее по кругу.
Вам же надо менять цвет после каждого отрезка, то есть использовать остаток от деления номера итерации на 3. В примерах кода, которые вам давали ранее, цвета объявлялись как элементы массива:
const colors = [
'red',
'green',
'blue'
];
и далее цвет выбирался как элемент массива с соответствующим номером от 0 до 2:
color(colors[i % 3]);
(нумерация элементов массива в JavaScript начинается с нуля).
Если это было вам непонятно, надо было задавать в комментариях к ответам уточняющие вопросы, здесь за это не бьют. Если же использовать вместо такой техники конструкцию if ... else if ... else, что тоже вполне допустимо, то выглядеть это будет как-то так:
let c = index % 3;
if (c == 0) {
color(255, 0, 0);
} else if (c == 1) {
color(0, 255, 0);
} else {
color(0, 0, 255);
}
Кстати, переменная i в циклах называется так ещё и от слова iteration, а не только от слова index, и в данном случае название index выбрано не очень удачно.

