ChatGPTを利用したものを修正して作成しました
turtleモジュールを使用しています
未インストールの場合はpipなどでインストールする必要があります
import turtle import random import time import math # 画面の設定 win = turtle.Screen() win.setup(width=800, height=600) win.bgcolor('black') # 背景色を黒に設定 win.tracer(0) # 描画速度を最大にする # 星の設定 stars = [] stars2 = [] stars3 = [] for _ in range(30): # 星の数を倍に増やす star = turtle.Turtle() star.shape('circle') star.shapesize(0.0033, 0.0033) # 星の初期の大きさをさらに小さく(1/30)にする star.color(random.uniform(0.5, 1), random.uniform(0.5, 1), random.uniform(0.5, 1)) # 星の色をランダムに設定(明るい色にする) star.penup() star.speed(0) star.goto(0, 0) star.setheading(random.randint(0, 360)) # 星の初期方向をランダムに設定 star.speed = 1 # 星の初期速度を設定 star.growth_rate = random.uniform(0.01, 0.02) # 星が大きくなる度合いをランダムに設定 stars.append(star) for _ in range(50): # 星の数を倍に増やす star2 = turtle.Turtle() star2.shape('circle') star2.shapesize(0.00033, 0.00033) # 星の初期の大きさをさらに小さく(1/30)にする star2.color(random.uniform(0.5, 1), random.uniform(0.5, 1), random.uniform(0.5, 1)) # 星の色をランダムに設定(明るい色にする) star2.penup() star2.speed(0) star2.goto(0, 0) star2.setheading(random.randint(0, 360)) # 星の初期方向をランダムに設定 star2.speed = 1 # 星の初期速度を設定 star2.growth_rate = random.uniform(0.001, 0.008) # 星が大きくなる度合いをランダムに設定 stars2.append(star2) for _ in range(100): # 星の数を倍に増やす star3 = turtle.Turtle() star3.shape('circle') star3.shapesize(0.00033, 0.00033) # 星の初期の大きさをさらに小さく(1/30)にする star3.color(random.uniform(0.5, 1), random.uniform(0.5, 1), random.uniform(0.5, 1)) # 星の色をランダムに設定(明るい色にする) star3.penup() star3.speed(0) star3.goto(0, 0) star3.setheading(random.randint(0, 360)) # 星の初期方向をランダムに設定 star3.speed = 1 # 星の初期速度を設定 star3.growth_rate = random.uniform(0.001, 0.002) # 星が大きくなる度合いをランダムに設定 stars3.append(star3) # 星を動かす i = 0 while True: if i < len(stars): stars[i].showturtle() # 星を逐次表示 i += 1 for star in stars: if star.isvisible(): # 星が表示されている場合のみ動かす star.forward(star.speed * 2) # 星が移動する速度を2倍に上げる star.speed += 0.2 # 星の速度を徐々に上げる(加速度を2倍にする) distance = math.sqrt(star.xcor()**2 + star.ycor()**2) # 星と中心との距離を計算 star.shapesize(0.0033 + distance * star.growth_rate / 20) # 星の大きさを距離に応じて調整(端に達する時の大きさを1/30にする) if star.xcor() > 400 or star.xcor() < -400 or star.ycor() > 300 or star.ycor() < -300: star.goto(0, 0) # 星が端に達したとき、星を中心に戻す star.speed = 1 # 星が中心に戻ったとき、速度を初期速度にリセット star.shapesize(0.0033, 0.0033) # 星が中心に戻ったとき、星の大きさをリセット star.setheading(random.randint(0, 360)) # 星の初期方向をランダムに設定 if i < len(stars2): stars2[i].showturtle() # 星を逐次表示 i += 1 for star2 in stars2: if star2.isvisible(): # 星が表示されている場合のみ動かす star2.forward(star2.speed * 1) # 星が移動する速度 star2.speed += 0.2 # 星の速度を徐々に上げる(加速度を2倍にする) distance = math.sqrt(star2.xcor()**2 + star2.ycor()**2) # 星と中心との距離を計算 star2.shapesize(0.0033 + distance * star2.growth_rate / 30) # 星の大きさを距離に応じて調整(端に達する時の大きさを1/30にする) if star2.xcor() > 400 or star2.xcor() < -400 or star2.ycor() > 300 or star2.ycor() < -300: star2.goto(0, 0) # 星が端に達したとき、星を中心に戻す star2.speed = 1 # 星が中心に戻ったとき、速度を初期速度にリセット star2.shapesize(0.0033, 0.0033) # 星が中心に戻ったとき、星の大きさをリセット star2.setheading(random.randint(0, 360)) # 星の初期方向をランダムに設定 if i < len(stars3): stars3[i].showturtle() # 星を逐次表示 i += 1 for star3 in stars3: if star3.isvisible(): # 星が表示されている場合のみ動かす star3.forward(star3.speed * 0.5) # 星が移動する速度を0.5倍に上げる star3.speed += 0.2 # 星の速度を徐々に上げる(加速度を2倍にする) distance = math.sqrt(star3.xcor()**2 + star3.ycor()**2) # 星と中心との距離を計算 star3.shapesize(0.0033 + distance * star3.growth_rate / 50) # 星の大きさを距離に応じて調整(端に達する時の大きさを1/30にする) if star3.xcor() > 400 or star3.xcor() < -400 or star3.ycor() > 300 or star3.ycor() < -300: star3.goto(0, 0) # 星が端に達したとき、星を中心に戻す star3.speed = 1 # 星が中心に戻ったとき、速度を初期速度にリセット star3.shapesize(0.0033, 0.0033) # 星が中心に戻ったとき、星の大きさをリセット star3.setheading(random.randint(0, 360)) # 星の初期方向をランダムに設定 win.update() # 画面を更新 time.sleep(0.01)