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