diff --git a/__pycache__/levels.cpython-311.pyc b/__pycache__/levels.cpython-311.pyc new file mode 100644 index 0000000..ee261e9 Binary files /dev/null and b/__pycache__/levels.cpython-311.pyc differ diff --git a/levels.py b/levels.py new file mode 100644 index 0000000..6466d1c --- /dev/null +++ b/levels.py @@ -0,0 +1,6 @@ +levels = [ +(2,[50,120]), +(3,[50,80,100]), +(4,[50,80,100,120]), +(4,[0,80,100,120]), +] \ No newline at end of file diff --git a/main.py b/main.py index 6a80acf..b14ca18 100644 --- a/main.py +++ b/main.py @@ -1,26 +1,11 @@ #!/usr/bin/python3 import pygame from math import radians,sin,cos +import levels pygame.init() default_font = pygame.font.SysFont("sans", 14) -def draw_arrow(winkel,pos,radius): - pygame.draw.line(screen,(255,255,255), - pos[0]+sin(radians(winkel)*radius), - pos[0]+sin(radians(winkel)*radius) - ) - -arrows = [10,50,80] - -fill_screen = True -show_debug = False -screen = pygame.display.set_mode((600,500)) -pygame.display.set_caption("Shot") -screensize = pygame.display.get_window_size() - -clock = pygame.time.Clock() - def get_debug_text(): def text(text,line_counter): debug_text = default_font.render(str(text), True, (240, 240, 240)) @@ -32,17 +17,100 @@ def get_debug_text(): text(f"{str(a)} = {str(globalvars[a])}",line_counter) line_counter += 1 +def bubble_sort(liste): + n = len(liste) + for i in range(n): + for j in range(n - i - 1): + if liste[j] > liste[j + 1]: + liste[j], liste[j + 1] = liste[j + 1], liste[j] +def make_level(level): + for a in levels.levels[level][1]: + arrows.append(Arrow(a,circle_pos,circle_radius)) + return levels.levels[level][0] + +class Arrow(): + def __init__(self,winkel,pos,radius) -> None: + self.radius = radius + self.winkel = winkel + self.pos = pos + self.länge = 60 + def draw(self): + radian = radians(self.winkel+rotate) + pygame.draw.line(screen, (255, 255, 255), + (self.pos[0] + sin(radian) * self.radius, self.pos[1] + cos(radian) * self.radius), + (self.pos[0] + sin(radian) * (self.radius + self.länge), self.pos[1] + cos(radian) * (self.radius + self.länge)), + 6) + pygame.draw.circle(screen,color,(self.pos[0] + sin(radian) * (self.radius + self.länge), self.pos[1] + cos(radian) * (self.radius + self.länge)),7) + def sind_winkel_nahe(self,winkel,toleranz=3): + winkel1 = winkel % 360 + winkel2 = self.winkel % 360 + + differenz = abs(winkel1 - winkel2) + + if differenz <= toleranz or differenz >= 360 - toleranz:return True + else:return False +class Bow(): + def __init__(self,pos) -> None: + self.cooldown = 2 + self.pos = pos + self.posa = self.pos + self.animate = False + def draw(self): + pygame.draw.line(screen, (255, 255, 255), + self.posa, + (self.posa[0]+60, self.posa[1]),6) + pygame.draw.circle(screen,color,(self.posa[0]+60, self.posa[1]),7) + def update(self): + if self.animate: + x,y = self.posa + x += 40 + self.posa = x,y + if x >= circle_pos[0]-60: + self.animate = False + self.posa = self.pos + arrows.append(Arrow(-90-rotate,circle_pos,circle_radius)) + + self.draw() + def shot(self): + self.animate = True + +fill_screen = True +show_debug = False +screen = pygame.display.set_mode((900,500),pygame.RESIZABLE) +pygame.display.set_caption("Shot") +screensize = pygame.display.get_window_size() + +clock = pygame.time.Clock() + +circle_pos = screensize[0]//5*4,screensize[1]//2 +circle_radius = 110 +rotate = 0 +rotate_speed = 1 + +bow = Bow((screensize[0]//5,screensize[1]//2)) + +arrows = [] + +bg_color = (0,0,0) +color = (255,255,255) + +level = 0 +to_shot = make_level(0) + running = True if __name__ == "__main__": while running: + arrow_angles = [] if fill_screen: - screen.fill((0,0,0)) + screen.fill(bg_color) pressed_keys = pygame.key.get_pressed() if pressed_keys[pygame.K_ESCAPE]: exit() - if pressed_keys[pygame.K_SPACE] and not preview_pressed_keys[pygame.K_SPACE]: + if pressed_keys[pygame.K_a] and not preview_pressed_keys[pygame.K_a]: fill_screen = not fill_screen + if pressed_keys[pygame.K_SPACE] and not preview_pressed_keys[pygame.K_SPACE]: + bow.shot() if pressed_keys[pygame.K_d] and not preview_pressed_keys[pygame.K_d]: show_debug = not show_debug @@ -53,8 +121,19 @@ if __name__ == "__main__": exit() if event.type == pygame.WINDOWRESIZED: screensize = pygame.display.get_window_size() - - pygame.draw.circle(screen,(100,100,100),(0,0),30) + if event.type == pygame.WINDOWRESIZED: + screensize = pygame.display.get_window_size() + circle_pos = screensize[0]//5*4,screensize[1]//2 + bow.pos = screensize[0]//5,screensize[1]//2 + bow.posa = screensize[0]//5,screensize[1]//2 + for a in arrows: + a.pos = circle_pos + bow.update() + pygame.draw.circle(screen,color,circle_pos,circle_radius) + for a in arrows: + a.draw() + arrow_angles.append(a.winkel) + rotate += 2 if show_debug: get_debug_text()