s n h m r u
i

Lösungsbeispiel für die Klasse Frontend

ACHTUNG: Spoiler Alarm!

<p>
    Diese Seite solltet ihr in der Regel schnellstm&ouml;glich weiterklicken! Sie dient vor allem eurer Lehrkraft bzw. eurem Scrum Master 
    als m&ouml;gliche Hilfestellung, damit dieser euch mit fundierten Hinweisen und Tipps versorgen kann. Auf keinen Fall solltet ihr von hier 
    abschreiben, oder euch diese L&ouml;sungen auch nur "mal eben kurz" anschauen! 
</p>

<p>
    Diese L&ouml;sung ist nat&uuml;rlich auch nicht als das einzig und universell richtige Produkt zu verstehen. Eure spezifischen User Stories k&ouml;nnen 
    durchaus strukturelle &Auml;nderungen an dem hier gezeigten Code erfordern. Der hier gezeigte Code ist eine einfache Bauernschachimplementierung. 
</p>

<p>
    Die hier gezeigte Frontendklasse ist insbesondere bei der Ausgabe so einfach wie m&ouml;glich gehalten, um den Code nicht unn&ouml;tig aufzubl&auml;hen. 
    Auch bringt ein sch&ouml;neres Frontend 
    nicht unbedingt ein besser gelungenes Projekt oder Technikverst&auml;ndnis. Daher kann diese Klasse alles, was f&uuml;r ein einfaches
    Bauernschach wichtig ist, aber auch nicht mehr!
</p>
Auflösung der Klasse Frontend: Code (Mit einigen Tests)
class Frontend():
    def eingabeFordern(self, farbe):
        #Fordert vom Benutzer die Zugeingabe ein und schreibt diese in den String eingabe. 
        eingabe = ""
        print("Eingabeformat für Züge Beispiel: A2-A3")
        if farbe == "weiß":
            eingabe = input("Weiß ist am Zug, bitte gebe den Zug ein: ")
        else:
            eingabe = input("Schwarz ist am Zug, bitte gebe den Zug ein: ")
<pre><code>    return eingabe

def eingabeParsen(self, eingabe):
    #Pr&uuml;ft ob die Eingabe ein g&uuml;ltiges Format darstellt
    #Erweiterungsm&ouml;glichkeit: Eingaben auch mit Kleinbuchstaben oder anderen Trennzeichen tolierieren

    """
    &gt;&gt;&gt; f = Frontend()
    &gt;&gt;&gt; f.eingabeParsen("A0-B1")
    False
    &gt;&gt;&gt; f.eingabeParsen("C7-B1")
    True
    &gt;&gt;&gt; f.eingabeParsen("A1-B1")
    True
    &gt;&gt;&gt; f.eingabeParsen("X")
    False
    &gt;&gt;&gt; f.eingabeParsen("")
    False        
    &gt;&gt;&gt; f.eingabeParsen(" ")
    False        
    &gt;&gt;&gt; f.eingabeParsen("     ")
    False        
    &gt;&gt;&gt; f.eingabeParsen("A3-X")
    False
    &gt;&gt;&gt; f.eingabeParsen("XDDDSDSDERLKFLSSF")
    False        
    &gt;&gt;&gt; f.eingabeParsen("Z3-X9")
    False        
    &gt;&gt;&gt; f.eingabeParsen("Z3-A1")
    False       
    &gt;&gt;&gt; f.eingabeParsen("A9-B4")
    False         
    &gt;&gt;&gt; f.eingabeParsen("A2+B1")
    False        
    &gt;&gt;&gt; f.eingabeParsen(111)
    False

    """
    if type(eingabe) == str:
        if len(eingabe) == 5:
            a = eingabe[0]
            b = eingabe[3]
            c = eingabe[2]
            d = eingabe[1]
            e = eingabe[4]
            if a == "A" or a == "B" or a == "C" or a == "D" or a == "E" or a == "F" or a == "G" or a == "H":
                if b=="A" or b=="B" or b=="C" or b=="D" or b=="E" or b=="F" or b=="G" or b=="H":
                    if d=="1" or d=="2" or d=="3" or d=="4" or d=="5" or d=="6" or d=="7" or d=="8":
                        if e=="1" or e=="2" or e=="3" or e=="4" or e=="5" or e=="6" or e=="7" or e=="8":
                            if c == "-":
                                return True
    return False

def buchstabenKonvert(self, buchstabe):
    #konvertiert einen eingegebenen Buchstaben in eine f&uuml;r das Backend lesbare X-Koordinate auf dem Schachfeld

    """
    &gt;&gt;&gt; f = Frontend()
    &gt;&gt;&gt; f.buchstabenKonvert("1")
    Traceback (most recent call last):
     ...
    ValueError: Ung&uuml;ltiger Wert
    &gt;&gt;&gt; f.buchstabenKonvert("A")
    0
    &gt;&gt;&gt; f.buchstabenKonvert("AA")
    Traceback (most recent call last):
     ...
    ValueError: Ung&uuml;ltiger Wert
    &gt;&gt;&gt; f.buchstabenKonvert(1)
    Traceback (most recent call last):
     ...
    ValueError: Ung&uuml;ltiger Wert
    &gt;&gt;&gt; f.buchstabenKonvert("11")
    Traceback (most recent call last):
     ...
    ValueError: Ung&uuml;ltiger Wert
    &gt;&gt;&gt; f.buchstabenKonvert("a")
    Traceback (most recent call last):
     ...
    ValueError: Ung&uuml;ltiger Wert
    &gt;&gt;&gt; f.buchstabenKonvert("A2+B1")
    Traceback (most recent call last):
     ...
    ValueError: Ung&uuml;ltiger Wert
    """

    if type(buchstabe) == str:
        if buchstabe == "A":
            return 0
        if buchstabe == "B":
            return 1
        if buchstabe == "C":
            return 2
        if buchstabe == "D":
            return 3
        if buchstabe == "E":
            return 4
        if buchstabe == "F":
            return 5
        if buchstabe == "G":
            return 6
        if buchstabe == "H":
            return 7
    raise ValueError('Ung&uuml;ltiger Wert')

def ziffernKonvert(self, z):
    #konvertiert eine eingegebenen Ziiffer in eine f&uuml;r das Backend lesbare Y-Koordinate auf dem Schachfeld

    """
    &gt;&gt;&gt; f = Frontend()
    &gt;&gt;&gt; f.ziffernKonvert("1")
    0
    &gt;&gt;&gt; f.ziffernKonvert("8")
    7
    &gt;&gt;&gt; f.ziffernKonvert("11")
    Traceback (most recent call last):
     ...
    ValueError: Ung&uuml;ltiger Wert
    &gt;&gt;&gt; f.ziffernKonvert("a")
    Traceback (most recent call last):
     ...
    ValueError: Ung&uuml;ltiger Wert
    &gt;&gt;&gt; f.ziffernKonvert("9")
    Traceback (most recent call last):
     ...
    ValueError: Ung&uuml;ltiger Wert
    &gt;&gt;&gt; f.ziffernKonvert(1)
    Traceback (most recent call last):
     ...
    ValueError: Ung&uuml;ltiger Wert
    &gt;&gt;&gt; f.ziffernKonvert("A2+B1")
    Traceback (most recent call last):
     ...
    ValueError: Ung&uuml;ltiger Wert
    """

    if type(z) == str:
        if z=="1" or z=="2" or z=="3" or z=="4" or z=="5" or z=="6" or z=="7" or z=="8":
            zI = int(z)
            zI = zI-1
            return zI
    raise ValueError('Ung&uuml;ltiger Wert')

def eingabeKonvert(self, eingabe):
    #Konvertiert die Benutzereingabe in ein 4-er Koordinaten-Tupel (&uuml;bliche Zugdarstellung im Backend)
    zug0 = self.buchstabenKonvert(eingabe[0])
    zug1 = self.ziffernKonvert(eingabe[1])
    zug2 = self.buchstabenKonvert(eingabe[3])
    zug3 = self.ziffernKonvert(eingabe[4])
    zug = (zug0, zug1, zug2, zug3)
    return zug

def zugEingabeVeranlassen(self, farbe):
    #ruft die entsprechenden Methoden im Frontend zum einholen, parsen und konvertieren der Eingabe auf, 
    #gibt die fertige Eingabe dann als 4er-Tupel zur&uuml;ck. 
    roh = self.eingabeFordern(farbe)
    if(self.eingabeParsen(roh)):
        zug = self.eingabeKonvert(roh)
        return zug
    else:
        return (-1, -1, -1, -1)

def darstellen(self, brett, geschlageneFiguren):
    #Wir bekommen hier ein 2D-BrettArray und eine Liste mit den geschlagenen Figuren, das m&uuml;ssen wir nur noch darstellen
    visualBrett = [[0]*9 for _ in range(9)]
    feldFarbe = 0
    for i in range(1,9):
        for j in range(1,9):
            if feldFarbe%2 == 0:
                visualBrett[i][j] = '\u25AF'
            else: 
                visualBrett[i][j] = '\u25AE'
            feldFarbe = feldFarbe+1
            if brett[i-1][j-1] != 0:
                farbe = brett[i-1][j-1].getFarbe()
                if farbe == "wei&szlig;":
                    visualBrett[i][j] = "W"
                else:
                    visualBrett[i][j] = "S"
        feldFarbe = feldFarbe+1             

    for i in range(1,9):
        visualBrett[0][i] = i

    visualBrett[0][0] = " "    
    visualBrett[1][0] = "A"
    visualBrett[2][0] = "B"
    visualBrett[3][0] = "C"
    visualBrett[4][0] = "D"
    visualBrett[5][0] = "E"
    visualBrett[6][0] = "F"
    visualBrett[7][0] = "G"
    visualBrett[8][0] = "H"

    for i in range(8,-1,-1):
        print(visualBrett[0][i], visualBrett[1][i], visualBrett[2][i], visualBrett[3][i], visualBrett[4][i], visualBrett[5][i], visualBrett[6][i], visualBrett[7][i], visualBrett[8][i])

    end = len(geschlageneFiguren)
    wei&szlig;Geschlagen = 0
    schwarzGeschlagen = 0
    for i in range(0,end):
        figur = geschlageneFiguren.pop()
        if figur.getFarbe() == "wei&szlig;":
            wei&szlig;Geschlagen = wei&szlig;Geschlagen + 1
        else:
            schwarzGeschlagen = schwarzGeschlagen + 1

    print("Geschlagene wei&szlig;e Bauern: " + str(wei&szlig;Geschlagen))
    print("Geschlagene schwarze Bauern: " + str(schwarzGeschlagen))


def rueckmeldungGeben(self, meldung):
    print(meldung)

"""
f = Frontend()
rohEingabe = f.eingabeFordern(True)
eingabe = [[0,0],[0,0]]
print(rohEingabe)
print(f.eingabeParsen(rohEingabe))
if (f.eingabeParsen(rohEingabe)):
eingabe = f.eingabeKonvert(rohEingabe)
print(eingabe)
else:
print("ungültige Eingabe")
if not(f.zugUnbewegt(eingabe)):
print("ungültiger Zug")
"""

if name == "main":
import doctest
doctest.testmod(verbose=True)

Auflösung Klassendiagramm

Quellen

Suche

v
9.4.4.2.4.1.6 Lösungsbeispiel für die Klasse Frontend
Kopieren durch Anklicken

Rückmeldung geben