s n h m r u
i

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. Auch ist diese Version nicht an die vereinfachte Implementierung des Backend angepasst. Euer Scrum Master wird den Code trotzdem verstehen.

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

Suche

v
9.4.4.2.2.1.11
https://inf-schule.de/software/ScrumSchach/DerErsteSprint/Durchfuehrung/ModellierungBackend_KLEIN/lernstrecke/schritt11
https://inf-schule.de/9.4.4.2.2.1.11
https://inf-schule.de/@/page/XWYfUgcXh9LCzOxB

Rückmeldung geben