Skip to content

Instantly share code, notes, and snippets.

@horstjens
Last active February 21, 2025 15:22
Show Gist options
  • Save horstjens/17c17cbd37bad5c339273b385f967a4a to your computer and use it in GitHub Desktop.
Save horstjens/17c17cbd37bad5c339273b385f967a4a to your computer and use it in GitHub Desktop.
kanone mit freesimplegui
import FreeSimpleGUI as sg
import math
import random
col_rechts=sg.Column(layout=[
[sg.Multiline(default_text="history:\n",
autoscroll=True,
key="history",
disabled=True,
size=(50,10))]
])
col_links=sg.Column(layout=[
[sg.Text("Kanonenspiel")],
[sg.Text("Winkel"),
sg.Slider(range=(1,90),
orientation="h",
size=(25,20),
key="angle")],
[sg.Text("Geschwindigkeit"),
sg.Slider(range=(1,250),
orientation="h",
size=(25,20),
key="speed")],
[sg.Button("Feuer"), sg.Button("clear")],
])
layout=[
[col_links, col_rechts],
[sg.Graph((1600,800),(0,0),(1600,800),key="canvas", background_color="#FFFFFF")],
[sg.Button("exit")],
]
window=sg.Window("Kanonenspiel", layout)
figures=[]
schuss_figures = {}
schuss = 0
while True:
event, values=window.read()
if event in ("exit", sg.WIN_CLOSED):
break
if event=="clear":
for fig in figures:
window["canvas"].delete_figure(fig)
figures=[]
if event=="Feuer":
schuss += 1
schuss_figures[schuss] = []
# alte schüsse immer mehr löschen
for alter_schuss_nummer in range(1, schuss):
to_delete = []
for fig_nr in schuss_figures[alter_schuss_nummer]:
if random.random() < 0.5:
to_delete.append(fig_nr)
for fnr in to_delete:
window["canvas"].delete_figure(fnr)
schuss_figures[alter_schuss_nummer].remove(fnr)
figures.remove(fnr)
#print(f"Schuss mit Winkel {values['angle']} und Geschwindigkeit {values['speed']}")
y0=1 #anfangs h
x0=0 #start x
#vx=20 #x speed
#vy=20 #y speed
vx=math.cos(math.radians(values["angle"]))*values['speed']
vy=math.sin(math.radians(values["angle"]))*values['speed']
x=x0 # x pos Kugel
y=y0 # y pos Kugel
t=0 # time
g=-9.81
while y>0:
x = x0 + vx * t
y = y0 + vy * t + 0.5 + g * t * t
# fig ist eine nummer
fig = window["canvas"].draw_point((x,y),size=2, color='#222222')
figures.append(fig)
schuss_figures[schuss].append(fig)
t+=0.01
# multiline feld updaten
txt = values["history"]
txt += f"\n# {schuss} winkel: {values['angle']} speed: {values['speed']} ergebnis: {x:.2f}"
window["history"].update(txt)
window.close()
#self.pos.x = self.startpos.x + self.startspeed.x * self.t
# self.pos.z = self.startpos.z + self.startspeed.z * self.t
#self.pos.y = self.startpos.y + self.startspeed.y * self.t + 0.5 * gravity.y * self.t * self.t
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment