diff --git a/GameObject.py b/GameObject.py index 04e22ee..df092a9 100644 --- a/GameObject.py +++ b/GameObject.py @@ -14,7 +14,7 @@ class GameObject(object): self.image = image self.rect:pygame.Rect self.objects.append(self) - self.keymap = {"up":False, "down":False, "left":False, "right":False} + def get_objectinfo(self): print(F"Gameobject-Info: \n", @@ -38,6 +38,12 @@ class GameObject(object): self.width = width self.height = height + def __del__(self): + #Remove objectpoint on delete from static + if(len(self.objects) > 0): + print(F"Remove: {self}") + self.objects.remove(self) + class Player(GameObject): def __init__(self, name, screen, pos_x, pos_y, width, height, image=None) -> None: super().__init__(name, pos_x, pos_y, width, height, image) @@ -49,6 +55,7 @@ class Player(GameObject): self.kills = 0 #self._healthbar = pygame.rect.Rect((15, self.screen.get_size()[1]-50, 100, 20)) self.healthbar = interface.Healthbar(screen, "Player1", 25, screen.get_size()[1]-80, 300, 10, self.get_health()) + self.keymap = {"up":False, "down":False, "left":False, "right":False} def handle_input(self, event:pygame.event.EventType): if(event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT): @@ -99,7 +106,7 @@ class Player(GameObject): projectile_width = 6 projectile_height = 10 shot = Projectile(self.name, self.pos_x+(self.width/2)-(projectile_width/2), self.pos_y-projectile_height, projectile_width, projectile_height, screen, 8) - + #Maybe change this by another subroutine in Projectiles class def firecontrol(self, screen): if(len(Projectile.shots) > 0): for objects in Projectile.shots: @@ -154,6 +161,8 @@ class Enemy(GameObject): super().__init__(name, pos_x, pos_y, width, height, image) self.screen = screen self.movespeed = 10 + self._target_x = 0 + self._target_y = 0 self.weapon:Weapons = None def fire(self, screen): @@ -171,8 +180,10 @@ class Enemy(GameObject): def move(self, x=0, y=0): if(x != 0): self.pos_x += x + self.weapon.pos_x = self.pos_x+(self.width/2) if(y != 0): self.pos_y += y + def give_weapon(self, weapon): self.weapon = weapon @@ -235,4 +246,8 @@ class Item(GameObject): class item_extra_life(Item): def __init__(self, name, pos_x, pos_y, width, height, image=None) -> None: super().__init__(name, pos_x, pos_y, width, height, image) - self.speed = 10 \ No newline at end of file + self.speed = 10 + +class barricade1(GameObject): + def __init__(self, name, pos_x, pos_y, width, height, image=None) -> None: + super().__init__(name, pos_x, pos_y, width, height, image) \ No newline at end of file diff --git a/animations.py b/animations.py index 8e9c1fd..390af03 100644 --- a/animations.py +++ b/animations.py @@ -1,3 +1,7 @@ class animation(object): def __init__(self) -> None: - pass \ No newline at end of file + pass + + def flyin(self, object): + pass + \ No newline at end of file diff --git a/levels.py b/levels.py index 321fa0b..3e2d038 100644 --- a/levels.py +++ b/levels.py @@ -10,6 +10,9 @@ class level(object): self.num_enemys = num_enemys self.spawn_waves = spawn_waves self._completed = False + + def run(self): + pass class first_level(level): def __init__(self, name, size: tuple, num_enemys, spawn_waves) -> None: diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..1fc0e85 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +altgraph==0.17.4 +packaging==24.1 +pygame==2.6.0 +pyinstaller==6.10.0 +pyinstaller-hooks-contrib==2024.8 +setuptools==72.2.0 diff --git a/sprites/enemy_1.png b/sprites/enemy_1.png new file mode 100644 index 0000000..69c6f04 Binary files /dev/null and b/sprites/enemy_1.png differ diff --git a/sprites/enemy_1.svg b/sprites/enemy_1.svg new file mode 100644 index 0000000..e292f0b --- /dev/null +++ b/sprites/enemy_1.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + diff --git a/test.py b/test.py index 40eb313..42c6407 100644 --- a/test.py +++ b/test.py @@ -35,6 +35,7 @@ log.writeln("Loading images...") image_enemy = Utils.load_image("Rastergrafik.png") testimage = Utils.load_image("Rastergrafik.png") +enemy1 = Utils.load_image("sprites/enemy_1.png") spaceship = Utils.load_image("sprites/spaceship_1_transp.png", (255,0,255)) log.writeln("Setup fonts...") @@ -64,19 +65,24 @@ spawned_enemys = list() i = 0 startpos_x = 50 startpos_y = 30 -for enemys in range(10): - tmp_weapon = weapons.Laserblaster("Laserblaster", startpos_x, startpos_y, 5, 10, 30, 1, 0, screen, testimage) - tmp = GameObject.Enemy(F"Enemy-{i}", startpos_x,startpos_y,35,35, screen, testimage) +for enemys in range(80): + tmp_weapon = weapons.Laserblaster("Laserblaster", startpos_x, startpos_y+60, 5, 10, 30, 1, 0, screen, testimage) + tmp = GameObject.Enemy(F"Enemy-{i}", startpos_x,startpos_y,60,60, screen, enemy1) tmp.give_weapon(tmp_weapon) if(startpos_x >= (screen.get_size()[0]-150)): startpos_y += 50 startpos_x = 0 print(tmp.get_weapon()) spawned_enemys.append(tmp) - startpos_x += 50 - + startpos_x += (tmp.width+15) i += 1 +startpos_x = 500 +startpos_y = 500 +tmp_weapon = weapons.Laserblaster("Laserblaster", startpos_x, startpos_y+60, 5, 10, 30, 1, 0, screen, testimage) +e1 = GameObject.Enemy(F"Enemy-{i}", startpos_x,startpos_y,60,60, screen, enemy1) +e1.give_weapon(tmp_weapon) + gamestate = True milliseconds = pygame.time.get_ticks() @@ -115,7 +121,6 @@ while(gamestate): if(player.keymap["right"] == True and player.pos_x <= (screen.get_size()[0]-player.width)): player.move("right") - print(player.points) player.update_interface() player.render(screen) @@ -124,6 +129,9 @@ while(gamestate): player1.firecontrol(screen) player2.firecontrol(screen) + for key, obj in enumerate(GameObject.GameObject.objects): + print(key, obj) + #TODO If Playerposition are on the same x-axis then gamble hit by 50% chance @@ -147,13 +155,13 @@ while(gamestate): del spawned_enemys[index] index = GameObject.Projectile.shots.index(projectiles) del GameObject.Projectile.shots[index] - #print(F"Player-Points: {player1.points}") - #print(F"Player-Points: {player2.points}") + index = GameObject.GameObject.objects.index(projectile) + #Report playerkills by player if(projectile.name == "Player"): - player1.kills += 1 + players[0].kills += 1 if(projectile.name == "Player2"): - player2.kills += 1 + players[1].kills += 1 #TODO Buggy pygame colliderect is true until projectile passed the hole playrect # Life decrease only once! @@ -182,10 +190,10 @@ while(gamestate): for enemy in spawned_enemys: enemy:GameObject.Enemy - if rand == 20: + if rand == 20 and (enemy.pos_x != 0 or enemy.pos_x >= (screen.get_size()[0]+enemy.width)): enemy.move(5) #enemy.movementqueue.append(5) - if rand == 50: + if rand == 50 and (enemy.pos_x != 0 or enemy.pos_x >= (screen.get_size()[0]+enemy.width)): enemy.move(-5) #enemy.movementqueue.append(-5) rand1 = random.randint(0, 1000) @@ -195,6 +203,8 @@ while(gamestate): enemy.render(screen) enemy.firecontrol(screen) + + screen label1 = font1.render(F"Score: {player1.points}", True, (255,0,0)) fps_label = font2.render(F"FPS: {int(clock.get_fps())}", True, (255,0,0)) @@ -207,8 +217,6 @@ while(gamestate): #Blits the mainsurface to the mainwindow window.blit(scaled_win, (0, 0)) - #if(mouse_pos <= (image.topleft+image.size) and mouse_pos >= image.topleft): - # print("HIIIIITTT!!!!") clock.tick(60) pygame.display.flip() diff --git a/weapons.py b/weapons.py index 202c61e..167444c 100644 --- a/weapons.py +++ b/weapons.py @@ -5,6 +5,6 @@ class Laserblaster(GameObject.Weapons): super().__init__(name, pos_x, pos_y, width, height, damage, firerate, duration, screen, image) self.screen = screen self.image = image - + def fire(self): self.projectile = GameObject.Projectile("Enemy", self.pos_x, self.pos_y, 5, 10, self.screen, 2, self.image)