Minggu, 12 April 2026

Python Animation - Drone 9

 




import tkinter as tk

import math


class QuadcopterGame:

    def __init__(self, root):

        self.root = root

        self.root.title("2D Quadcopter Control")

        

        # Canvas Setup

        self.canvas = tk.Canvas(root, width=800, height=600, bg='white')

        self.canvas.pack()

        

        # Start Button

        self.start_btn = tk.Button(root, text="Start", command=self.start_game)

        self.start_btn.pack()

        

        # State Variables

        self.running = False

        self.x, self.y = 400, 300

        self.speed = 10

        self.prop_angle = 0

        self.missiles = []

        

        # Bind Keys

        self.root.bind("<KeyPress>", self.key_handler)


    def start_game(self):

        if not self.running:

            self.running = True

            self.start_btn.config(state=tk.DISABLED)

            self.draw_quadcopter()

            self.animate_props()


    def draw_quadcopter(self):

        self.canvas.delete("drone")

        # Main Body

        self.canvas.create_rectangle(self.x-30, self.y-5, self.x+30, self.y+5, 


fill='black', tags="drone")

        # Props

        self.draw_propeller(self.x-30, self.y-10)

        self.draw_propeller(self.x+30, self.y-10)

        self.draw_propeller(self.x-30, self.y+10)

        self.draw_propeller(self.x+30, self.y+10)


    def draw_propeller(self, px, py):

        # Rotating propeller effect

        length = 15

        x1 = px + length * math.cos(self.prop_angle)

        y1 = py + length * math.sin(self.prop_angle)

        x2 = px - length * math.cos(self.prop_angle)

        y2 = py - length * math.sin(self.prop_angle)

        self.canvas.create_line(x1, y1, x2, y2, width=3, fill='blue', tags="drone")


    def animate_props(self):

        if self.running:

            self.prop_angle += 0.5

            self.draw_quadcopter()

            self.move_missiles()

            self.root.after(20, self.animate_props)


    def key_handler(self, event):

        if not self.running: return

        key = event.keysym.lower()

        if key == 'w': self.y -= self.speed

        elif key == 's': self.y += self.speed

        elif key == 'a': self.x -= self.speed

        elif key == 'd': self.x += self.speed

        elif key == 'space': self.launch_missile()


    def launch_missile(self):

        m = self.canvas.create_rectangle(self.x-2, self.y-15, self.x+2, self.y-25, 


fill='red', tags="missile")

        self.missiles.append(m)


    def move_missiles(self):

        for m in self.missiles[:]:

            self.canvas.move(m, 0, -15)

            if self.canvas.coords(m)[1] < 0:

                self.canvas.delete(m)

                self.missiles.remove(m)


root = tk.Tk()

app = QuadcopterGame(root)

root.mainloop()

Tidak ada komentar: