ChatGPTにPythonで簡単なアニメーションを描画してもらうプログラムを書いてもらった

ChatGPTにPythonで簡単なアニメーションを描画してもらうプログラムを書いてもらいました。大昔のパソコンのデモ画面みたいな感じですが。。。

プロンプト作りこんでいけば、スクリーンセーバーのような奇麗なアニメとかも作れるかもしれません。PythonよりCとかUnityでコード書いたほうがメガデモっぽい派手なのができそうです。

指示文(プロンプト):

Pythontkinterを利用して、GUIで円が飛ぶ跳ねるプログラムを書いてください。環境はUbuntuです。できるだけコンパクトなコードにしてください。表示する円の数は指定できるようにしてください。

回答

以下は、Pythontkinterを使ったGUIで円が跳ねるアニメーションを表示するプログラムの例です。円の数はユーザーによって指定できるようになっています。円はランダムな位置と速度で動きます。


import tkinter as tk
import random

# ウィンドウの幅と高さ
WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600

# 円の半径
CIRCLE_RADIUS = 20

# 円の色
CIRCLE_COLOR = "red"

# 円の数
NUM_CIRCLES = 10

class Circle:
    def __init__(self, canvas, x, y, vx, vy):
        self.canvas = canvas
        self.x = x
        self.y = y
        self.vx = vx
        self.vy = vy
        self.circle = self.canvas.create_oval(x - CIRCLE_RADIUS, y - CIRCLE_RADIUS, x + CIRCLE_RADIUS, y + CIRCLE_RADIUS, fill=CIRCLE_COLOR)

    def move(self):
        self.canvas.move(self.circle, self.vx, self.vy)
        self.x += self.vx
        self.y += self.vy
        if self.x <= CIRCLE_RADIUS or self.x >= WINDOW_WIDTH - CIRCLE_RADIUS:
            self.vx *= -1
        if self.y <= CIRCLE_RADIUS or self.y >= WINDOW_HEIGHT - CIRCLE_RADIUS:
            self.vy *= -1

class AnimationApp:
    def __init__(self, num_circles):
        self.root = tk.Tk()
        self.root.title("Bouncing Circles")
        self.canvas = tk.Canvas(self.root, width=WINDOW_WIDTH, height=WINDOW_HEIGHT)
        self.canvas.pack()
        self.circles = []
        for i in range(num_circles):
            x = random.randint(CIRCLE_RADIUS, WINDOW_WIDTH - CIRCLE_RADIUS)
            y = random.randint(CIRCLE_RADIUS, WINDOW_HEIGHT - CIRCLE_RADIUS)
            vx = random.randint(-5, 5)
            vy = random.randint(-5, 5)
            circle = Circle(self.canvas, x, y, vx, vy)
            self.circles.append(circle)
        self.animate()

    def animate(self):
        for circle in self.circles:
            circle.move()
        self.root.after(50, self.animate)

if __name__ == "__main__":
    num_circles = int(input("Enter the number of circles: "))
    app = AnimationApp(num_circles)
    app.root.mainloop()
    
結果:

下記のように成功しました。