今天我们用Python来模拟一下太阳系行星运动轨迹玩玩~

先上成品图(运行效果含音乐的呦)

想要实现这样的效果并不难

1、准备材料

首先我们需要准备这样一些材料

宇宙背景图

背景透明的行星图

2:编写代码

代码分块详解

导入需要的模块

import pygame
import sys
import math
from pygame.locals import *

定义窗口大小、标题名称、字体设置、创建时钟

size = width, height = 1206, 780
screen = pygame.display.set_mode(size)
pygame.display.set_caption("太阳系行星运转示意图")
myfont = pygame.font.Font(None,60)
clock = pygame.time.Clock()

宇宙背景初始化

background = pygame.image.load(r" 这里填背景图片本地路径 ")screen.blit(background, (0, 0))

右侧文字及星球显示

    textImage = myfont.render("Solar System", True, (255, 255, 0))           # 太阳系screen.blit(textImage, (100, 100))my_font = pygame.font.SysFont("arial", 15)text_surface = my_font.render("Sun", True, (255, 0, 0), (0, 0, 0))       # 太阳screen.blit(text_surface, (1020, 30))sun = pygame.image.load(r"F:\solar-system\image\sun_bg.png")screen.blit(pygame.transform.scale(sun, (27, 27)), (1090, 25))my_font = pygame.font.SysFont("arial", 15)text_surface = my_font.render("Mercury", True, (255, 0, 0), (0, 0, 0))   # 水星screen.blit(text_surface, (1020, 70))my_font = pygame.font.SysFont("arial", 15)Mercury = pygame.image.load(r"F:\solar-system\image\mercury_bg.png")screen.blit(pygame.transform.scale(Mercury, (27, 27)), (1090, 65))text_surface = my_font.render("Venus", True, (255, 0, 0), (0, 0, 0))     # 金星screen.blit(text_surface, (1020, 110))my_font = pygame.font.SysFont("arial", 15)spark = pygame.image.load(r"F:\solar-system\image\spark_bg.png")screen.blit(pygame.transform.scale(spark, (27, 27)), (1090, 105))text_surface = my_font.render("Earth", True, (255, 0, 0), (0, 0, 0))     # 地球screen.blit(text_surface, (1020, 150))my_font = pygame.font.SysFont("arial", 15)earth = pygame.image.load(r"F:\solar-system\image\earth_min_bg.png")screen.blit(pygame.transform.scale(earth, (27, 27)), (1090, 145))text_surface = my_font.render("Moon", True, (255, 0, 0), (0, 0, 0))      # 月球screen.blit(text_surface, (1020, 190))my_font = pygame.font.SysFont("arial", 15)moon = pygame.image.load(r"F:\solar-system\image\mercury_bg.png")screen.blit(pygame.transform.scale(moon, (27, 27)), (1090, 185))text_surface = my_font.render("Mars", True, (255, 0, 0), (0, 0, 0))      # 火星screen.blit(text_surface, (1020, 230))Mars = pygame.image.load(r"F:\solar-system\image\venus_bg.png")screen.blit(pygame.transform.scale(Mars, (27, 27)), (1090, 225))my_font = pygame.font.SysFont("arial", 15)text_surface = my_font.render("Jupiter", True, (255, 0, 0), (0, 0, 0))   # 木星screen.blit(text_surface, (1020, 270))Jupiter = pygame.image.load(r"F:\solar-system\image\jupiter_min_bg.png")screen.blit(pygame.transform.scale(Jupiter, (27, 27)), (1090, 265))my_font = pygame.font.SysFont("arial", 15)text_surface = my_font.render("Saturn", True, (255, 0, 0), (0, 0, 0))    # 土星screen.blit(text_surface, (1020, 300))Saturn = pygame.image.load(r"F:\solar-system\image\saturn_bg.png")screen.blit(pygame.transform.scale(Saturn, (30, 30)), (1090, 305))my_font = pygame.font.SysFont("arial", 15)text_surface = my_font.render("Uranus", True, (255, 0, 0), (0, 0, 0))    # 天王星screen.blit(text_surface, (1020, 340))Uranus = pygame.image.load(r"F:\solar-system\image\uranus_bg.png")screen.blit(pygame.transform.scale(Uranus, (27, 27)), (1090, 345))my_font = pygame.font.SysFont("arial", 15)text_surface = my_font.render("Neptune", True, (255, 0, 0), (0, 0, 0))   # 海王星screen.blit(text_surface, (1020, 380))Neptune = pygame.image.load(r"F:\solar-system\image\neptune_bg.png")screen.blit(pygame.transform.scale(Neptune, (27, 27)), (1090, 385))

设定太阳初始位置

sun = pygame.image.load(r"F:/solar-system/image/sun_bg.png")
screen.blit(pygame.transform.scale(sun, (170, 170)), (527,307))

实现各个星球绕着太阳转

    # 水星roll_3 += 0.077  # 每帧公转pipos_3_x = int(size[0] // 2 + size[1] // 8 * math.sin(roll_3))pos_3_y = int(size[1] // 2 + size[1] // 8 * math.cos(roll_3))mercury = pygame.image.load(r"F:\solar-system\image\mercury_bg.png")screen.blit(pygame.transform.scale(mercury, (8, 8)), (pos_3_x, pos_3_y))# 金星roll_2 += 0.069  # 每帧公转pipos_2_x = int(size[0] // 2 + size[1] // 7 * math.sin(roll_2))pos_2_y = int(size[1] // 2 + size[1] // 7 * math.cos(roll_2))venus = pygame.image.load(r"F:\solar-system\image\venus_bg.png")screen.blit(pygame.transform.scale(venus, (10, 10)), (pos_2_x, pos_2_y))# 地球roll_e += 0.060  # 每帧公转pipos_e_x = int(size[0] // 2 + size[1] // 6 * math.sin(roll_e))pos_e_y = int(size[1] // 2 + size[1] // 6 * math.cos(roll_e))earth = pygame.image.load(r"F:\solar-system\image\earth_min_bg.png")screen.blit(pygame.transform.scale(earth, (15, 15)), (pos_e_x, pos_e_y))# 火星roll_4 += 0.053  # 每帧公转pipos_4_x = int(size[0] // 2 + size[1] // 5 * math.sin(roll_4))pos_4_y = int(size[1] // 2 + size[1] // 5 * math.cos(roll_4))venus = pygame.image.load(r"F:\solar-system\image\venus_bg.png")screen.blit(pygame.transform.scale(venus, (13, 13)), (pos_4_x, pos_4_y))# 木星roll_5 += 0.045  # 每帧公转pipos_5_x = int(size[0] // 2 + size[1] // 4 * math.sin(roll_5))pos_5_y = int(size[1] // 2 + size[1] // 4 * math.cos(roll_5))mouth = pygame.image.load(r"F:\solar-system\image\jupiter_bg.png")screen.blit(pygame.transform.scale(mouth, (70, 70)), (pos_5_x, pos_5_y))# 土星roll_6 += 0.037  # 每帧公转pipos_6_x = int(size[0] // 2 + size[1] // 3.5 * math.sin(roll_6))pos_6_y = int(size[1] // 2 + size[1] // 3.5 * math.cos(roll_6))saturn = pygame.image.load(r"F:\solar-system\image\saturn_bg.png")screen.blit(pygame.transform.scale(saturn, (50, 50)), (pos_6_x, pos_6_y))# 天王星roll_7 += 0.031  # 每帧公转pipos_7_x = int(size[0] // 2 + size[1] // 2.7 * math.sin(roll_7))pos_7_y = int(size[1] // 2 + size[1] // 2.7 * math.cos(roll_7))uranus = pygame.image.load(r"F:\solar-system\image\uranus_bg.png")screen.blit(pygame.transform.scale(uranus, (45, 45)), (pos_7_x, pos_7_y))# 海王星roll_8 += 0.025  # 每帧公转pipos_8_x = int(size[0] // 2 + size[1] // 2 * math.sin(roll_8))pos_8_y = int(size[1] // 2 + size[1] // 2 * math.cos(roll_8))neptune = pygame.image.load(r"F:\solar-system\image\neptune_bg.png")screen.blit(pygame.transform.scale(neptune, (37, 37)), (pos_8_x, pos_8_y))

实现月亮绕着地球转

roll_m += 0.2  # 每帧公转pi
pos_m_x = int(pos_e_x + size[1] // 50 * math.sin(roll_m))
pos_m_y = int(pos_e_y + size[1] // 50 * math.cos(roll_m))
mouth = pygame.image.load(r"F:\solar-system\image\mercury_bg.png")
screen.blit(pygame.transform.scale(mouth, (6, 6)), (pos_m_x, pos_m_y))

如果你很有情调的话,还可以在循环体之前加一段代码,配曲music

注:此处音乐力求达到宏伟效果,因此选的是 Victory.mp3

# 添加背景音乐
pygame.mixer.music.load('F:/music.mp3')
pygame.mixer.music.play(-1, 40)
pygame.mixer.music.set_volume(0.5)

总观整体代码

# 导入模块
import pygame
import sys
import math
from pygame.locals import *# 初始化
pygame.init()# 定义窗口大小、标题名称、字体设置、创建时钟(可以控制游戏循环频率)等
size = width, height = 1206, 780
screen = pygame.display.set_mode(size)
pygame.display.set_caption("太阳系行星运转示意图")
myfont = pygame.font.Font(None,60)
clock = pygame.time.Clock()# 定义三个空列表
pos_e = pos_mm = []
# 地球和月球等其他行星的公转过的角度
roll_e = roll_m = 0
roll_2 = roll_3 = roll_4 = roll_5 = roll_6 = roll_7 = roll_8 = 0# 添加背景音乐
pygame.mixer.music.load('F:/music.mp3')
pygame.mixer.music.play(-1, 40)
pygame.mixer.music.set_volume(0.5)# 循环,达到万事万物永不停息的目的
while True:for event in pygame.event.get():if event.type == QUIT:sys.exit()# 宇宙background = pygame.image.load(r"E:/3.PNG")screen.blit(background, (0, 0))# 显示文字及星球textImage = myfont.render("Solar System", True, (255, 255, 0))           # 太阳系screen.blit(textImage, (100, 100))my_font = pygame.font.SysFont("arial", 15)text_surface = my_font.render("Sun", True, (255, 0, 0), (0, 0, 0))       # 太阳screen.blit(text_surface, (1020, 30))sun = pygame.image.load(r"F:\solar-system\image\sun_bg.png")screen.blit(pygame.transform.scale(sun, (27, 27)), (1090, 25))my_font = pygame.font.SysFont("arial", 15)text_surface = my_font.render("Mercury", True, (255, 0, 0), (0, 0, 0))   # 水星screen.blit(text_surface, (1020, 70))my_font = pygame.font.SysFont("arial", 15)Mercury = pygame.image.load(r"F:\solar-system\image\mercury_bg.png")screen.blit(pygame.transform.scale(Mercury, (27, 27)), (1090, 65))text_surface = my_font.render("Venus", True, (255, 0, 0), (0, 0, 0))     # 金星screen.blit(text_surface, (1020, 110))my_font = pygame.font.SysFont("arial", 15)spark = pygame.image.load(r"F:\solar-system\image\spark_bg.png")screen.blit(pygame.transform.scale(spark, (27, 27)), (1090, 105))text_surface = my_font.render("Earth", True, (255, 0, 0), (0, 0, 0))     # 地球screen.blit(text_surface, (1020, 150))my_font = pygame.font.SysFont("arial", 15)earth = pygame.image.load(r"F:\solar-system\image\earth_min_bg.png")screen.blit(pygame.transform.scale(earth, (27, 27)), (1090, 145))text_surface = my_font.render("Moon", True, (255, 0, 0), (0, 0, 0))      # 月球screen.blit(text_surface, (1020, 190))my_font = pygame.font.SysFont("arial", 15)moon = pygame.image.load(r"F:\solar-system\image\mercury_bg.png")screen.blit(pygame.transform.scale(moon, (27, 27)), (1090, 185))text_surface = my_font.render("Mars", True, (255, 0, 0), (0, 0, 0))      # 火星screen.blit(text_surface, (1020, 230))Mars = pygame.image.load(r"F:\solar-system\image\venus_bg.png")screen.blit(pygame.transform.scale(Mars, (27, 27)), (1090, 225))my_font = pygame.font.SysFont("arial", 15)text_surface = my_font.render("Jupiter", True, (255, 0, 0), (0, 0, 0))   # 木星screen.blit(text_surface, (1020, 270))Jupiter = pygame.image.load(r"F:\solar-system\image\jupiter_min_bg.png")screen.blit(pygame.transform.scale(Jupiter, (27, 27)), (1090, 265))my_font = pygame.font.SysFont("arial", 15)text_surface = my_font.render("Saturn", True, (255, 0, 0), (0, 0, 0))    # 土星screen.blit(text_surface, (1020, 300))Saturn = pygame.image.load(r"F:\solar-system\image\saturn_bg.png")screen.blit(pygame.transform.scale(Saturn, (30, 30)), (1090, 305))my_font = pygame.font.SysFont("arial", 15)text_surface = my_font.render("Uranus", True, (255, 0, 0), (0, 0, 0))    # 天王星screen.blit(text_surface, (1020, 340))Uranus = pygame.image.load(r"F:\solar-system\image\uranus_bg.png")screen.blit(pygame.transform.scale(Uranus, (27, 27)), (1090, 345))my_font = pygame.font.SysFont("arial", 15)text_surface = my_font.render("Neptune", True, (255, 0, 0), (0, 0, 0))   # 海王星screen.blit(text_surface, (1020, 380))Neptune = pygame.image.load(r"F:\solar-system\image\neptune_bg.png")screen.blit(pygame.transform.scale(Neptune, (27, 27)), (1090, 385))# 太阳sun = pygame.image.load(r"F:/solar-system/image/sun_bg.png")screen.blit(pygame.transform.scale(sun, (170, 170)), (527,307))# 水星roll_3 += 0.077  # 每帧公转pipos_3_x = int(size[0] // 2 + size[1] // 8 * math.sin(roll_3))pos_3_y = int(size[1] // 2 + size[1] // 8 * math.cos(roll_3))mercury = pygame.image.load(r"F:\solar-system\image\mercury_bg.png")screen.blit(pygame.transform.scale(mercury, (8, 8)), (pos_3_x, pos_3_y))# 金星roll_2 += 0.069  # 每帧公转pipos_2_x = int(size[0] // 2 + size[1] // 7 * math.sin(roll_2))pos_2_y = int(size[1] // 2 + size[1] // 7 * math.cos(roll_2))venus = pygame.image.load(r"F:\solar-system\image\venus_bg.png")screen.blit(pygame.transform.scale(venus, (10, 10)), (pos_2_x, pos_2_y))# 地球roll_e += 0.060  # 每帧公转pipos_e_x = int(size[0] // 2 + size[1] // 6 * math.sin(roll_e))pos_e_y = int(size[1] // 2 + size[1] // 6 * math.cos(roll_e))earth = pygame.image.load(r"F:\solar-system\image\earth_min_bg.png")screen.blit(pygame.transform.scale(earth, (15, 15)), (pos_e_x, pos_e_y))# 月球roll_m += 0.2  # 每帧公转pipos_m_x = int(pos_e_x + size[1] // 50 * math.sin(roll_m))pos_m_y = int(pos_e_y + size[1] // 50 * math.cos(roll_m))mouth = pygame.image.load(r"F:\solar-system\image\mercury_bg.png")screen.blit(pygame.transform.scale(mouth, (6, 6)), (pos_m_x, pos_m_y))# 火星roll_4 += 0.053  # 每帧公转pipos_4_x = int(size[0] // 2 + size[1] // 5 * math.sin(roll_4))pos_4_y = int(size[1] // 2 + size[1] // 5 * math.cos(roll_4))venus = pygame.image.load(r"F:\solar-system\image\venus_bg.png")screen.blit(pygame.transform.scale(venus, (13, 13)), (pos_4_x, pos_4_y))# 木星roll_5 += 0.045  # 每帧公转pipos_5_x = int(size[0] // 2 + size[1] // 4 * math.sin(roll_5))pos_5_y = int(size[1] // 2 + size[1] // 4 * math.cos(roll_5))mouth = pygame.image.load(r"F:\solar-system\image\jupiter_bg.png")screen.blit(pygame.transform.scale(mouth, (70, 70)), (pos_5_x, pos_5_y))# 土星roll_6 += 0.037  # 每帧公转pipos_6_x = int(size[0] // 2 + size[1] // 3.5 * math.sin(roll_6))pos_6_y = int(size[1] // 2 + size[1] // 3.5 * math.cos(roll_6))saturn = pygame.image.load(r"F:\solar-system\image\saturn_bg.png")screen.blit(pygame.transform.scale(saturn, (50, 50)), (pos_6_x, pos_6_y))# 天王星roll_7 += 0.031  # 每帧公转pipos_7_x = int(size[0] // 2 + size[1] // 2.7 * math.sin(roll_7))pos_7_y = int(size[1] // 2 + size[1] // 2.7 * math.cos(roll_7))uranus = pygame.image.load(r"F:\solar-system\image\uranus_bg.png")screen.blit(pygame.transform.scale(uranus, (45, 45)), (pos_7_x, pos_7_y))# 海王星roll_8 += 0.025  # 每帧公转pipos_8_x = int(size[0] // 2 + size[1] // 2 * math.sin(roll_8))pos_8_y = int(size[1] // 2 + size[1] // 2 * math.cos(roll_8))neptune = pygame.image.load(r"F:\solar-system\image\neptune_bg.png")screen.blit(pygame.transform.scale(neptune, (37, 37)), (pos_8_x, pos_8_y))# 刷新pygame.display.flip()# 数值越大刷新越快,小球运动越快clock.tick(50)

150行Python代码模拟太阳系行星运转相关推荐

  1. python一百行代码多少钱_用86行Python代码模拟太阳系

    Python代码模拟的太阳系,包括了水星(Mercury), 金星(Venus),地球(Earth),月球(Moon),火星(Mars) 上面的动画是我用86行Python代码模拟的一个比较真实的太阳 ...

  2. python写计算机模拟器_用 150 行 Python 代码写的量子计算模拟器

    这是个 GItHub 项目,可以简单了解一下. qusim.py 是一个多量子位的量子计算机模拟器(玩具?),用 150 行的 python 所编写. 这段代码可以让你轻松了解量子计算机如何遵循线性代 ...

  3. 几行Python代码模拟轮盘抽奖游戏

    轮盘抽奖是比较常见的一种游戏,在轮盘上有一个指针和一些不同颜色.不同面积的扇形,用力转动轮盘,轮盘慢慢停下后依靠指针所处的位置来判定是否中奖以及奖项等级.本文代码中的函数名和很多变量名使用了中文,这在 ...

  4. 浪姐打分看不够?用几行Python代码模拟评委打分

    大家好鸭~我是小熊猫

  5. python绘制动态模拟图-如何利用Python动态模拟太阳系运转

    前言 提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深入了解一下,这里就不多说了. 太阳以巨大的引力使周 ...

  6. 如何利用Python动态模拟太阳系运转

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接:好看站 http://www.nrso.net/ 高州阳光论坛https://www.hnthzk.com/ 前 ...

  7. python绘制太阳系_如何利用Python动态模拟太阳系运转

    前言 提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深入了解一下,这里就不多说了. 太阳以巨大的引力使周 ...

  8. python怎么画地球绕太阳转_如何利用Python动态模拟太阳系运转

    前言 提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深入了解一下,这里就不多说了. 太阳以巨大的引力使周 ...

  9. html+div+动画效果,html+css3太阳系行星运转动画效果的实现代码

    原标题:html+css3太阳系行星运转动画效果的实现代码 做一个太阳系八大行星的运转动画,不包括行星的卫星,所有行星围绕太阳公转,行星采用纯色,暂时没有自转. 效果静态图: 动画中包括:太阳及各行星 ...

最新文章

  1. JVM指令详解(上)
  2. urllib.parse
  3. html title 不显示_第2天:HTML 结构
  4. java jnlp_java – 调试JNLP启动应用程序
  5. C++ 中 Windows 编程概述
  6. c 打印二叉树_二叉树遍历(非递归和递归实现)
  7. excel文件下载下来损坏 js_js实现txt/excel文件下载
  8. java获取字符长度和字节长度
  9. 银行专业术语解释说明 超级详细
  10. 初学JAVA项目(四、魔域:文字RPG游戏)
  11. 关于知识图谱标准化构建平台的思考:知识图谱只能做项目,不能做平台?
  12. 大体积、多数量excel文件排版转换为印刷版:pdf文件中标志图片模糊问题的解决
  13. php如何开发调色器,HTML5+Js制作的一款简易调色器
  14. java项目中数据字典的实现
  15. 一阶的RC高低通电路和微积分电路有什么区别
  16. 程序员的私人外包专家
  17. iOS的音频解码详解
  18. CADe_SIMu V1.0.0.1仿真软件分享
  19. LiberOJ -6210-tree -树形DP
  20. MFC中链接access2013数据库

热门文章

  1. IOG交互软件---Intelligent Pixel Annotation Tool (IPAT)---安装说明
  2. 2023-01-03 有关C++继承多态的一点想法
  3. Proteus+VSPD实现仿真stm32虚拟串口
  4. 接口练习:猫狗案例扩展跳高功能
  5. 鸿蒙之志蝼蚁岂知,争气励志语:生如蝼蚁,当有鸿鹄之志,命如纸薄,应有不屈之心...
  6. CLOB与BLOB的区别及用途
  7. 【UI自动化设计模式】超越 Page Objects:使用Serenity和ScreenplayPattern实现新一代的自动化测试
  8. 不是所有的努力都会有结果,但是你若不努力,谁能替你坚强??
  9. 手势识别:使用EfficientNet模型迁移、VGG16模型迁移
  10. 【李佳辉_周报_2022.10.23】