Модель солнечной системы - QBasic

Узнай цену своей работы

Формулировка задачи:

Простой код, имитирующий движение планет солнечной системы.
Работает, но мигает страшно. Особенно если скомпилировать в exe и запустить под WinXP К сожалению, как это исправить на Qbasic я не знаю, современные ЯП графику выводят с двойной буферизацией, а тут всё рисуется сразу на экран.

Решение задачи: «Модель солнечной системы»

textual
Листинг программы
DECLARE SUB FLIP ()
DIM SHARED Act%, Viz%    '  For FLIP
'SCREEN 12
Act% = 1: Viz% = 0
SCREEN 9, , Act%, Viz%
 
WINDOW (0, 300)-(300, 0)
pi = 3.1415
time = 0
tick = 1 / 365
DO WHILE INKEY$ = ""
  CLS
 
  time = time + tick
 
  CIRCLE (150, 150), 4, 14
  PAINT (150, 150), 14, 14
  
  ' Mercurius
    x1 = 10 * COS(time * 2 * pi / 88 * 365) + 150
    y1 = 10 * SIN(time * 2 * pi / 88 * 365) + 150
    'color = darkyellow
    CIRCLE (x1, y1), 2, 6
     PAINT (x1, y1), 6, 6
    ' Venus
    x2 = 20 * COS(time * 2 * pi / 224 * 365) + 150
    y2 = 20 * SIN(time * 2 * pi / 224 * 365) + 150
    'color grey
    CIRCLE (x2, y2), 2, 8
    PAINT (x2, y2), 8, 8
    ' Earth
    x3 = 30 * COS(time * 2 * pi) + 150
    y3 = 30 * SIN(time * 2 * pi) + 150
    'color blue
    CIRCLE (x3, y3), 2, 3
    PAINT (x3, y3), 3, 3
    ' Mars
    x4 = 45 * COS(time * 2 * pi / 687 * 365) + 150
    y4 = 45 * SIN(time * 2 * pi / 687 * 365) + 150
    'color red
    CIRCLE (x4, y4), 2, 12
    PAINT (x4, y4), 12, 12
    ' Jupiter
    x5 = 70 * COS(time * 2 * pi / 4329 * 365) + 150
    y5 = 70 * SIN(time * 2 * pi / 4329 * 365) + 150
    'color orange
    CIRCLE (x5, y5), 3, 4
    PAINT (x5, y5), 4, 4
    ' Saturnus
    x6 = 90 * COS(time * 2 * pi / 10585 * 365) + 150
    y6 = 90 * SIN(time * 2 * pi / 10585 * 365) + 150
    'color white
    CIRCLE (x6, y6), 3, 15
    PAINT (x6, y6), 15, 15
    ' Uranus
    x7 = 110 * COS(time * 2 * pi / 30660 * 365) + 150
    y7 = 110 * SIN(time * 2 * pi / 30660 * 365) + 150
    'color darkgreen
    CIRCLE (x7, y7), 3, 7
    PAINT (x7, y7), 7, 7
    ' Neptunus
    x8 = 130 * COS(time * 2 * pi / 60152 * 365) + 150
    y8 = 130 * SIN(time * 2 * pi / 60152 * 365) + 150
    'color darkblue
    CIRCLE (x8, y8), 3, 1
  PAINT (x8, y8), 1, 1
   PCOPY Act%, Viz%
LOOP
 
 
 
END
 
SUB FLIP
  SWAP Act%, Viz%
    SCREEN , , , Viz%
    WAIT &H3DA, 8
    SCREEN , , Act%, Viz%
END SUB

Объяснение кода листинга программы

  1. Объявлены переменные:
    • Act% (действие)
    • Viz% (визуальный процент)
    • pi (пи)
    • time (время)
    • tick (шаг времени)
    • x1, y1 (координаты Меркурия)
    • x2, y2 (координаты Венеры)
    • x3, y3 (координаты Земли)
    • x4, y4 (координаты Марса)
    • x5, y5 (координаты Юпитера)
    • x6, y6 (координаты Сатурна)
    • x7, y7 (координаты Урана)
    • x8, y8 (координаты Нептуна)
  2. Код начинается с циклической команды DO WHILE INKEY$ = ``
    • CLS (очистка экрана)
    • Увеличение времени на шаг (tick)
    • Рисование круга и его заполнение для каждой планеты
    • Координаты планет рассчитываются с использованием времени и формул тригонометрии
    • Цвета планет задаются в виде комментариев
    • Завершение цикла при нажатии клавиши
  3. Объявлена подпрограмма FLIP
    • Действие и визуальный процент меняются местами
    • На экран выводится визуальный процент
    • Пауза в 8 миллисекунд
    • На экран выводится действие
  4. Код завершается командой END Обратите внимание, что это интерпретация кода на основе информации, предоставленной в вопросе. Если есть дополнительная информация или уточнения, пожалуйста, сообщите.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5
Похожие ответы