Модель солнечной системы - QBasic
Формулировка задачи:
Простой код, имитирующий движение планет солнечной системы.
Работает, но мигает страшно. Особенно если скомпилировать в exe и запустить под WinXP
К сожалению, как это исправить на Qbasic я не знаю, современные ЯП графику выводят с двойной буферизацией, а тут всё рисуется сразу на экран.
Листинг программы
- CLS
- SCREEN 12
- 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
- LOOP
- END
Решение задачи: «Модель солнечной системы»
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 Обратите внимание, что это интерпретация кода на основе информации, предоставленной в вопросе. Если есть дополнительная информация или уточнения, пожалуйста, сообщите.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д