太阳系少了一颗行星,知道吗?用python的pygame绘制8大行星动图

太阳系少了一颗行星,知道吗?用python的pygame绘制8大行星动图

首页战争策略代号星球更新时间:2024-06-04

1 说明:

=====

1.1 我还一直以为太阳系中有九大行星,你知道吗?今天才知道有一颗行星被除名了,是冥王星被划为矮行星,并命名为小行星134340号。

1.2 在2006年8月24日于布拉格举行的第26届国际天文联会中通过的第5号决议中,被除名的。

1.3 也就是说:从2006年8月24日起,太阳系只有8大行星,即:水星、金星、地球、火星、木星、土星、天王星和海王星。别搞错了。

太阳系8大行星(月球是地球的小卫星)

2 说明:

=====

2.1 致谢:谢谢原博主分享,资料、图片和代码是来源他的文章,从下面的链接中来的。

https://blog.csdn.net/IT_charge/article/details/106150146?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

2.2 对他的代码进行删减、修改、注释、优化,增加中文显示,星体重命名等等,体现了python的列表和推导式等思维。

2.3 环境:

华为笔记本电脑、深度deepin-linux操作系统、谷歌浏览器、python3.8和微软vscode编辑器。

3 效果图:

4 文件:

=====

4.1 文件结构:solar.py与bgmusic.mp3、image文件夹在同一个目录下,多了一个4.png(不要管这个)。

4.2 注意:字体,我用的是能够显示中文的字体:华文仿宋;hwfs.ttf,需要自己下载,放在根目录下。

当然也可以放在指定的目录下。

4.3 图片也附带给出:我的图片带有水印,也可以从原博主那里下载,原博主还给出网盘下载地址。

为了达到效果,下面的图片均命名。

bg.png

4.4 solar.py代码:

# 导入模块 import pygame,sys,math from pygame.locals import * # 初始化 pygame.init() # 定义窗口大小、标题名称、字体设置、创建时钟(可以控制游戏循环频率) size = width, height = 1206, 780 #定义星体的初级宽和高,不动 sizewin = width, height = 2200, 1200 #窗口的宽和高 #本人喜欢窗口可调节RESIZABLE screen = pygame.display.set_mode(sizewin,RESIZABLE) pygame.display.set_caption("太阳系八大行星示意图") clock = pygame.time.Clock() #定义颜色 GREEN=(0,255,0) WHITE=(255,255,255) # 定义2个空列表 pos_e = pos_mm = [] # 地球和月球等其他行星的公转过的角度 roll_e = roll_m = roll_1 = roll_2 = roll_3 = roll_4 = roll_5 = roll_6 = roll_7 = roll_8 = 0 # 添加背景音乐,可自定义背景音乐,注意路径 pygame.mixer.music.load('/home/xgj/Desktop/solar/bgmusic.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() # 宇宙作为bg背景图片 background = pygame.image.load("/home/xgj/Desktop/solar/image/bg.png") screen.blit(background, (0, 0)) # 主标题字体设置,hwfs=华文仿宋,需要自己下载,放在根目录下 # 也可以指定目录,如图片一样 myFont = pygame.font.Font('hwfs.ttf', 60) textImage = myfont.render("太阳系==Solar System", True,WHITE) # 太阳系 screen.blit(textImage, (10, 10)) #星体名称legend的字体定义 my_font = pygame.font.Font('hwfs.ttf', 30) #导出星体图片 sun = pygame.image.load("/home/xgj/Desktop/solar/image/sun.png") moon = pygame.image.load("/home/xgj/Desktop/solar/image/moon.png") mercury = pygame.image.load("/home/xgj/Desktop/solar/image/1-mercury.png") venus = pygame.image.load("/home/xgj/Desktop/solar/image/2-venus.png") earth = pygame.image.load("/home/xgj/Desktop/solar/image/3-earth.png") mars = pygame.image.load("/home/xgj/Desktop/solar/image/4-mars.png") jupiter = pygame.image.load("/home/xgj/Desktop/solar/image/5-jupiter.png") Saturn = pygame.image.load("/home/xgj/Desktop/solar/image/6-saturn.png") uranus = pygame.image.load("/home/xgj/Desktop/solar/image/7-uranus.png") neptune = pygame.image.load("/home/xgj/Desktop/solar/image/8-neptune.png") #定义星体图片列表 pic_plante=[sun,moon,mercury,venus,earth,mars,jupiter,saturn,uranus,neptune] #定义星体名称列表 plante_name=['太阳==Sun','月球==Moon','1-水星==Mercury','2-金星==Venus','3-地球==Earth', '4-火星==Mars','5-木星==Jupiter','6-土星==Saturn','7-天王星==Uranus','8-海王星==Neptune'] #y的位置2 pos_y_2=[30,70,110,150,190,230,270,310,350,390] #y的位置3 pos_y_3=[30,190,70,110,150,230,270,310,350,390] #推导式简化代码,但是可读性较差 for i in range(10): text_surface = my_font.render(plante_name[i], True, GREEN) screen.blit(text_surface, (1700, pos_y_2[i])) screen.blit(pygame.transform.scale(pic_plante[i], (30, 30)), (1600, pos_y_3[i])) #太阳位置 screen.blit(pygame.transform.scale(sun, (170, 170)), (527,307)) #星体运行动画设置 # 水星-1 roll_3 = 0.077 # 每帧公转pi pos_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)) screen.blit(pygame.transform.scale(mercury, (8, 8)), (pos_3_x, pos_3_y)) # 金星-2 roll_2 = 0.069 # 每帧公转pi pos_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)) screen.blit(pygame.transform.scale(venus, (10, 10)), (pos_2_x, pos_2_y)) # 地球-3 roll_e = 0.060 # 每帧公转pi pos_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)) screen.blit(pygame.transform.scale(earth, (15, 15)), (pos_e_x, pos_e_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)) screen.blit(pygame.transform.scale(moon, (6, 6)), (pos_m_x, pos_m_y)) # 火星-4 roll_4 = 0.053 # 每帧公转pi pos_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)) screen.blit(pygame.transform.scale(mars, (13, 13)), (pos_4_x, pos_4_y)) # 木星-5 roll_5 = 0.045 # 每帧公转pi pos_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)) screen.blit(pygame.transform.scale(jupiter, (70, 70)), (pos_5_x, pos_5_y)) # 土星-6 roll_6 = 0.037 # 每帧公转pi pos_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)) screen.blit(pygame.transform.scale(saturn, (50, 50)), (pos_6_x, pos_6_y)) # 天王星-7 roll_7 = 0.031 # 每帧公转pi pos_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)) screen.blit(pygame.transform.scale(uranus, (45, 45)), (pos_7_x, pos_7_y)) # 海王星-8 roll_8 = 0.025 # 每帧公转pi pos_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)) screen.blit(pygame.transform.scale(neptune, (37, 37)), (pos_8_x, pos_8_y)) # 刷新 pygame.display.flip() # 数值越大刷新越快,小球运动越快,可是改了效果不明显 clock.tick(50)

附图片

4.5 顺序:与代码中的顺序保持一致:

太阳==sun

月球==moon

1==水星==Mercury

2==金星==Venus

3==地球==Earth

4==火星==Mars

5==木星==Jupiter

6==土星==Saturn

7==天王星==Uranus

8==海王星==Neptune

4.6 星体图片:

sun.png

moon.png

1-mercury.png

2-venus.png

3-earth.png

4-mars.png

5-jupiter.png

6-saturn.png

7-uranus.png

8-neptune.png

===自己整理并分享出来===

喜欢的人,请点赞、评论、转发、关注和收藏。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved