228 lines
8.2 KiB
Python
228 lines
8.2 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
|
|
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 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
|