Интересные программы для среды KTurtle

KTurtle. Примеры кода с YouTube

Звезда

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

Формула определения угла поворота: 180 (разворот в противоположную сторону) минус 360 градусов деленные на удвоенное значение количества лучей.

сброс
 
иди 70,120
повтори 9 {
	вперёд 100
	направо 160
}
напиши 360/18
 
иди 200, 120
повтори 5 {
	вперёд 100
	направо 180-36
}
напиши 360/10
 
иди 330, 120
повтори 7 { # 
	вперёд 100
	направо 180-360/14
}
напиши 360/14
 
 
иди 50, 200
$n = спроси "Количество лучей (нечетное)"
напиши "Количество лучей: " + $n 
иди 200, 340
повтори $n { 
	вперёд 100
	направо 180-360/($n*2)
}

"Неправильная звезда"

Суть в том, что через определенное число повторов $x становится больше числа, из которого его вычитают. В результате первые пары линий образуют угол во внутрь, а последние наружу.

сброс
 
иди 150, 200
 
$x = 1
 
повтори 44 { 
	вперёд 100
	направо 120
	вперёд 100
        направо 18 - $x
	$x = $x + 1
}

Повторение фигур

Особенность: в результате получается большой многоугольник, соответствующий маленькому.

сброс
 
$l = 3 # стороны
$line = 40 # длина стороны
для $a = 1 до 10 {
	повтори $l/2 {
		повтори $a {
			повтори $l {
				вперёд $line
				налево 360/$l
			}
      вперёд $line
    }
		налево 360/$l
  }
}

KTurtle. Цветные сектора

Программа рисует круг из секторов разным цветом. Каждый сектор представляет собой множество одноцветных линий. В середине этого большого круга рисуется маленький белый. Его "заливка" является следствием большой толщины пера. Далее рисуются белые лучи случайной длины.

Поскольку рисуется семь секторов, а 360 не делится нацело на 7, то был выбран способ, когда 4 сектора состоят из 51-й закрашивающих линий, а 3 сектора - из 52. Таким образом получается в сумме 360 линий. На самом деле рисуется не 51 или 52 линии, а в два раза больше, т.к в этом случае меньше видимых белых пропусков между линиями, но для ускорения работы программы лучше в подпрограмме "сектор" поворачивать не на 0.5 градуса, а на 1. Количество повторов при этом должно быть $n, а не $n*2.

сброс
# закрашивает сектор цветом rgb, размером n
выучи сектор $r, $g, $b, $n {
	цвет_пера $r, $g, $b
	повтори $n*2 {
		иди 200,200
		направо 0.5
		вперёд 280	
	}
}
 
#круг с цветными секторами
направление случайное 0, 360
сектор 255, 0, 0, 51
сектор 255, 125, 0, 52
сектор 255, 255, 0, 51
сектор 0, 255, 0, 51
сектор 0, 125, 255, 52
сектор 0, 0, 255, 51 
сектор 200, 0, 255, 52
 
#круг с белой заливкой в центре
направление 0
иди 182,200
цвет_пера 255, 255, 255
толщина_пера 60
повтори 36 {
	вперёд 3
	направо 10
}
 
#случайные лучи из белого круга
толщина_пера 1.5
цвет_пера 255,255,255
направление случайное 20, 340
повтори 12 {
	иди 200,200
	вперёд случайное 100,200
	направо 30
}
 
иди 500, 500

Черепаха рисует цветные сектора (среда программирования KTurtle)

Как получить фигуры с заливкой

Фигуры с заливкой в KTurtleВ KTurtle нет команды, которая позволяла бы заливать замкнутую область, т.е. "рисовать" фигуру с заливкой. Чтобы все-таки получить такую фигуру можно придумать различные хитрости.

Если сильно увеличить толщину пера и задать спрайту движение вперед или назад, то легко можно получить прямоугольник или квадрат. Иные, "залитые" таким образом, фигуры получить намного сложнее.

Один из способов - это "нарисовать" прямоугольник, затем "зарисовать" лишние части белыми линиями.

Так, например, в примере ниже залитый треугольник получается следующим образом:

  1. Рисуется прямоугольник (увеличивается толщина пера, чертится небольшая линия).
  2. Цвет пера меняется на белый и начинают рисоваться треугольники. Каждый следующий увеличивается так, чтобы описывать предыдущий. Внутри белых треугольников остается цветная область в виде треугольника.

Аналогично треугольнику создается круг. Только здесь вместо треугольников, рисуются увеличивающиеся белые окружности.

Проблема в том, что таким образом нельзя создать две близко расположенные фигуры. Белые "рамки" будут замазывать предыдущую.

сброс
направление 90
иди 175, 185
толщина_пера 100
цвет_пера 75,155,50
вперёд 50
 
цвет_пера 255,255,255
толщина_пера 20	
$x = 130
$y = 240
$l = 140
повтори 5 {
  иди $x, $y
  повтори 3 {
    вперёд $l
    налево 120
  }
  $x = $x - 20
  $y = $y + 10
  $l = $l + 40
}
 
иди 195,310
толщина_пера 150
цвет_пера 0,125,255
вперёд 10
 
иди 325,75
толщина_пера 75
цвет_пера 255,225,50
вперёд 10
 
цвет_пера 255,255,255
толщина_пера 10	
$x = 330
$y = 115
$l = 6
повтори 5 {
  иди $x, $y
  повтори 36 {
    вперёд $l
    налево 10
  }
  $x = $x - 2
  $y = $y + 4
  $l = $l + 1
}

Прикрепленный файлРазмер
filling.turtle691 байт

Программа "Светофор"

Описание работы программы

  1. Черепаха рисует на холсте три окружности по вертикали.
  2. В каждой окружности рисует короткую толстую черную линию, похожую на квадрат с заливкой. Также прорисовывается ножка светофора.
  3. Пользователю программы пять раз задаются вопросы в случайном порядке: "На какой цвет надо стоять?", "На какой цвет надо приготовиться?", "На какой цвет надо идти?".
  4. В текстовом поле диалогового окна пользователь должен вписать ответ: "Красный", "Желтый" или "Зеленый".
  5. Если пользователь дал правильный ответ, то черепаха закрашивает на светофоре соответствующий квадрат этим цветом.
  6. Если пользователь дал неправильный ответ, то появляется диалоговое окно с сообщением об ошибке и правильным ответом.
  7. В конце на холсте выводится оценка ответов пользователя, которая зависит от количества правильных ответов (от 0 до 5).

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

Светофор

Светофор состоит из трех окружностей, отличающихся между собой только координатой y:

сброс
толщина_пера 3
иди 170, 100
повтори 36 {
  вперёд 5
  направо 10
}
иди 170, 159
повтори 36 {
  вперёд 5
  направо 10
}
иди 170, 218
повтори 36 {
  вперёд 5
  направо 10
}

Далее рисуем три квадрата в окружностях с помощью очень толстой линии:

толщина_пера 40
назад 1
иди 198, 156
назад 1
иди 198, 215
назад 1
иди 199, 253
толщина_пера 10
назад 100
В конце ножка светофора:
толщина_пера 10
назад 100

"Включение" и "выключение" светофора

Программа должна уметь менять цвет любого из трех черных квадратов на соответствующий ему красный, желтый или зеленый. Поскольку изменение цвета должно происходить в результате определенных действий пользователя и несколько раз, то лучше оформить "включение-выключение" определенных "ламп" с помощью функций:

выучи красный {
  иди 198, 98
  цвет_пера 255,0,0
  толщина_пера 40
  назад 1
  цвет_пера 0,0,0
  иди 198, 156
  назад 1
  иди 198, 215
  назад 1
}
 
выучи желтый {
  иди 198, 98
  толщина_пера 40
  назад 1
  цвет_пера 255,255,0
  иди 198, 156
  назад 1
  цвет_пера 0,0,0
  иди 198, 215
  назад 1
}
 
выучи зеленый {
  иди 198, 98
  толщина_пера 40
  назад 1
  иди 198, 156
  назад 1
  цвет_пера 0,255,0
  иди 198, 215
  назад 1
  цвет_пера 0,0,0
}

Обратите внимание, в каждой функции предусмотрено закрашивание черным ранее окрашенных в иные цвета квадратов.

Диалог с пользователем

$оценка = 0
повтори 5 {
  $число = случайное 0.5,3.5
  $число = округли $число
  если $число == 1 {
    $ответ = спроси "На какой цвет надо стоять?"
    если $ответ == "Красный" {
      красный
      $оценка = $оценка + 1
    }
    иначе {
      сообщение "Не правильно. Стоять нужно на красный цвет!"
    }
  }
  если $число == 2 {
    $ответ = спроси "На какой цвет надо приготовиться?"
    если $ответ == "Желтый" {
      желтый
      $оценка = $оценка + 1
    }
    иначе {
      сообщение "Не правильно. Приготовиться нужно на желтый цвет!"
    }
  }
  если $число == 3 {
    $ответ = спроси "На какой цвет надо идти?"
    если $ответ == "Зеленый" {
      зеленый
      $оценка = $оценка + 1
    }
    иначе {
      сообщение "Не правильно. Идти нужно на зеленый цвет!"
    }
  }
}  
 
иди 250,250
напиши "Ваша оценка: " + $оценка

В переменной $оценка храним количество правильных ответов пользователя.
Чтобы программ задавала вопросы в случайном порядке, используем переменную $число, в которой хранится случайное число от 0.5 до 3.5 округленное до целого, т.е. 1, 2 или 3.

Рисование цветка

Меняя значения переменных, можно получать различные цветки.

Смена цвета лепестков чередуется. Для этого используются флаги. Начальное значение флагов определяется в зависимости от значений переменных $r, $g, $b.

сброс
толщина_пера 10
$x = 200 # координаты центра цветка
$y = 200 # ...
$a = 50  # нач.угол для первого лепестка
$l = 3   # влияет на длину лепестка
$r = 125  # цвет
$g = 0 # ...
$b = 125  # ...
 
если $r < 128 { # установка флагов
  $fr = 1
} иначе {
  $fr = 0
}
если $g < 128 {
  $fg = 1
} иначе {
  $fg = 0
}
если $b < 128 {
  $fb = 1
} иначе {
  $fb = 0
}
 
выучи лепесток { # на самом деле поллепестка
  повтори 36 {
    направо 3
    вперёд $l
  }
}
 
выучи цвет $d { 
# значение $d влияет на контраст, 
# не должено быть больше 128
  если $fr == 1 {
    $r = $r + $d
    $fr = 0
  } иначе {
    $r = $r - $d
    $fr = 1
  }
  если $fg == 1 {
    $g = $g + $d
    $fg = 0
  } иначе {
    $g = $g - $d
    $fg = 1
  }
  если $fb == 1 {
    $b = $b + $d
    $fb = 0
  } иначе {
    $b = $b - $d
    $fb = 1
  }
  цвет_пера $r,$g,$b
}
 
#################################
повтори 6 {
  цвет 80
  иди $x,$y
  нпр $a
  лепесток
  нпр $a+180
  лепесток 
  $a = $a+60
}
 
цвет 120
нпр 0
$x = $x+$l*3
$y = $y-$l-1
иди $x,$y
толщина_пера $l*6
повтори 72 {
  вперёд 1
  налево 5
}
 
иди 0,0

программирование цветка в KTurtle

Прикрепленный файлРазмер
flower.turtle1.34 кб