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