Added some testsprites

Added 2 Player gamemode
Some changes to get second player handled
This commit is contained in:
Christian
2024-08-25 22:19:48 +02:00
parent 923f476303
commit 9dc0b6289f
10 changed files with 982 additions and 51 deletions

View File

@@ -1,5 +1,5 @@
import pygame
import interface
#Statics
spawned_enemys = list()
@@ -25,7 +25,7 @@ class GameObject(object):
def render(self, screen:pygame.Surface):
if(self.image is not None):
self.rect = screen.blit(self.image, (self.pos_x, self.pos_y))
self.rect = screen.blit(self.image, (self.pos_x, self.pos_y, self.width, self.height))
else:
self.rect = pygame.draw.rect(screen, (255,0,0), (self.pos_x, self.pos_y, self.width, self.height))
return
@@ -47,7 +47,8 @@ class Player(GameObject):
self._health = 100
self.lifes = 2
self.kills = 0
self._healthbar = pygame.rect.Rect((15, self.screen.get_size()[1]-50, 100, 20))
#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())
def handle_input(self, event:pygame.event.EventType):
if(event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT):
@@ -90,6 +91,10 @@ class Player(GameObject):
if(direction == "right"):
self.pos_x += self._speed
def update_interface(self):
self.healthbar.update(self._health)
self.healthbar.render(self.screen)
def fire(self, screen):
projectile_width = 6
projectile_height = 10
@@ -110,6 +115,7 @@ class Player(GameObject):
def get_health(self):
return self._health
class Player2(Player):
def __init__(self, name, screen, pos_x, pos_y, width, height, image=None) -> None:
@@ -210,6 +216,7 @@ class Weapons(GameObject):
self.duration = duration
self.sprite = ""
self.mountingpos = list()
self.soundfile = ""
def fire(self):
print(F"Feuere: {self.name}")

View File

@@ -17,6 +17,6 @@ def load_image(filename, colorkey=None):
if colorkey is not None:
if colorkey is -1:
colorkey = image.get_at((0,0))
image.set_colorkey(colorkey, pygame.RLEACCEL)
image.set_colorkey(colorkey)
return image

View File

@@ -46,6 +46,10 @@ def item_handler(screen:pygame.Surface):
item.move(0, item.speed)
item.render(screen)
def handle_playerinput(players):
for player in players():
pass
def spawn_item_random(screen:pygame.Surface):
items_spawned.append(copy.deepcopy(items[0]))

56
sprites/Zeichnung.svg Normal file
View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="500"
height="500"
viewBox="0 0 132.29166 132.29167"
version="1.1"
id="svg1"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
sodipodi:docname="Zeichnung.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="mm"
inkscape:zoom="4.1478114"
inkscape:cx="106.32113"
inkscape:cy="96.436399"
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" />
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#ff00ff;stroke-width:0.251734"
id="rect1"
width="132.29167"
height="132.29167"
x="0"
y="0" />
<rect
style="fill:#241c1c;stroke-width:0.130533"
id="rect2"
width="7.9375"
height="7.9375"
x="0"
y="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

56
sprites/backgorund1.svg Normal file
View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="500"
height="500"
viewBox="0 0 132.29166 132.29167"
version="1.1"
id="svg1"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
sodipodi:docname="backgorund1.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="mm"
inkscape:zoom="4.1478114"
inkscape:cx="106.32113"
inkscape:cy="96.436399"
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" />
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#ff00ff;stroke-width:0.251734"
id="rect1"
width="132.29167"
height="132.29167"
x="0"
y="0" />
<rect
style="fill:#241c1c;stroke-width:0.130533"
id="rect2"
width="7.9375"
height="7.9375"
x="0"
y="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

411
sprites/just_fun.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 86 KiB

BIN
sprites/spaceship_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

406
sprites/spaceship_1.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

85
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")
spaceship = Utils.load_image("sprites/spaceship_1_transp.png", (255,0,255))
log.writeln("Setup fonts...")
font1 = pygame.font.Font("/usr/share/fonts/TTF/Inconsolata-UltraExpandedExtraBold.ttf", 30)
@@ -47,10 +48,14 @@ log.writeln(F"Git-Hash: {short_hash}")
#testimage.set_colorkey((255,0,255), pygame.RLEACCELOK)
player1 = GameObject.Player("Player", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-100, 35, 35, testimage)
player2 = GameObject.Player2("Player2", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-100, 35, 35, testimage)
players = [
GameObject.Player("Player", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-175, 60, 60, spaceship),
#GameObject.Player2("Player2", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-175, 60, 60, spaceship)
]
player1 = GameObject.Player("Player", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-175, 60, 60, spaceship)
player2 = GameObject.Player2("Player2", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-175, 60, 60, spaceship)
healthbar1 = interface.Healthbar(screen, "Player1", 25, screen.get_size()[1]-80, 300, 10, player1.get_health())
game.loadlevels()
@@ -97,25 +102,26 @@ while(gamestate):
#Push F9 for window-mode
if(event.type == pygame.KEYDOWN and event.key == pygame.K_F9):
pygame.display.set_mode((RENDERING_SIZE))
player1.handle_input(event)
player2.handle_input(event)
for player in players:
player:GameObject.Player
player.handle_input(event)
for player in players:
player:GameObject.Player
if(player.keymap["left"] == True and player.pos_x > 0):
player.move("left")
#print("links")
if(player.keymap["right"] == True and player.pos_x <= (screen.get_size()[0]-player.width)):
player.move("right")
player.update_interface()
player.render(screen)
if(player1.keymap["left"] == True and player1.pos_x > 0):
player1.move("left")
#print("links")
if(player1.keymap["right"] == True and player1.pos_x <= (screen.get_size()[0]-player1.width)):
player1.move("right")
#print("rechts")
if(player2.keymap["left"] == True and player2.pos_x > 0):
player2.move("left")
#print("links")
if(player2.keymap["right"] == True and player2.pos_x <= (screen.get_size()[0]-player2.width)):
player2.move("right")
#print("rechts")
game.run(screen)
healthbar1.update(player1.get_health())
healthbar1.render(screen)
player1.firecontrol(screen)
player2.firecontrol(screen)
@@ -129,12 +135,7 @@ while(gamestate):
#Check if player hits an enemy delete it
for enemy in spawned_enemys:
enemy:GameObject.Enemy
if(pygame.Rect.colliderect(player1.rect, player2.rect)):
#TODO: Laterrr!!
#print("Collision")
pass
if(pygame.Rect.colliderect(projectile.rect, enemy.rect)):
#print("HIT")
#Check if only a playerhit despawn enemys
if(projectile.name == "Player" or projectile.name == "Player2"):
player1.points += 10
@@ -153,25 +154,18 @@ while(gamestate):
#TODO Buggy pygame colliderect is true until projectile passed the hole playrect
# Life decrease only once!
if(pygame.Rect.colliderect(projectile.rect, player1.rect)):
#print("Game-Over")
player1.get_damage(enemy.get_weapon().damage)
try:
index = GameObject.Projectile.shots.index(projectiles)
del GameObject.Projectile.shots[index]
except:
print("Error on indexing projectile")
#TODO Add Gameover event
if(pygame.Rect.colliderect(projectile.rect, player2.rect)):
#print("Game-Over")
player1.get_damage(enemy.get_weapon().damage)
try:
index = GameObject.Projectile.shots.index(projectiles)
del GameObject.Projectile.shots[index]
except:
print("Error on indexing projectile")
#TODO Add Gameover event
for player in players:
player:GameObject.Player
if(pygame.Rect.colliderect(projectile.rect, player.rect)):
#print("Game-Over")
player.get_damage(enemy.get_weapon().damage)
try:
index = GameObject.Projectile.shots.index(projectiles)
del GameObject.Projectile.shots[index]
except:
print("Error on indexing projectile")
#TODO Add Gameover event
#Check for bullets out of playground and delete it
if((projectile.pos_y > screen.get_size()[1]) or (projectile.pos_y < 0)):
#print(F"Lösche: {projectile}")
@@ -181,11 +175,8 @@ while(gamestate):
milliseconds = pygame.time.get_ticks()
seconds = milliseconds / 1000
now = time.time_ns()
player1.render(screen)
player2.render(screen)
rand = random.randint(0, 100)
for enemy in spawned_enemys:
enemy:GameObject.Enemy
if rand == 20: