statek podstawa
This commit is contained in:
parent
6da624638d
commit
f0a7f7cbca
124
statki.py
Normal file
124
statki.py
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
from tkinter import *
|
||||
from random import randrange as rand
|
||||
from math import radians, cos, sin
|
||||
|
||||
|
||||
def obroc(x, y, sx, sy, a_stopnie):
|
||||
a_rad = radians(a_stopnie)
|
||||
x_nowy = (x - sx) * cos(a_rad) - (y - sy) * sin(a_rad) + sx
|
||||
y_nowy = (x - sx) * sin(a_rad) + (y - sy) * cos(a_rad) + sy
|
||||
return x_nowy, y_nowy
|
||||
|
||||
|
||||
def klawisz_wcisniety(event):
|
||||
key = event.keysym.lower()
|
||||
if key in wcisniete_klawisze:
|
||||
wcisniete_klawisze[key] = True
|
||||
|
||||
|
||||
def klawisz_puszczony(event):
|
||||
key = event.keysym.lower()
|
||||
if key in wcisniete_klawisze:
|
||||
wcisniete_klawisze[key] = False
|
||||
|
||||
|
||||
def gluwna():
|
||||
rusz()
|
||||
root.after(16, gluwna)
|
||||
|
||||
|
||||
def rusz():
|
||||
global wcisniete_klawisze, mapa_y, mapa_x, obroc_o
|
||||
v = 4
|
||||
|
||||
a_rad = radians(obroc_o)
|
||||
|
||||
dx = v * sin(a_rad)
|
||||
dy = v * cos(a_rad)
|
||||
|
||||
if wcisniete_klawisze["a"]:
|
||||
obroc_o -= 2
|
||||
|
||||
if wcisniete_klawisze["d"]:
|
||||
obroc_o += 2
|
||||
|
||||
if wcisniete_klawisze["w"]:
|
||||
|
||||
if -1500 < mapa_x + dx < 3600 and -800 < mapa_y - dy < 1800:
|
||||
canvas.move("gwiazdy", -dx, dy)
|
||||
canvas.move(koniec_mapy, -dx, dy)
|
||||
mapa_x += dx
|
||||
mapa_y -= dy
|
||||
|
||||
if wcisniete_klawisze["s"]:
|
||||
if -1500 < mapa_x - dx < 3600 and -800 < mapa_y + dy < 1800:
|
||||
canvas.move("gwiazdy", dx, -dy)
|
||||
canvas.move(koniec_mapy, dx, -dy)
|
||||
mapa_x -= dx
|
||||
mapa_y += dy
|
||||
|
||||
nowe_punkty = []
|
||||
for i in range(0, len(statek_bazowy), 2):
|
||||
bx = statek_bazowy[i]
|
||||
by = statek_bazowy[i + 1]
|
||||
nx, ny = obroc(bx, by, srodek_ekranu_x, srodek_ekranu_y, obroc_o)
|
||||
nowe_punkty.extend([nx, ny])
|
||||
|
||||
canvas.coords(statek, *nowe_punkty)
|
||||
|
||||
if wcisniete_klawisze["w"] or wcisniete_klawisze["s"]:
|
||||
r = 6
|
||||
|
||||
s1 = canvas.create_oval(srodek_ekranu_x - r, srodek_ekranu_y - r, srodek_ekranu_x + r, srodek_ekranu_y + r, fill="#000000", outline="", tags="gwiazdy")
|
||||
for i in range(100):
|
||||
wartosc_rgb = int((99 - i) * (255 / 99))
|
||||
he = f"{wartosc_rgb:02X}"
|
||||
kolor = f"#{he}0000"
|
||||
root.after(i * 12, lambda k=kolor: canvas.itemconfig(s1, fill=k))
|
||||
|
||||
root.after(1200, lambda: canvas.delete(s1))
|
||||
canvas.tag_lower(s1)
|
||||
|
||||
|
||||
root = Tk()
|
||||
root.geometry("1000x700")
|
||||
root.attributes("-fullscreen", True)
|
||||
|
||||
canvas = Canvas(root, bg="black", highlightthickness=0)
|
||||
canvas.pack(fill="both", expand=True)
|
||||
|
||||
koniec_mapy = canvas.create_rectangle(-1900, -1000, 3800, 2000, fill="", outline="red", width=5)
|
||||
|
||||
for i in range(5000):
|
||||
x = rand(-1900, 3800)
|
||||
y = rand(-1000, 2000)
|
||||
r = 2
|
||||
g = canvas.create_oval(x, y, x + r, y + r, fill="white", outline="", tags="gwiazdy")
|
||||
|
||||
wcisniete_klawisze = {"w": False, "s": False, "a": False, "d": False, "space": False}
|
||||
|
||||
root.update()
|
||||
|
||||
x_w = canvas.winfo_width()
|
||||
y_w = canvas.winfo_height()
|
||||
|
||||
srodek_ekranu_x = x_w / 2
|
||||
srodek_ekranu_y = y_w / 2
|
||||
|
||||
mapa_x = srodek_ekranu_x
|
||||
mapa_y = srodek_ekranu_y
|
||||
|
||||
x = 20
|
||||
y = 30
|
||||
|
||||
statek_bazowy = [srodek_ekranu_x, srodek_ekranu_y - y, srodek_ekranu_x + x, srodek_ekranu_y + y, srodek_ekranu_x, srodek_ekranu_y, srodek_ekranu_x - x, srodek_ekranu_y + y]
|
||||
|
||||
statek = canvas.create_polygon(*statek_bazowy, fill="lightblue", outline="")
|
||||
|
||||
obroc_o = 0
|
||||
root.bind("<KeyPress>", klawisz_wcisniety)
|
||||
root.bind("<KeyRelease>", klawisz_puszczony)
|
||||
root.bind("<Escape>", lambda event: root.destroy())
|
||||
|
||||
gluwna()
|
||||
root.mainloop()
|
||||
Loading…
Reference in a new issue