Added requirements.txt
Fixed projectilespawn from enemys
This commit is contained in:
@@ -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)
|
||||
@@ -1,3 +1,7 @@
|
||||
class animation(object):
|
||||
def __init__(self) -> None:
|
||||
pass
|
||||
pass
|
||||
|
||||
def flyin(self, object):
|
||||
pass
|
||||
|
||||
@@ -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
6
requirements.txt
Normal 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
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
75
sprites/enemy_1.svg
Normal 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
36
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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user