import tkinter as tk
import math
class QuadcopterAnimation:
def __init__(self, root):
self.root = root
self.root.title("2D Quadcopter Control")
# Setup Canvas
self.canvas = tk.Canvas(root, width=800, height=600, bg='white')
self.canvas.pack()
# Start Button
self.start_btn = tk.Button(root, text="Start/Reset", command=self.start_animation)
self.start_btn.pack()
# Initial Drone Position
self.x, self.y = 400, 300
self.speed = 10
self.drone_items = []
self.propeller_angle = 0
self.running = False
# Keyboard Binding
self.root.bind("<w>", self.move_up)
self.root.bind("<s>", self.move_down)
self.root.bind("<a>", self.move_left)
self.root.bind("<d>", self.move_right)
def draw_quadcopter(self):
self.canvas.delete("drone")
self.drone_items = []
# Body
body = self.canvas.create_rectangle(self.x-40, self.y-10, self.x+40, self.y+10, fill='blue', tags="drone")
# Props
prop_coords = [
(self.x-40, self.y-20), (self.x+40, self.y-20),
(self.x-40, self.y+20), (self.x+40, self.y+20)
]
for px, py in prop_coords:
# Propeller rotation math
self.propeller_angle += 20
r = 15
x1 = px + r * math.cos(math.radians(self.propeller_angle))
y1 = py + r * math.sin(math.radians(self.propeller_angle))
x2 = px + r * math.cos(math.radians(self.propeller_angle + 180))
y2 = py + r * math.sin(math.radians(self.propeller_angle + 180))
self.canvas.create_line(x1, y1, x2, y2, width=3, fill='black', tags="drone")
self.canvas.create_oval(px-5, py-5, px+5, py+5, fill='grey', tags="drone")
def animate(self):
if self.running:
self.draw_quadcopter()
self.root.after(50, self.animate)
def start_animation(self):
if not self.running:
self.running = True
self.animate()
else:
self.x, self.y = 400, 300 # Reset position
# Movement Functions
def move_up(self, event): self.y -= self.speed
def move_down(self, event): self.y += self.speed
def move_left(self, event): self.x -= self.speed
def move_right(self, event): self.x += self.speed
if __name__ == "__main__":
root = tk.Tk()
app = QuadcopterAnimation(root)
root.mainloop()

Tidak ada komentar:
Posting Komentar