Files
E-To-Finley-Hasenspiel/meinspiel.py
T
2026-10-07 11:04:24 +02:00

291 lines
11 KiB
Python

import copy
import pygame
import random
from time import sleep
from typing import Literal
class MeinSpiel:
bilder = ["Bilder/blackfhd.png","Bilder/weiss60.png", "Bilder/gelb60.png"]
spielfeld = []
richtung = 0
richtung_y = 0
alter_hintergrund = 0
geschwindigkeit = 10
punkte1 = 0 # Punkte des Spieler 1
punkte2 = 0 # Punkte des Spieler 2
Com_enabled = False
def __init__(self, felderX, felderY):
for x in range(felderX):
self.spielfeld.append([])
for y in range(felderY):
self.spielfeld[x].append(0)
def anfangsKonfiguration(self):
# könnte man theoretisch auf mit farben machen, damit dann weniger geladen werden muss -> lädt schneller
self.spielfeld[1][5] = 1
self.spielfeld[1][4] = 1 # spieler 1 / Linker Spieler
self.spielfeld[1][6] = 1
self.spielfeld[13][4] = 1
self.spielfeld[13][5] = 1 # Spieler 2 / Com 1 / Rechter Spieler
self.spielfeld[13][6] = 1
self.spielfeld[7][5] = 2 # ball
def tasteGedrueckt(self, taste):
print(f"{taste} gedrückt")
if taste == pygame.K_a:
print(self.spielfeld)
elif taste == 113:
pygame.quit()
elif taste == pygame.K_t: # Taste T
self.starte_spiel(neue_punkte=True)
elif taste == pygame.K_s: # Taste S
self.bewegeSpieler(2, "spieler1")
elif taste == pygame.K_w: # Taste W
self.bewegeSpieler(1, "spieler1") # 1 ist nach oben, 2 nach unten
elif taste == pygame.K_UP: # Pfeiltaste_Hoch
self.bewegeSpieler(1, "spieler2")
elif taste == pygame.K_DOWN: # Pfeiltaste_Runter
self.bewegeSpieler(2, "spieler2")
elif taste == pygame.K_o:
self.geschwindigkeit = 7 if self.geschwindigkeit !=7 else 10
elif taste == pygame.K_c:
self.Com_enabled = True if not self.Com_enabled else False
elif taste == pygame.K_F3:
pass # Soll Steuerung Zeigen
def starte_spiel(self, neue_punkte = False):
self.richtung = random.randint(1, 2) # 1 = linke Spielhälfte / 2 = rechte Spielhälfte
newspielfeld = []
for x in range(15): # Es gibt 15 Felder (900/60)
newspielfeld.append([])
for y in range(15):
newspielfeld[x].append(0)
newspielfeld[1][5] = 1
newspielfeld[1][4] = 1 # spieler 1 / Linker Spieler
newspielfeld[1][6] = 1
newspielfeld[13][4] = 1
newspielfeld[13][5] = 1 # Spieler 2 / Com 1 / Rechter Spieler
newspielfeld[13][6] = 1
newspielfeld[7][5] = 2 # ball
self.spielfeld = newspielfeld
if neue_punkte:
self.punkte1 = 0
self.punkte2 = 0
#elf.ahhh_spiel(self.richtung)
def bewegeball(self):
if self.richtung == 0: return
stoppe_suche = False
try:
for x in range(len(self.spielfeld)):
for y in range(len(self.spielfeld)):
if self.spielfeld[x][y] == 2:
try:
spieler_x = x+1 if self.richtung == 2 else x-1
spieler_y = y
# gucken ob links/rechts ein spieler ist
if self.spielfeld[x+1][y] == 1 or self.spielfeld[x-1][y] == 1:
self.richtung = 1 if self.richtung == 2 else 2
self.richtung_y = random.randint(-1, 1) # -1 ist nach oben 1 nach unten
if self.richtung_y == 0: self.richtung_y = 1
self.spielfeld[x][y] = self.alter_hintergrund
if self.richtung == 2:
self.alter_hintergrund = self.spielfeld[x+1][y]
self.spielfeld[x+1][y+self.richtung_y] = 2
elif self.richtung == 1 and x-1 != -1:
self.alter_hintergrund = self.spielfeld[x-1][y]
self.spielfeld[x-1][y+self.richtung_y] = 2
#elif x-1 == -1: self.richtung = 2; self.spielfeld[x][y] = 2 # Später Punktesystem!
#print(x, y)
#self.guckeObAmRand(x, y)
# Gucke, ob der Ball am Spielfeldrand ist
if y+1 == 15 and self.richtung_y != -1:
# print("aaaaaaaaaaa")
# print(y+1)
# print(self.richtung_y)
# print("---------")
self.richtung_y = -1 if self.richtung_y == 1 else 1
# print("richtung y geändert")
elif y-1 == 0 and self.richtung_y != 1:
# print("aaaaaaaaaaa")
# print(y+1)
# print(self.richtung_y)
# print("---------")
self.richtung_y = -1 if self.richtung_y == 1 else 1
# print("richtung y geändert")
elif x+1 == 14:
self.punkte1 +=1
self.starte_spiel()
elif x-1 == 0:
self.punkte2 +=1
self.starte_spiel()
stoppe_suche = True
sleep(0.1)
except IndexError as e:
# print("Ball ist außerhalb des")
# print(e)
# Wenn am Rand des spielfelds, muss gucken ob punkt gibt oder von wand abprallt
# print("x+1",x+1)
# print("x-1",x-1)
# print("y-1",y-1)
# print("y+1",y+1)
if y+1 == 15 or y-1 == 0:
if self.richtung_y != 0:
# print("aaaaaaaaaaa")
# print(y+1)
# print(self.richtung_y)
# print("---------")
self.richtung_y = -1 if self.richtung_y == 1 else 1
# print("richtung y geändert")
else:
pass
self.spielfeld[x][y] = 2
if stoppe_suche: break
if stoppe_suche: break
return spieler_x, spieler_y
except UnboundLocalError as e:
print(e)
self.starte_spiel()
# def bewegeball2(self):
# if self.richtung == 0: return # Wenn Spiel nicht aktiv, dann self.richtung = 0; Also bewegt sich der Ball nicht
# kontrollfeld = copy.deepcopy(self.spielfeld)
# stoppe_suche = False
# for x in range(len(self.spielfeld)):
# for y in range(len(self.spielfeld[x])):
# if self.spielfeld[x][y] == 2: # 2 = Ball
# stoppe_suche = True # um den Ball nicht ein zweites mal zu finden
# # setze Ballcoordinaten auf das nächste Feld
# BallX = x+1 if self.richtung == 2 else x-1
# BallY = y+1 if self.richtung_y == 2 else y-1
# print("Zukunft:", BallX, BallY)
# # print(BallY)
# # gucken ob Ball am Rand (x-position) ist; Für Punktesystem
# if BallX == -1:
# self.punkte2 += 1
# return self.starte_spiel()
# elif BallX == 15: # 15, weil mein Spiel 15 Felder (standart 14) hat und von 0 gezählt wird -> max anzahl 14; 15 würde heißen, ball aus dem Spielfeld
# self.punkte1 += 1
# return self.starte_spiel()
# # gucken ob Ball am Rand (y-position) ist; Richtung ändern
# if BallY == -1:
# print(BallY, "hier will er weg")
# self.richtung_y = 1 if self.richtung_y == 2 else 2
# BallX = y
# elif BallY == 15: # in if abfrage drüber inkludiert
# print("hier woll er weg", BallY)
# self.richtung_y = 1 if self.richtung_y == 2 else 2
# BallY = y
# # gucken ob an der neuen Position ein Spieler ist
# if self.spielfeld[BallX][BallY] == 1:
# print("Da ist jemand hiiiiiiiilfeeee")
# # Richtung des Balles ändern und danach BallX und BallY neu setzen
# self.richtung = 1 if self.richtung == 2 else 1
# self.richtung_y = 1 if self.richtung_y == 2 else 1
# BallX = x+1 if self.richtung == 2 else x-1
# BallY = y+1 if self.richtung_y == 2 else y-1
# kontrollfeld[x][y] = 0
# kontrollfeld[BallX][BallY] = 2
# if stoppe_suche: break
# if stoppe_suche: break
# self.spielfeld = kontrollfeld
def bewegeSpieler(self, richtung, spieler: Literal["spieler1", "spieler2"]):
# Bei Richtung ist 1 nach oben und 2 nach unten
x = 1 if spieler == "spieler1" else 13
stoppe_suche = False
for y in range(len(self.spielfeld)):
if self.spielfeld[x][y] == 1:
try:
# gucken ob links/rechts ein spieler ist
#if self.spielfeld[x][y+1] == 1 or self.spielfeld[x][y-1] == 1:
#richtung = 1 if richtung == 2 else 2
if richtung == 2:
self.spielfeld[x][y] = self.alter_hintergrund
self.alter_hintergrund = self.spielfeld[x+1][y]
self.spielfeld[x][y+3] = 1
elif richtung == 1 and y-1 != -1:
self.spielfeld[x][y+2] = self.alter_hintergrund
self.alter_hintergrund = self.spielfeld[x-1][y]
self.spielfeld[x][y-1] = 1
elif y-1 == 0: richtung = 2; self.spielfeld[x][y] = 1 # Später Punktesystem!
# spieler_x, spieler_y = y+1 if richtung == 2 else y-1, y
stoppe_suche = True
except IndexError:
self.spielfeld[x][y] = 1 # Später Punktesystem!
richtung = 1 if richtung == 2 else 2
if stoppe_suche: break
def bewegeCom(self):
random_richtung = random.randint(1, 2)
self.bewegeSpieler(random_richtung, "spieler2")