Lösungsbeispiel für die Klasse Backend
ACHTUNG: Spoiler Alarm!
Diese Seite solltet ihr in der Regel schnellstmöglich weiterklicken! Sie dient vor allem eurer Lehrkraft bzw. eurem Scrum Master als mögliche Hilfestellung, damit dieser euch mit fundierten Hinweisen und Tipps versorgen kann. Auf keinen Fall solltet ihr von hier abschreiben, oder euch diese Lösungen auch nur "mal eben kurz" anschauen!
Diese Lösung ist natürlich auch nicht als das einzig und universell richtige Produkt zu verstehen. Eure spezifischen User Stories können durchaus strukturelle Änderungen an dem hier gezeigten Code erfordern. Der hier gezeigte Code ist eine einfache Bauernschachimplementierung mit En Passant und dem Gedanken an eine spätere Erweiterung auf vollständiges Schach. Es sind jedoch keine Extras oder Zusatzfeatures wie Bedenkzeitlimit oder Zugzurücknahme implementiert, um den Code möglichst einfach, übersichtlich und universell zu halten.
Auflösung der Klasse Backend: Code (Mit einigen Tests)
from Figur import Figur, Bauer
class Backend():
def __init__(self):
self.letzterZug = (-1,-1,-1,-1)
self.amZug = "weiß"
self.figuren = [0 for i in range(16)]
for i in range(0, 16):
if(i < 8):
self.figuren[i] = Bauer((i,1), "weiß")
else:
self.figuren[i] = Bauer((i-8,6), "schwarz")
def figurSuchen(self, position):
for i in range(0,16):
if self.figuren[i].getPosition() == position:
return self.figuren[i]
return None
#sucht eine Figur mit bestimmter Position im Array, existiert sie nicht, wird -1 zurückgegeben.
def brettErstellen(self):
brett = [[0]*8 for _ in range(8)]
for i in range(0,16):
position = self.figuren[i].getPosition()
positionX = position[0]
positionY = position[1]
brett[positionX][positionY] = self.figuren[i]
return brett
#erstellt aus dem figurenArray jeweils das aktuelle Brett.
def geschlageneFiguren(self):
res = []
for i in range(0,16):
if self.figuren[i].getPosition() == (-1, -1):
res.append(self.figuren[i])
return res
#erstellt eine Liste für geschlagene Figuren
def spielZuende(self):
for i in range(0,16):
position = self.figuren[i].getPosition()
positionY = position[1]
if positionY == 0 or positionY == 7:
return True
return False
#iteriert einmal durch alle Figuren. Steht eine davon am Ende des Spielfeldes, ist das Spiel vorbei.
#Diese implementierung funktioniert im Bauernschach nur,
#wenn die Bauern mit Startaufstellung in zweiter Reihe (wie beim normalen Schach) gestellt werden.
#Andernfalls müsste die Farbe noch mit abgeglichen werden.
def zugVeranlassen(self, zug):
positionX = zug[0]
positionY = zug[1]
position2X = zug[2]
position2Y = zug[3]
figur = self.figurSuchen((positionX, positionY))
brett = self.brettErstellen()
if figur is None:
return "Ungueltiger Zug. "
if figur.getFarbe() == self.amZug:
if figur.ziehen((position2X, position2Y), brett, self.letzterZug):
self.letzterZug = zug
if figur.getFarbe() == "weiß":
self.amZug = "schwarz"
else:
self.amZug = "weiß"
if self.spielZuende():
return "Spiel zu Ende! "
return "Zug durchgefuehrt. "
return "Ungueltiger Zug. "
return "Ungueltiger Zug. "
def test(self):
"""
>>> b = Backend()
>>> brett = b.brettErstellen()
>>> b.test()
>>> print(b.zugVeranlassen((1,1,1,2)))
Zug durchgefuehrt
>>> b.test()
>>> print(b.zugVeranlassen((1,1,1,7)))
Ungueltiger Zug
>>> print(b.zugVeranlassen((0,6,0,5)))
Zug Durchgefuehrt
>>> print(b.zugVeranlassen((0,6,0,4)))
Ungueltiger Zug
>>> print(b.zugVeranlassen((-1, -1, -1, -1)))
Ungueltiger Zug
>>> print(b.geschlageneFiguren())
"""
for i in range(0, 16):
print(self.figuren[i].getFarbe())
print(self.figuren[i].getPosition())
if __name__ == "__main__":
import doctest
doctest.testmod(verbose=True)
Auflösung Klassendiagramm
Quellen
- [1]: Klassendiagramm - Urheber: THL - Lizenz: inf-schule.de