s n h m r u

Minimallogo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

s n h m r u
i

Namen für Karten

Zugriff auf Karten über ihren Namen

Um auf ein Objekt - wie z.B. eine Karte - zugreifen zu können, müssen wir sie unter einem Namen ansprechen können. Das folgende Hauptprogramm demonstriert wie man auf die Karten zugreifen kann.

class Endlosstapel {

    fun zieheKarte(): Karte {
        return Karte(
            listOf("Herz", "Karo", "Pik", "Kreuz").random(),
            listOf("2", "3", "4", "5", "6", "7", "8", "9", "10", "B", "D", "K", "A").random()
        )
    }

}

class Karte(
    farbe: String,   // "Herz", "Karo", "Pik", "Kreuz" (ausgeschrieben, Groß/Kleinschreibung egal)
    rang: String     // "2"–"10", "B"/"Bube", "D"/"Dame", "K"/"Koenig", "A"/"Ass"
    ) {

    val rang: String = kuerzeRang(rang)
    val farbe: String = normalisiereFarbe(farbe)
    val wert: Int
        get() {
            return when (rang) {
                "B" -> 11
                "D" -> 12
                "K" -> 13
                "A" -> 14
                else -> rang.toInt()
            }
        }

    fun druckeKarte() {
        val symbol = when (farbe) {
            "herz" -> "♥"
            "karo" -> "♦"
            "pik" -> "♠"
            "kreuz" -> "♣"
            else -> "?"
        }

        val right = rang.padStart(2, ' ')
        val left = rang.padEnd(2, ' ')

        println("┌─────┐")
        println("│$left   │")
        println("│  $symbol  │")
        println("│   $right│")
        println("└─────┘")
    }

    private fun kuerzeRang(roherRang: String): String {
        val normalisiert = roherRang.trim().lowercase()
        return when (normalisiert) {
            "a", "ass" -> "A"
            "k", "koenig", "könig" -> "K"
            "d", "dame" -> "D"
            "b", "bube" -> "B"
            else -> {
                val zahl = normalisiert.toIntOrNull()
                    ?: throw IllegalArgumentException("Unbekannter Rang: $roherRang")
                if (zahl in 2..10) zahl.toString()
                else throw IllegalArgumentException("Rang ausserhalb des Bereichs: $roherRang")
            }
        }
    }

    private fun normalisiereFarbe(roheFarbe: String): String {
        return when (val normalisiert = roheFarbe.trim().lowercase()) {
            "herz", "karo", "pik", "kreuz" -> normalisiert
            else -> throw IllegalArgumentException("Unbekannte Farbe: $roheFarbe")
        }
    }
}

fun main() {
    val stapel = Endlosstapel()
    
    stapel.zieheKarte()
    
    val karte1 = stapel.zieheKarte()
    
    val karte2 = stapel.zieheKarte()
    val karte3 = karte2
    
    karte1.druckeKarte()
    karte2.druckeKarte()
    karte3.druckeKarte()
}

Aufgabe 1 - Zugriff auf Karten

(a) Führe das Programm mehrfach aus und beschreibe deine Beobachtungen.

(b) Erkläre deine Beobachtungen, indem du Zeile für Zeile beschreibst, was das Programm genau macht.

(c) Ergänze den Lückentext unten.

Suche

v
100.123.4.1.2 Namen für Karten
Kopieren durch Anklicken

Rückmeldung geben