Compare commits

..
2 Commits
Author SHA1 Message Date
alstergym 9835b61d68 Olla 2026-10-07 11:05:21 +02:00
alstergym 334a0c04c9 Olla 2026-10-06 12:11:12 +02:00
4 changed files with 141 additions and 39 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 12 KiB

+13
View File
@@ -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:
+2 -2
View File
@@ -5,7 +5,7 @@ Startpositionx = (2)
Startpositiony = (2)
class MeinSpiel:
bilder = ["Bilder/steinboden.png","Bilder/Grass.jpg","Bilder/Ritter2.png"]
bilder = ["H:\git\E-To-Linus-Hasenspiel\Bilder/steinboden.png"]
spielfeld = []
def __init__(self, felderX, felderY):
@@ -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)
+120 -31
View File
@@ -2,23 +2,37 @@ from meinspiel import MeinSpiel
import pygame
from pygame.locals import *
import random
import time
import sys
pygame.init()
Spielerfigur = pygame.image.load("Bilder/Ritter2.png")
Gegner = pygame.image.load("Bilder/Goblin.png")
Herzen = pygame.image.load("Bilder/Herz.png")
Spielerfigur = pygame.image.load("H:\git\E-To-Linus-Hasenspiel\Bilder/Ritter1.png")
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
@@ -28,6 +42,7 @@ FPS = 60
SCHWARZ = (0, 0, 0)
WEISS = (255, 255, 255)
Rot = ()
pyGameBilder = []
@@ -41,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")
@@ -65,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
@@ -80,42 +105,106 @@ while True:
meinSpiel.tasteGedrueckt(event.key)
# 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)
)
#Gegner Logik
GegnerY += Gegnerbewegung
GegnerX += Gegnerbewegung
if GegnerY < 13 or GegnerY > 0:
Gegnerbewegung *= -1
if GegnerX < 13 or GegnerX > 0:
Gegnerbewegung *= -1
# Gegner folgt dem Spieler
Jetzt = pygame.time.get_ticks()
if Jetzt - LetzteBewegung > BewegungsPause:
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
if Leben == 0:
Spielend = False
fenster.fill(SCHWARZ)
fenster.blit(text, (250, 250))
if Spielend:
fenster.blit(
Spielerfigur,
(spielerX * Pixel, spielerY * Pixel)
)
if GegnerLebt and Spielend:
for i in range(Gegneranzahl):
fenster.blit(
Gegner,
(GegnerX * Pixel, GegnerY * Pixel)
fenster.blit(
Spielerfigur,
(spielerX * Pixel, spielerY * Pixel)
)
fenster.blit(
Gegner,
(GegnerX * Pixel, GegnerY * Pixel)
# Berührung prüfen
spieler_rect = pygame.Rect(
spielerX * Pixel + 10,
spielerY * Pixel + 10,
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
)
#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
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)