From 9835b61d682711e1edfc3872a64a79eb2fc3a59d Mon Sep 17 00:00:00 2001 From: alstergym Date: Wed, 7 Oct 2026 11:05:21 +0200 Subject: [PATCH] Olla --- README.md | 13 +++++ meinspiel.py | 4 +- starten.py | 145 ++++++++++++++++++++++++++++++++++++--------------- 3 files changed, 117 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index 2c8c797..d84e479 100644 --- a/README.md +++ b/README.md @@ -7,5 +7,18 @@ Man hat einen Ritter der in der Mitte des Spielfelds startet und sich mit seinem #09.09.2026 Heute habe ich relativ viel geschafft. Ich habe es hinbekommen der Spieler zu bewegen und habe außerdem noch mehrere Grafiken eingebaut wie zum Beispiel ein Herz für die Lebensanzeige und einen Kobold als Gegener. Jetzt probiere ich den Kobold zum Spieler gehen zu lassen. Jedoch läuft der Kobold noch aus dem Spielfeld heraus. Dies probiere ich nächste Woche zu verbessern. +#22.09.2026 +Mein Plan für heute ist es, dass mein Spieler nicht sofort alle Leben verliert sobald er vom Gegner getroffen wird. +#29.09.2026 +Heute möchte ich einfügen, dass sobald der Spieler getroffen wird das Leben in der oberen rechten Ecke auch wirklich verschwindet. Die Lösung dafür war eigentlich zeimlich simpel. Ich musste einfach nur in der Range Schleife die 3 durch die Variable Leben ändern. + +#30.09.2026 +Heute ist es mein Ziel, eine Hitbox für den Gegner zu machen damit ich es schaffe, dass man diesen töten kann mit einer Attacke vom Spieler. Dafür glaube ich, werde ich mit einem rectangle ein dreieck um den gegner machen und dieses etwas größer machen als der spieler selbst damit man den gegner schon vorher treffen kann und nicht erst wenn er direkt in einem steht. Ich bae dies gut umgesetzt bekommen. Der Spieler kann nu den Gegner töten und ich habe sogar es noch geschafft einzufügen, dass neue Gegner spawnen diese schneller werden und der Spieler das Speilfeld nicht verlassen kann. + +#06.10.2026 +Heute möchte ich es schaffen,dass man nach einer bestimmten Anzahl an getöteten Gegnern mehrere spawnen also zum Beispiel nach 10 getöteten Gegnern spawnen anstatt 1 nun 2 Gegner. Ich habe zwar probiert diese Idee umzusetzen, jedoch ist diese zu komplex, weshalb ertsmal davon absehe und probiere in der nächsten Stunde eine GameOver Screen zu machen. + +#07.10.2026 +Heute möchte ich einen GameOver Screen einfügen und vielleicht wenn ich es schaffe auch noch einen Starbildschrim. # Bildquellen: \ No newline at end of file diff --git a/meinspiel.py b/meinspiel.py index a45dbf1..aa4b2a3 100644 --- a/meinspiel.py +++ b/meinspiel.py @@ -17,7 +17,7 @@ class MeinSpiel: def anfangsKonfiguration(self): self.spielfeld[5][5] = 0 + def tasteGedrueckt(self, taste): if pygame.K_w == taste: - print(taste) - \ No newline at end of file + print(taste) \ No newline at end of file diff --git a/starten.py b/starten.py index a2efbba..abefea5 100644 --- a/starten.py +++ b/starten.py @@ -2,6 +2,8 @@ from meinspiel import MeinSpiel import pygame from pygame.locals import * import random +import time +import sys pygame.init() @@ -9,17 +11,28 @@ Spielerfigur = pygame.image.load("H:\git\E-To-Linus-Hasenspiel\Bilder/Ritter1.pn Gegner = pygame.image.load("H:\git\E-To-Linus-Hasenspiel\Bilder/Goblin.png") Herzen = pygame.image.load("H:\git\E-To-Linus-Hasenspiel\Bilder/Herz.png") +font = pygame.font.Font(None, 74) +text = font.render ("GAME OVER", True, (255,255, 255)) + spielerX = 6 spielerY = 6 HerzX = -1 Leben = 3 +letzter_treffer = 0 +treffbar = False +GegnerLebt = True +GegnerGetötet = 0 +Spawnanzahl = 1 +Gegneranzahl = 1 +Spielend = True -GegnerX = (random.uniform(0,13)) -GegnerY = (random.uniform(0,13)) -Gegnerbewegung = 0.1 +Getroffen = False +GegnerX = random.randint(0,13) +GegnerY = random.randint(0,13) + +LetzteBewegung = 0 +BewegungsPause = 500 # Millisekunden -print(GegnerY) -print(GegnerX) # Variablen/KONSTANTEN Breite, Hoehe = 840, 840 @@ -29,6 +42,7 @@ FPS = 60 SCHWARZ = (0, 0, 0) WEISS = (255, 255, 255) +Rot = () pyGameBilder = [] @@ -42,7 +56,6 @@ for fname in meinSpiel.bilder: # Anfangskonfiguration meinSpiel.anfangsKonfiguration() -print(GegnerX) # Fenster fenster = pygame.display.set_mode((Breite, Hoehe)) pygame.display.set_caption("Medival Goblin Dungeon") @@ -66,6 +79,17 @@ while True: pygame.quit() exit() + # Gegner treffen und töten und wieder einen neuen Spawnen + if event.key == K_SPACE and treffbar == True: + GegnerLebt = False + print("Attacke") + GegnerX = random.randint(0, 13) + GegnerY = random.randint(0, 13) + GegnerLebt = True + BewegungsPause -= 15 + GegnerGetötet += 1 + + # Bewegung if event.key == K_w: spielerY -= 1 @@ -84,43 +108,54 @@ while True: # Attacke # Spielfeld zeichnen - - for x in range(FelderX): - for y in range(FelderY): - fenster.blit( - pyGameBilder[meinSpiel.spielfeld[x][y]], - (x * Pixel, y * Pixel) - ) + if Spielend: + for x in range(FelderX): + for y in range(FelderY): + fenster.blit( + pyGameBilder[meinSpiel.spielfeld[x][y]], + (x * Pixel, y * Pixel) + ) # Lebensanzeige - for Herzposition in range(3): + for Herzposition in range(Leben): fenster.blit( Herzen, (HerzX + Herzposition * 60, 0) ) - if GegnerX and GegnerY == spielerY and spielerX: - print("Getroffen") - #Gegner Logik - GegnerX += Gegnerbewegung - GegnerY += Gegnerbewegung + + # Gegner folgt dem Spieler + Jetzt = pygame.time.get_ticks() - if GegnerY < 0 or GegnerY > 13: - Gegnerbewegung *= -1 + if Jetzt - LetzteBewegung > BewegungsPause: - if GegnerX < 0 or GegnerX > 13: - Gegnerbewegung *= -1 + if GegnerX < spielerX: + GegnerX += 1 + elif GegnerX > spielerX: + GegnerX -= 1 + elif GegnerY < spielerY: + GegnerY += 1 + elif GegnerY > spielerY: + GegnerY -= 1 + + LetzteBewegung = Jetzt - # Spielfigur und Gegner zeichnen - - - fenster.blit( - Spielerfigur, - (spielerX * Pixel, spielerY * Pixel) + if Leben == 0: + Spielend = False + fenster.fill(SCHWARZ) + fenster.blit(text, (250, 250)) + + if Spielend: + fenster.blit( + Spielerfigur, + (spielerX * Pixel, spielerY * Pixel) ) - fenster.blit( - Gegner, - (GegnerX * Pixel, GegnerY * Pixel) + if GegnerLebt and Spielend: + for i in range(Gegneranzahl): + fenster.blit( + Gegner, + (GegnerX * Pixel, GegnerY * Pixel) + ) # Berührung prüfen @@ -130,22 +165,46 @@ while True: 40, 40 ) + if GegnerLebt and Spielend: + gegner_rect = pygame.Rect( + GegnerX * Pixel + 10, + GegnerY * Pixel + 10, + 40, + 40 + ) + if GegnerLebt: + gegner_rect_hitbox = pygame.Rect( + GegnerX * Pixel - 20, + GegnerY * Pixel - 20, + 120, + 120 + ) - gegner_rect = pygame.Rect( - GegnerX * Pixel + 10, - GegnerY * Pixel + 10, - 40, - 40 - ) + #Hitbox Logik für den Gegner + if GegnerLebt and spieler_rect.colliderect(gegner_rect_hitbox): + print("In der Hitbox") + treffbar = True + else: + treffbar = False + + # Lebensabzug if spieler_rect.colliderect(gegner_rect): + if Jetzt - letzter_treffer > 1000: Leben -= 1 - print("Leben",Leben) - - - - + letzter_treffer = Jetzt + print("Leben", Leben) + #Gegner kann nicht das Spielfeld verlassen + if spielerX == -1: + spielerX += 1 + if spielerX == 14: + spielerX -= 1 + if spielerY == -1: + spielerY += 1 + if spielerY == 14: + spielerY -= 1 # Fenster aktualisieren pygame.display.flip() clock.tick(FPS) + \ No newline at end of file