diff --git a/statek.py b/statek.py index 76f6dda..b9a0285 100644 --- a/statek.py +++ b/statek.py @@ -137,21 +137,37 @@ def cele_ruch(): x1, y1, x2, y2, x3, y3, x4, y4 = canvas.coords(dul) celx = int((x1 + x2 + x3 + x4) / 4) cely = int((y1 + y2 + y3 + y4) / 4) + for idx, c in enumerate(cele): - if c["x1"] < celx: - c["l"] = False - if c["x2"] > celx: - c["l"] = True - if c["l"]: - canvas.move(c["id"], -1, 0) - c["x1"] -= 1 - c["x2"] -= 1 - else: - canvas.move(c["id"], 1, 0) - c["x1"] += 1 - c["x2"] += 1 - c["ip"].place(x=c["x1"] + 2.5, y=c["y1"] - 10) + krok_x=0 + krok_y=0 + dx = celx - c["dul"]["x1"] + dy = cely - c["dul"]["y1"] + odleglosc_kwadrat = dx ** 2 + dy ** 2 + if odleglosc_kwadrat > 40000: + odleglosc = math.sqrt(odleglosc_kwadrat) + predkosc = 1.0 + krok_x = (dx / odleglosc) * predkosc + krok_y = (dy / odleglosc) * predkosc + canvas.move(c["dul"]["id"], krok_x, krok_y) + c["dul"]["x1"] += krok_x + c["dul"]["x2"] += krok_x + c["dul"]["y1"] += krok_y + c["dul"]["y2"] += krok_y + c["ip"].place(x=c["dul"]["x1"] + 2.5, y=c["dul"]["y1"] - 10) c["ip"]['value'] = c["hp"] + cx = (c["dul"]["x1"] + c["dul"]["x2"]) / 2 + cy = (c["dul"]["y1"] + c["dul"]["y2"]) / 2 + + dlugosc_lufy = c["lufa"]["wiel"] + dx = celx - cx + dy = cely - cy + kat_czolgu = math.atan2(dy, dx) + lx = cx + dlugosc_lufy * math.cos(kat_czolgu) + ly = cy + dlugosc_lufy * math.sin(kat_czolgu) + canvas.coords(c["lufa"]["id"], cx, cy, lx, ly) + + canvas.move(c["wieza"]["id"],krok_x,krok_y) def aktualizuj_karabiny(): @@ -180,7 +196,7 @@ def aktualizuj_karabiny(): kamyki_do_usuniecia.append(idx) break for idx, c in enumerate(cele): - if c["x1"] <= px <= c["x2"] and c["y1"] <= py <= c["y2"]: + if c["dul"]["x1"] <= px <= c["dul"]["x2"] and c["dul"]["y1"] <= py <= c["dul"]["y2"]: pociski_do_usuniecia.append(i) if idx not in cele_do_usuniecia: c["hp"] -= 1 @@ -192,8 +208,8 @@ def aktualizuj_karabiny(): for idx in cele_do_usuniecia: c = cele[idx] c["ip"].destroy() - srodek_x = (c["x1"] + c["x2"]) / 2 - srodek_y = (c["y1"] + c["y2"]) / 2 + srodek_x = (c["dul"]["x1"] + c["dul"]["x2"]) / 2 + srodek_y = (c["dul"]["y1"] + c["dul"]["y2"]) / 2 promien_wybuchu = 24 wybuch_id1 = canvas.create_oval(srodek_x - promien_wybuchu, srodek_y - promien_wybuchu, srodek_x + promien_wybuchu, srodek_y + promien_wybuchu, fill="yellow", outline="red", width=2) @@ -215,7 +231,7 @@ def aktualizuj_karabiny(): fill="black", outline="") canvas.tag_lower(slad_id) - canvas.delete(c["id"]) + canvas.delete(c["dul"]["id"]) cele.pop(idx) cele_zniszczone += 1 tekst_celu["text"] = f"Cele do zniszczenia: {cele_zniszczone}/{cel_wymagany}" @@ -282,7 +298,9 @@ def misja(): hp_wrog_id = ttk.Progressbar(root, orient="horizontal", length=25, mode="determinate", style="wrog.Horizontal.TProgressbar", maximum=60) hp_wrog_id.place(x=cx, y=cy - 10) hp_wrog_id['value'] = 10 - cele.append({"id": wrog_id, "x1": cx, "y1": cy, "x2": cx + 30, "y2": cy + 20, "hp": 60, "l": True, "ip": hp_wrog_id}) + long = randrange(5, 20) + lufa_id = canvas.create_line(cx + 15, cy + 10, cx + long + 15, cy + 10, width=long / 5) + cele.append({"dul":{"id": wrog_id, "x1": cx, "y1": cy, "x2": cx + 30, "y2": cy + 20}, "hp": 60, "ip": hp_wrog_id, "lufa": {"id": lufa_id, "x": 0, "y": 0, "wiel": long}}) def aktualizuj_pociski(): @@ -312,7 +330,7 @@ def aktualizuj_pociski(): kamyki_do_usuniecia.append(idx) break for idx, c in enumerate(cele): - if c["x1"] <= px <= c["x2"] and c["y1"] <= py <= c["y2"]: + if c["dul"]["x1"] <= px <= c["dul"]["x2"] and c["dul"]["y1"] <= py <= c["dul"]["y2"]: pociski_do_usuniecia.append(i) if idx not in cele_do_usuniecia: cele_do_usuniecia.append(idx) @@ -322,8 +340,8 @@ def aktualizuj_pociski(): for idx in cele_do_usuniecia: c = cele[idx] - srodek_x = (c["x1"] + c["x2"]) / 2 - srodek_y = (c["y1"] + c["y2"]) / 2 + srodek_x = (c["dul"]["x1"] + c["dul"]["x2"]) / 2 + srodek_y = (c["dul"]["y1"] + c["dul"]["y2"]) / 2 promien_wybuchu = 24 wybuch_id = canvas.create_oval(srodek_x - promien_wybuchu, srodek_y - promien_wybuchu, @@ -337,7 +355,7 @@ def aktualizuj_pociski(): fill="black", outline="") canvas.tag_lower(slad_id) - canvas.delete(c["id"]) + canvas.delete(c["dul"]["id"]) c["ip"].place_forget() cele.pop(idx) cele_zniszczone += 1 @@ -413,7 +431,8 @@ def sprawdz_kolizje_czolgu(): def end(): grafika_misji = PhotoImage(file="GAME-OVER.png") - c = Label(root, image=grafika_misji,bg="black")#darkolivegreen") + c = Label(root, image=grafika_misji, bg="darkolivegreen") + c.image = grafika_misji c.place(relx=0.5, rely=0.5, x=-330) root.after(1000, exit) @@ -656,7 +675,13 @@ for i in range(cel_wymagany): hp_wrog_id = ttk.Progressbar(root, orient="horizontal", length=25, mode="determinate", style="wrog.Horizontal.TProgressbar", maximum=60) hp_wrog_id.place(x=cx, y=cy - 10) hp_wrog_id['value'] = 10 - cele.append({"id": wrog_id, "x1": cx, "y1": cy, "x2": cx + 30, "y2": cy + 20, "hp": 60, "l": True, "ip": hp_wrog_id}) + long = randrange(5, 20) + lufa_id = canvas.create_line(cx + 15, cy + 10, cx + long + 15, cy + 10, width=long / 5) + promien_kola = long / 2 + wieza_id = canvas.create_oval(cx - promien_kola+15, cy - promien_kola+10, cx + promien_kola+15, cy + promien_kola+10, fill="red3", outline="black") + canvas.tag_lower(wieza_id,lufa_id) + cele.append({"dul": {"id": wrog_id, "x1": cx, "y1": cy, "x2": cx + 30, "y2": cy + 20}, "hp": 60, "ip": hp_wrog_id, "lufa": {"id": lufa_id, "x": 0, "y": 0, "wiel": long}, + "wieza": {"id": wieza_id, "pro": promien_kola}}) kamycki = [] for i in range(60):