meinspiel.py aktualisiert

This commit is contained in:
2026-10-28 10:03:55 +00:00
parent 9835b61d68
commit 0c78054f56
+121 -10
View File
@@ -1,23 +1,134 @@
import copy
import pygame import pygame
import copy
Startpositionx = (2) import random
Startpositiony = (2) import sys
q = -1
o = -1
class MeinSpiel: class MeinSpiel:
bilder = ["H:\git\E-To-Linus-Hasenspiel\Bilder/steinboden.png"] # Die Nummer in der Liste ist die Zahl, die im Spielfeld gespeichert wird:
spielfeld = [] # 0 = Boden, 1 = Ritter (Spieler), 2 = Goblin (Gegner), 3 = Herz(Lebensanzeige)
bilder = [
"T:\E-To-Linus-Hasenspiel-OOP (1)\e-to-linus-hasenspiel/Bilder/Feld_Boden.png",
"T:\E-To-Linus-Hasenspiel-OOP (1)\e-to-linus-hasenspiel/Bilder/Feld_Ritter.png",
"T:\E-To-Linus-Hasenspiel-OOP (1)\e-to-linus-hasenspiel/Bilder/Feld_Goblin.png",
"T:\E-To-Linus-Hasenspiel-OOP (1)\e-to-linus-hasenspiel/Bilder/Herz.png",
]
def __init__(self, felderX, felderY): def __init__(self, felderX, felderY):
self.felderX = felderX
self.felderY = felderY
self.spielfeld = []
for x in range(felderX): for x in range(felderX):
self.spielfeld.append([]) self.spielfeld.append([])
for y in range(felderY): for y in range(felderY):
self.spielfeld[x].append(0) self.spielfeld[x].append(0)
def anfangsKonfiguration(self): def anfangsKonfiguration(self):
self.spielfeld[5][5] = 0 self.spielfeld[6][6] = 1 # Ritter
self.herzen = [(0, 0), (1, 0), (2, 0)]
for zeile, spalte in self.herzen:
self.spielfeld[zeile][spalte] = 3
self.gegnerSetzen(self.spielfeld) # Goblin
self.leben = 3
self.pause = 500 # Millisekunden zwischen zwei Goblin-Schritten
self.letzte_bewegung = 0
self.schadensPause = 1000 # 1000 Millisekunden = 1 Sekunde
self.letzterTreffer = -self.schadensPause
def gegnerSetzen(self, feld):
# Goblin auf ein zufälliges leeres Feld setzen
while True:
x = random.randint(0, self.felderX - 1)
y = random.randint(0, self.felderY - 1)
if feld[x][y] == 0:
feld[x][y] = 2
return
def finde(self, zahl):
# Sucht im Spielfeld nach einer Figur und gibt x und y zurück
for x in range(len(self.spielfeld)):
for y in range(len(self.spielfeld[x])):
if self.spielfeld[x][y] == zahl:
return x, y
def treffer(self, feld):
jetzt = pygame.time.get_ticks()
if jetzt - self.letzterTreffer >= self.schadensPause:
self.leben -= 1
self.letzterTreffer = jetzt
if self.leben <= 0:
pygame.quit()
sys.exit()
def tasteGedrueckt(self, taste): def tasteGedrueckt(self, taste):
if pygame.K_w == taste: kontrollfeld = copy.deepcopy(self.spielfeld)
print(taste)
dx, dy = 0, 0
if taste == pygame.K_w:
dy = -1
if taste == pygame.K_s:
dy = 1
if taste == pygame.K_a:
dx = -1
if taste == pygame.K_d:
dx = 1
# Ritter bewegen (Änderungen nur im Kontrollfeld)
if dx != 0 or dy != 0:
for x in range(len(self.spielfeld)):
for y in range(len(self.spielfeld[x])):
if self.spielfeld[x][y] == 1:
neuX = x + dx
neuY = y + dy
if 0 <= neuX < self.felderX and 0 <= neuY < self.felderY:
gegner_im_weg = kontrollfeld[neuX][neuY] == 2
kontrollfeld[x][y] = 0
kontrollfeld[neuX][neuY] = 1
if gegner_im_weg:
self.treffer(kontrollfeld)
# Angriff mit Leertaste: Goblin muss maximal 1 Feld entfernt sein
if taste == pygame.K_SPACE:
rx, ry = self.finde(1)
gx, gy = self.finde(2)
if abs(rx - gx) <= 1 and abs(ry - gy) <= 1:
kontrollfeld[gx][gy] = 0
self.gegnerSetzen(kontrollfeld)
self.pause = max(100, self.pause - 15)
self.spielfeld = kontrollfeld
def update(self):
# Anzeige der Leben im Fenstertitel
pygame.display.set_caption("Medival Goblin Dungeon - Leben: " + str(self.leben))
# Goblin läuft alle "pause" Millisekunden einen Schritt auf den Ritter zu
jetzt = pygame.time.get_ticks()
if jetzt - self.letzte_bewegung > self.pause:
self.letzte_bewegung = jetzt
kontrollfeld = copy.deepcopy(self.spielfeld)
rx, ry = self.finde(1)
gx, gy = self.finde(2)
neuX, neuY = gx, gy
if gx < rx:
neuX += 1
elif gx > rx:
neuX -= 1
elif gy < ry:
neuY += 1
elif gy > ry:
neuY -= 1
kontrollfeld[gx][gy] = 0
if kontrollfeld[neuX][neuY] == 1:
self.treffer(kontrollfeld)
else:
kontrollfeld[neuX][neuY] = 2