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 = 15 punkte1 = 0 # Punkte des Spieler 1 punkte2 = 0 # Punkte des Spieler 2 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 == 97: print(self.spielfeld) elif taste == 113: pygame.quit() elif taste == 116: # Taste T self.starte_spiel(neue_punkte=True) elif taste == 115: # Taste S self.bewegeSpieler(2, "spieler1") elif taste == 119: # Taste W self.bewegeSpieler(1, "spieler1") # 1 ist nach oben, 2 nach unten elif taste == 1073741906: # Pfeiltaste_Hoch self.bewegeSpieler(1, "spieler2") elif taste == 1073741905: # Pfeiltaste_Runter self.bewegeSpieler(2, "spieler2") elif taste == pygame.K_o: self.geschwindigkeit = 7 if self.geschwindigkeit !=7 else 10 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: print("einfach anders") 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(BallX) print(BallY) # gucken ob an der neuen Position ein Spieler ist if self.spielfeld[BallX][BallY] == 1: # 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 # gucken ob Ball am Rand (x-position) ist; Für Punktesystem if BallX == -1: self.punkte2 += 1 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 self.starte_spiel() # gucken ob Ball am Rand (y-position) ist; Richtung ändern if BallY == -1: self.richtung_y = 1 if self.richtung_y == 2 else 2 BallX = y elif BallY == 15: # in if abfrage drüber inkludiert self.richtung_y = 1 if self.richtung_y == 2 else 2 BallY = y 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: 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 class ComLogic: def __init__(self): pass # load coms inventory