bunkier + strelanie celów
This commit is contained in:
parent
df82b85a75
commit
6da624638d
144
statek.py
144
statek.py
|
|
@ -2,6 +2,7 @@ import math
|
|||
from tkinter import *
|
||||
from tkinter import ttk
|
||||
from random import randrange
|
||||
import random
|
||||
|
||||
|
||||
def obroc_prostokat_o_2_stopnie_zg(canvas, element_id):
|
||||
|
|
@ -96,9 +97,9 @@ def strzal_z_karabinu():
|
|||
start_x = cx + dlugosc_lufy * math.cos(kat_myszy)
|
||||
start_y = cy + dlugosc_lufy * math.sin(kat_myszy)
|
||||
|
||||
predkosc_karabinu = 12
|
||||
dx = predkosc_karabinu * math.cos(kat_myszy)
|
||||
dy = predkosc_karabinu * math.sin(kat_myszy)
|
||||
predkosc_karabinu = 11
|
||||
dx = predkosc_karabinu * math.cos(kat_myszy) + random.uniform(-0.8, 0.8)
|
||||
dy = predkosc_karabinu * math.sin(kat_myszy) + random.uniform(-0.8, 0.8)
|
||||
|
||||
r_karabinu = 1
|
||||
id_karabinu = canvas.create_oval(start_x - r_karabinu, start_y - r_karabinu, start_x + r_karabinu, start_y + r_karabinu, fill="black", outline="")
|
||||
|
|
@ -137,41 +138,122 @@ 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):
|
||||
krok_x = 0
|
||||
krok_y = 0
|
||||
for idx, c in enumerate(cele):
|
||||
dx = celx - c["dul"]["x1"]
|
||||
dy = cely - c["dul"]["y1"]
|
||||
odleglosc_kwadrat = dx ** 2 + dy ** 2
|
||||
if odleglosc_kwadrat > 40000:
|
||||
if c.get("omijanie", 0) > 0:
|
||||
c["omijanie"] -= 1
|
||||
krok_x = c["boczny_x"]
|
||||
krok_y = c["boczny_y"]
|
||||
|
||||
canvas.move(c["wieza"]["id"], krok_x, krok_y)
|
||||
canvas.move(c["lufa"]["id"], krok_x, krok_y)
|
||||
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
|
||||
|
||||
elif 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
|
||||
canvas.move(c["wieza"]["id"], krok_x, krok_y)
|
||||
canvas.move(c["lufa"]["id"], krok_x, krok_y)
|
||||
wspol = canvas.coords(c["dul"]["id"])
|
||||
if len(wspol) < 8:
|
||||
return
|
||||
|
||||
xs = [wspol[i] for i in range(0, len(wspol), 2)]
|
||||
ys = [wspol[i] for i in range(1, len(wspol), 2)]
|
||||
cx = sum(xs) / len(xs)
|
||||
cy = sum(ys) / len(ys)
|
||||
|
||||
promien_czolgu = 18
|
||||
|
||||
for k in kamycki:
|
||||
kx_srodek = k["x"] + (k["pr"] / 2)
|
||||
ky_srodek = k["y"] + (k["pr"] / 2)
|
||||
odleglosc_kamyka = math.sqrt((cx - kx_srodek) ** 2 + (cy - ky_srodek) ** 2)
|
||||
min_odleglosc = promien_czolgu + (k["pr"] / 2)
|
||||
|
||||
if odleglosc_kamyka < min_odleglosc:
|
||||
|
||||
nakladanie = min_odleglosc - odleglosc_kamyka
|
||||
kat = math.atan2(cy - ky_srodek, cx - kx_srodek)
|
||||
|
||||
odbicie_x = nakladanie * math.cos(kat)
|
||||
odbicie_y = nakladanie * math.sin(kat)
|
||||
|
||||
canvas.move(c["dul"]["id"], odbicie_x, odbicie_y)
|
||||
canvas.move(c["wieza"]["id"], odbicie_x, odbicie_y)
|
||||
canvas.move(c["lufa"]["id"], odbicie_x, odbicie_y)
|
||||
|
||||
c["dul"]["x1"] += odbicie_x
|
||||
c["dul"]["x2"] += odbicie_x
|
||||
c["dul"]["y1"] += odbicie_y
|
||||
c["dul"]["y2"] += odbicie_y
|
||||
c["hp"] -= 1
|
||||
if randrange(0, 2) == 1:
|
||||
c["boczny_x"] = math.sin(kat)
|
||||
c["boczny_y"] = -math.cos(kat)
|
||||
else:
|
||||
c["boczny_x"] = -math.sin(kat)
|
||||
c["boczny_y"] = math.cos(kat)
|
||||
c["omijanie"] = 35
|
||||
break
|
||||
|
||||
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)
|
||||
dx_celu = celx - cx
|
||||
dy_celu = cely - cy
|
||||
kat_czolgu = math.atan2(dy_celu, dx_celu)
|
||||
|
||||
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)
|
||||
if odleglosc_kwadrat < 160000 and not c["karabiny"]["czyprze"] and c["karabiny"]["mag"] > 0:
|
||||
c["karabiny"]["mag"] -= 1
|
||||
dlugosc_wylotu = 8
|
||||
start_x = cx + dlugosc_wylotu * math.cos(kat_czolgu)
|
||||
start_y = cy + dlugosc_wylotu * math.sin(kat_czolgu)
|
||||
|
||||
canvas.move(c["wieza"]["id"],krok_x,krok_y)
|
||||
predkosc_karabinu = 11
|
||||
bullet_dx = predkosc_karabinu * math.cos(kat_czolgu) + random.uniform(-0.8, 0.8)
|
||||
bullet_dy = predkosc_karabinu * math.sin(kat_czolgu) + random.uniform(-0.8, 0.8)
|
||||
|
||||
r_karabinu = 1
|
||||
id_karabinu = canvas.create_oval(start_x - r_karabinu, start_y - r_karabinu, start_x + r_karabinu, start_y + r_karabinu, fill="black", outline="")
|
||||
|
||||
karabiny.append({"id": id_karabinu, "dx": bullet_dx, "dy": bullet_dy})
|
||||
|
||||
if c["karabiny"]["mag"] == 0:
|
||||
c["karabiny"]["czyprze"] = True
|
||||
if c["karabiny"]["czyprze"]:
|
||||
c["karabiny"]["prze"] += 1
|
||||
|
||||
if c["karabiny"]["prze"] >= 80:
|
||||
c["karabiny"]["czyprze"] = False
|
||||
c["karabiny"]["prze"] = 0
|
||||
c["karabiny"]["mag"] = 80
|
||||
|
||||
|
||||
def aktualizuj_karabiny():
|
||||
global cele_zniszczone
|
||||
global cele_zniszczone, hp, hpbar
|
||||
szerokosc_okna = canvas.winfo_width()
|
||||
wysokosc_okna = canvas.winfo_height()
|
||||
|
||||
|
|
@ -180,7 +262,9 @@ def aktualizuj_karabiny():
|
|||
cele_do_usuniecia = []
|
||||
for i in range(len(karabiny) - 1, -1, -1):
|
||||
p = karabiny[i]
|
||||
canvas.move(p["id"], p["dx"], p["dy"])
|
||||
dx = p["dx"]
|
||||
dy = p["dy"]
|
||||
canvas.move(p["id"], dx, dy)
|
||||
|
||||
coords = canvas.coords(p["id"])
|
||||
if coords:
|
||||
|
|
@ -188,7 +272,6 @@ def aktualizuj_karabiny():
|
|||
if px < 0 or px > szerokosc_okna or py < 0 or py > wysokosc_okna:
|
||||
pociski_do_usuniecia.append(i)
|
||||
continue
|
||||
|
||||
for idx, j in enumerate(kamycki):
|
||||
if j["x"] <= px <= j["x"] + j["pr"] and j["y"] <= py <= j["y"] + j["pr"]:
|
||||
pociski_do_usuniecia.append(i)
|
||||
|
|
@ -203,6 +286,11 @@ def aktualizuj_karabiny():
|
|||
if c["hp"] <= 0:
|
||||
cele_do_usuniecia.append(idx)
|
||||
break
|
||||
wym = canvas.coords(dul)
|
||||
if min(wym[0], wym[2], wym[4], wym[6]) < px < max(wym[0], wym[2], wym[4], wym[6]) and min(wym[1], wym[3], wym[5], wym[7]) < py < max(wym[1], wym[3], wym[5], wym[7]):
|
||||
hp -= 0.01
|
||||
hpile["text"] = str(int(hp))
|
||||
hpbar['value'] = hp
|
||||
|
||||
cele_do_usuniecia.sort(reverse=True)
|
||||
for idx in cele_do_usuniecia:
|
||||
|
|
@ -226,9 +314,7 @@ def aktualizuj_karabiny():
|
|||
root.after(1000, lambda wid2=wybuch_id2: canvas.delete(wid2))
|
||||
root.after(1500, lambda wid3=wybuch_id3: canvas.delete(wid3))
|
||||
root.after(3000, lambda wid4=wybuch_id4: canvas.delete(wid4))
|
||||
slad_id = canvas.create_rectangle(srodek_x - 15, srodek_y - 10,
|
||||
srodek_x + 15, srodek_y + 10,
|
||||
fill="black", outline="")
|
||||
slad_id = canvas.create_rectangle(srodek_x - 15, srodek_y - 10, srodek_x + 15, srodek_y + 10, fill="black", outline="")
|
||||
canvas.tag_lower(slad_id)
|
||||
|
||||
canvas.delete(c["dul"]["id"])
|
||||
|
|
@ -300,7 +386,7 @@ def misja():
|
|||
hp_wrog_id['value'] = 10
|
||||
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}})
|
||||
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}, "karabiny": {"mag": 80, "prze": 100, "czyprze": False}, "omijanie": 0, "boczny_x": 0.0, "boczny_y": 0.0})
|
||||
|
||||
|
||||
def aktualizuj_pociski():
|
||||
|
|
@ -404,7 +490,6 @@ def sprawdz_kolizje_czolgu():
|
|||
promien_czolgu = 18
|
||||
|
||||
for k in kamycki:
|
||||
|
||||
kx_srodek = k["x"] + (k["pr"] / 2)
|
||||
ky_srodek = k["y"] + (k["pr"] / 2)
|
||||
odleglosc = math.sqrt((cx - kx_srodek) ** 2 + (cy - ky_srodek) ** 2)
|
||||
|
|
@ -680,8 +765,7 @@ for i in range(cel_wymagany):
|
|||
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}})
|
||||
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}, "karabiny": {"mag": 80, "prze": 100, "czyprze": False}, "omijanie": 0, "boczny_x": 0.0, "boczny_y": 0.0})
|
||||
|
||||
kamycki = []
|
||||
for i in range(60):
|
||||
|
|
@ -692,6 +776,24 @@ for i in range(60):
|
|||
t = canvas.create_oval(kax, kay, kax + wt, kay + wt, fill=ka, outline="")
|
||||
canvas.tag_lower(t)
|
||||
kamycki.append({"id": t, "x": kax, "y": kay, "pr": wt})
|
||||
x = randrange(0, 1900)
|
||||
y = randrange(0, 1000)
|
||||
bunkier = []
|
||||
for j in range(8):
|
||||
for i in range(100):
|
||||
bunkier.append([x + (j * 2), y + (i * 2) - 100])
|
||||
for i in range(140):
|
||||
bunkier.append([x + randrange(-10, 1), y + randrange(-100, 100)])
|
||||
for i in range(140):
|
||||
bunkier.append([x + randrange(16, 26), y + randrange(-100, 100)])
|
||||
|
||||
for x, y in bunkier:
|
||||
ka = "grey" + str(randrange(30, 40))
|
||||
wt = 3
|
||||
t = canvas.create_oval(x, y, x + wt, y + wt, fill=ka, outline="")
|
||||
canvas.tag_lower(t)
|
||||
kamycki.append({"id": t, "x": x, "y": y, "pr": wt})
|
||||
x = 0
|
||||
|
||||
for i in range(1600):
|
||||
trxx = randrange(0, 1900)
|
||||
|
|
|
|||
Loading…
Reference in a new issue