Added requirements.txt

Fixed projectilespawn from enemys
This commit is contained in:
Christian
2024-08-26 22:03:26 +02:00
parent ae750f236d
commit 89c5dcc6d1
8 changed files with 130 additions and 19 deletions

View File

@@ -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
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)

View File

@@ -1,3 +1,7 @@
class animation(object):
def __init__(self) -> None:
pass
pass
def flyin(self, object):
pass

View File

@@ -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:

6
requirements.txt Normal file
View File

@@ -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

BIN
sprites/enemy_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

75
sprites/enemy_1.svg Normal file
View File

@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="60"
height="60"
viewBox="0 0 15.874998 15.874998"
version="1.1"
id="svg1"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
sodipodi:docname="enemy_1.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
inkscape:zoom="5.8658912"
inkscape:cx="66.145107"
inkscape:cy="36.823049"
inkscape:window-width="2560"
inkscape:window-height="1368"
inkscape:window-x="2560"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1">
<inkscape:path-effect
effect="bspline"
id="path-effect10"
is_visible="true"
lpeversion="1.3"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false"
uniform="false" />
</defs>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#44a900;stroke-width:0.264583"
d="m -23.680329,-16.283045 c 0,0 31.3031395,20.4327406 31.3031395,20.4327406"
id="path10"
inkscape:path-effect="#path-effect10"
inkscape:original-d="M -23.680329,-16.283045 7.6228105,4.1496956" />
<ellipse
style="fill:#b3b3b3;stroke-width:0.335313"
id="path11"
cx="7.8524895"
cy="7.7682891"
rx="3.9080892"
ry="4.1147518" />
<ellipse
style="fill:#b3b3b3;stroke-width:0.3716"
id="path12"
cx="7.937499"
cy="9.6954823"
rx="7.937499"
ry="3.6149874" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

36
test.py
View File

@@ -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()

View File

@@ -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)