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:
Posting Komentar