Адрес: ул. Б. Очаковская 32 Москва Россия
Наши официальные канал и чат в telegram, группа в ВКонтакте

Бегущая синусоида на yabasic: анимация в текстовом режиме

Бегущая синусоида в консоли на yabasic: чистая математика, анимация, управление скоростью. Пример для уроков информатики

Скачать бесплатные программы для Yabasic на Windows, Linux, MacOS, PlayStation 2
Аватара пользователя
Anton
Site Admin
Сообщения: 259
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Тема касается GNU\Linux Бегущая синусоида на yabasic: анимация в текстовом режиме

Сообщение Anton »

Бегущая синусоида на yabasic: анимация в текстовом режиме
Простой, но наглядный пример: в консоли «бежит» настоящая синусоида. Каждая строка экрана — точка кривой, вычисленная через sin. Волна плавно движется сверху вниз. Отличный шаблон для уроков информатики: видно связь математики и программирования.

Что умеет:
  • Рисует настоящую синусоиду (не полоски!), по одной точке на строку.
  • Волна бежит за счёт изменения фазы.
  • + / - — скорость, Esc — выход.
Что важно знать:
  • Функции space$() в yabasic нет — отступ собирается циклом вручную (это официально, по мануалу).
  • sleep, pause, wait — синонимы, любой из них работает одинаково.
  • inkey$ без автоповтора: жать +/- нужно повторно.
  • Размер окна задаётся переменными width и height — подстройте под свой терминал.
Идеи для доработки:
  • Горизонтальная волна (бежит слева направо) — другой способ отрисовки.
  • Наложение двух волн с разными периодами (интерференция).
  • Заполнение под кривой другим символом.
  • Графический режим (open window + color) — цветная линия.
  • Смена символа по ходу волны (*, #, @).
Управление: + / - — скорость, Esc — выход.

Код: Выделить всё

// Настоящая бегущая синусоида в текстовом режиме
// Esc — выход, + / - — скорость

width  = 80
height = 24
center = 40
amp    = 30
phase  = 0
speed  = 0.04

while true
  clear screen

  for row = 0 to height - 1
    // Для каждой строки вычисляем x по синусу
    x = center + int(amp * sin(2 * pi * row / height + phase))

    if x < 0 then
      x = 0
    endif
    if x > width - 1 then
      x = width - 1
    endif

    // Собираем отступ из пробелов вручную (space$() в yabasic нет)
    pad$ = ""
    for i = 1 to x
      pad$ = pad$ + " "
    next i

    print pad$ + "*"
  next row

  phase = phase + 0.3

  sleep speed

  k$ = inkey$(0.001)
  if k$ = "esc" or k$ = chr$(27) then
    end
  elseif k$ = "+" then
    speed = speed * 0.8
  elseif k$ = "-" then
    speed = speed / 0.8
  endif
wend

end

У вас нет необходимых прав для просмотра вложений в этом сообщении.