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

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

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

Простой код, имитирующий движение планет солнечной системы.
Листинг программы
  1. CLS
  2. SCREEN 12
  3. WINDOW (0, 300)-(300, 0)
  4. pi = 3.1415
  5. time = 0
  6. tick = 1 / 365
  7. DO WHILE INKEY$ = ""
  8. CLS
  9. time = time + tick
  10. CIRCLE (150, 150), 4, 14
  11. PAINT (150, 150), 14, 14
  12. ' Mercurius
  13. x1 = 10 * COS(time * 2 * pi / 88 * 365) + 150
  14. y1 = 10 * SIN(time * 2 * pi / 88 * 365) + 150
  15. 'color = darkyellow
  16. CIRCLE (x1, y1), 2, 6
  17. PAINT (x1, y1), 6, 6
  18. ' Venus
  19. x2 = 20 * COS(time * 2 * pi / 224 * 365) + 150
  20. y2 = 20 * SIN(time * 2 * pi / 224 * 365) + 150
  21. 'color grey
  22. CIRCLE (x2, y2), 2, 8
  23. PAINT (x2, y2), 8, 8
  24. ' Earth
  25. x3 = 30 * COS(time * 2 * pi) + 150
  26. y3 = 30 * SIN(time * 2 * pi) + 150
  27. 'color blue
  28. CIRCLE (x3, y3), 2, 3
  29. PAINT (x3, y3), 3, 3
  30. ' Mars
  31. x4 = 45 * COS(time * 2 * pi / 687 * 365) + 150
  32. y4 = 45 * SIN(time * 2 * pi / 687 * 365) + 150
  33. 'color red
  34. CIRCLE (x4, y4), 2, 12
  35. PAINT (x4, y4), 12, 12
  36. ' Jupiter
  37. x5 = 70 * COS(time * 2 * pi / 4329 * 365) + 150
  38. y5 = 70 * SIN(time * 2 * pi / 4329 * 365) + 150
  39. 'color orange
  40. CIRCLE (x5, y5), 3, 4
  41. PAINT (x5, y5), 4, 4
  42. ' Saturnus
  43. x6 = 90 * COS(time * 2 * pi / 10585 * 365) + 150
  44. y6 = 90 * SIN(time * 2 * pi / 10585 * 365) + 150
  45. 'color white
  46. CIRCLE (x6, y6), 3, 15
  47. PAINT (x6, y6), 15, 15
  48. ' Uranus
  49. x7 = 110 * COS(time * 2 * pi / 30660 * 365) + 150
  50. y7 = 110 * SIN(time * 2 * pi / 30660 * 365) + 150
  51. 'color darkgreen
  52. CIRCLE (x7, y7), 3, 7
  53. PAINT (x7, y7), 7, 7
  54. ' Neptunus
  55. x8 = 130 * COS(time * 2 * pi / 60152 * 365) + 150
  56. y8 = 130 * SIN(time * 2 * pi / 60152 * 365) + 150
  57. 'color darkblue
  58. CIRCLE (x8, y8), 3, 1
  59. PAINT (x8, y8), 1, 1
  60. LOOP
  61. END
Работает, но мигает страшно. Особенно если скомпилировать в exe и запустить под WinXP К сожалению, как это исправить на Qbasic я не знаю, современные ЯП графику выводят с двойной буферизацией, а тут всё рисуется сразу на экран.

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

textual
Листинг программы
  1. DECLARE SUB FLIP ()
  2. DIM SHARED Act%, Viz%    '  For FLIP
  3. 'SCREEN 12
  4. Act% = 1: Viz% = 0
  5. SCREEN 9, , Act%, Viz%
  6.  
  7. WINDOW (0, 300)-(300, 0)
  8. pi = 3.1415
  9. time = 0
  10. tick = 1 / 365
  11. DO WHILE INKEY$ = ""
  12.   CLS
  13.  
  14.   time = time + tick
  15.  
  16.   CIRCLE (150, 150), 4, 14
  17.   PAINT (150, 150), 14, 14
  18.  
  19.   ' Mercurius
  20.     x1 = 10 * COS(time * 2 * pi / 88 * 365) + 150
  21.     y1 = 10 * SIN(time * 2 * pi / 88 * 365) + 150
  22.     'color = darkyellow
  23.     CIRCLE (x1, y1), 2, 6
  24.      PAINT (x1, y1), 6, 6
  25.     ' Venus
  26.     x2 = 20 * COS(time * 2 * pi / 224 * 365) + 150
  27.     y2 = 20 * SIN(time * 2 * pi / 224 * 365) + 150
  28.     'color grey
  29.     CIRCLE (x2, y2), 2, 8
  30.     PAINT (x2, y2), 8, 8
  31.     ' Earth
  32.     x3 = 30 * COS(time * 2 * pi) + 150
  33.     y3 = 30 * SIN(time * 2 * pi) + 150
  34.     'color blue
  35.     CIRCLE (x3, y3), 2, 3
  36.     PAINT (x3, y3), 3, 3
  37.     ' Mars
  38.     x4 = 45 * COS(time * 2 * pi / 687 * 365) + 150
  39.     y4 = 45 * SIN(time * 2 * pi / 687 * 365) + 150
  40.     'color red
  41.     CIRCLE (x4, y4), 2, 12
  42.     PAINT (x4, y4), 12, 12
  43.     ' Jupiter
  44.     x5 = 70 * COS(time * 2 * pi / 4329 * 365) + 150
  45.     y5 = 70 * SIN(time * 2 * pi / 4329 * 365) + 150
  46.     'color orange
  47.     CIRCLE (x5, y5), 3, 4
  48.     PAINT (x5, y5), 4, 4
  49.     ' Saturnus
  50.     x6 = 90 * COS(time * 2 * pi / 10585 * 365) + 150
  51.     y6 = 90 * SIN(time * 2 * pi / 10585 * 365) + 150
  52.     'color white
  53.     CIRCLE (x6, y6), 3, 15
  54.     PAINT (x6, y6), 15, 15
  55.     ' Uranus
  56.     x7 = 110 * COS(time * 2 * pi / 30660 * 365) + 150
  57.     y7 = 110 * SIN(time * 2 * pi / 30660 * 365) + 150
  58.     'color darkgreen
  59.     CIRCLE (x7, y7), 3, 7
  60.     PAINT (x7, y7), 7, 7
  61.     ' Neptunus
  62.     x8 = 130 * COS(time * 2 * pi / 60152 * 365) + 150
  63.     y8 = 130 * SIN(time * 2 * pi / 60152 * 365) + 150
  64.     'color darkblue
  65.     CIRCLE (x8, y8), 3, 1
  66.   PAINT (x8, y8), 1, 1
  67.    PCOPY Act%, Viz%
  68. LOOP
  69.  
  70.  
  71.  
  72. END
  73.  
  74. SUB FLIP
  75.   SWAP Act%, Viz%
  76.     SCREEN , , , Viz%
  77.     WAIT &H3DA, 8
  78.     SCREEN , , Act%, Viz%
  79. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы