import tkinter as tk
import math
class SolarSystem:
def __init__(self, master):
self.master = master
self.master.title("Sistema Solar")
self.canvas = tk.Canvas(master, width=800, height=600, bg='black')
self.canvas.pack()
# Propriedades dos planetas: nome, distância, tamanho, cor, velocidade e contagem de voltas
self.planets = [
{"name": "Mercúrio", "distance": 70, "size": 5, "color": "gray", "angle": 0, "speed": 4.74, "laps": 0},
{"name": "Vênus", "distance": 100, "size": 8, "color": "yellow", "angle": 0, "speed": 3.50, "laps": 0},
{"name": "Terra", "distance": 130, "size": 8, "color": "blue", "angle": 0, "speed": 2.98, "laps": 0},
{"name": "Marte", "distance": 160, "size": 6, "color": "red", "angle": 0, "speed": 2.41, "laps": 0},
{"name": "Júpiter", "distance": 210, "size": 12, "color": "orange", "angle": 0, "speed": 1.31, "laps": 0},
{"name": "Saturno", "distance": 260, "size": 10, "color": "gold", "angle": 0, "speed": 0.97, "laps": 0},
{"name": "Urano", "distance": 310, "size": 8, "color": "lightblue", "angle": 0, "speed": 0.68, "laps": 0},
{"name": "Netuno", "distance": 360, "size": 8, "color": "blue", "angle": 0, "speed": 0.54, "laps": 0},
]
# Desenha o Sol
self.sun = self.canvas.create_oval(390, 290, 410, 310, fill='yellow') # Sol
# Desenha os planetas e seus nomes
self.draw_planets()
self.animate_planets()
def draw_planets(self):
for planet in self.planets:
# Desenha o planeta
planet["oval"] = self.canvas.create_oval(
400 - planet["size"],
300 - planet["size"],
400 + planet["size"],
300 + planet["size"],
fill=planet["color"]
)
# Adiciona o nome do planeta
planet["label"] = self.canvas.create_text(
400, 300, text=planet["name"], fill='white', font=("Arial", 10)
)
# Adiciona o contador de voltas
planet["lap_label"] = self.canvas.create_text(
400, 300 + 15, text=f"Laps: {planet['laps']}", fill='white', font=("Arial", 8)
)
def animate_planets(self):
for planet in self.planets:
# Atualiza o ângulo baseado na velocidade
planet["angle"] = (planet["angle"] + planet["speed"]) % 360
# Verifica se o planeta completou uma volta
if planet["angle"] < planet["speed"]: # Se o ângulo está próximo de 0
planet["laps"] += 1 # Incrementa o contador de voltas
# Calcula a nova posição do planeta
x = 400 + planet["distance"] * math.cos(math.radians(planet["angle"]))
y = 300 + planet["distance"] * math.sin(math.radians(planet["angle"]))
# Atualiza a posição do planeta
self.canvas.coords(planet["oval"], x - planet["size"], y - planet["size"], x + planet["size"],
y + planet["size"])
# Atualiza a posição do nome do planeta
self.canvas.coords(planet["label"], x, y - 15) # Coloca o nome acima do planeta
# Atualiza a posição do contador de voltas
self.canvas.coords(planet["lap_label"], x, y + 15) # Coloca o contador abaixo do planeta
self.canvas.itemconfig(planet["lap_label"], text=f"Laps: {planet['laps']}") # Atualiza o texto do contador
self.master.after(50, self.animate_planets) # Atualiza a animação a cada 50ms
if __name__ == "__main__":
root = tk.Tk()
solar_system = SolarSystem(root)
root.mainloop()