バスケットボール

バスケットボール(小4男子/作)
ドリブルとシュート時のボールの軌道がリアルに表現できていると思います。

byの値を少しずつ、微調整して放物線ぽい軌道が描けています。変数を使って加速度運動を使った方法などで放物線を描く方法を模索していましたね。残念ながら本当の放物線を描くにはそのアプローチの延長線上に答えはありません。。。

y=ax2+bx+cという方程式が必要になります。物理の法則を取り入れたプログラムを作るには数学がたくさん、必要になります。算数の勉強も頑張ってください。


Pythonで記述したコード
import tkinter

cx=850
cy=590
bx=cx-40
by=cy+20
key=""
順番=0
c=0

root = tkinter.Tk()
root.title("バスケットボール")
root.geometry("960x720")
root.resizable(False,False)

canvas=tkinter.Canvas(width=960,height=720)
canvas.pack()

背景=tkinter.PhotoImage(file="背景.png")
ネコ=tkinter.PhotoImage(file="ネコ.png")
ネコ1=tkinter.PhotoImage(file="ネコ1.png")
ネコ2=tkinter.PhotoImage(file="ネコ2.png")
ネコ3=tkinter.PhotoImage(file="ネコ3.png")
basketball=tkinter.PhotoImage(file="basketball.png")
ネコリスト=[ネコ,ネコ1]
canvas.create_image(480,360,image=背景)
canvas.create_image(cx,cy,image=ネコ,tag="ネコ")
canvas.create_image(bx,by,image=basketball,tag="basketball")

def key_down(e):
    global key
    key=e.keysym

def シュート():
    global bx,by,順番
    if 順番==0:
        if by>70:
            bx-=15
            by-=50
        else:
            順番=1
            
    if 順番==1 and by<590:
        bx-=15
        by+=50
    elif 順番==1 and by>600:
        順番=2

    canvas.delete("basketball")
    canvas.delete("ネコ")
    canvas.create_image(bx,by,image=basketball,tag="basketball")
    canvas.create_image(cx,cy,image=ネコ2,tag="シュートネコ")

    if  順番==2:
        canvas.delete("シュートネコ")
        canvas.create_image(cx,cy,image=ネコ3)   
    
    root.after(100,シュート)

def 繰り返し():
    global cx,cy,bx,by,c
    
    c+=1
    if key=="space":
        シュート()
        return
    
    if cx>500 :
        cx-=10
        bx-=10
    if by>610:
        by-=10
    else:
        by+=10
    canvas.delete("ネコ")
    canvas.delete("basketball")
    canvas.create_image(cx,cy,image=ネコリスト[c%2],tag="ネコ")
    canvas.create_image(bx,by,image=basketball,tag="basketball")

    root.after(100,繰り返し)

繰り返し()

root.bind("",key_down)

root.mainloop()