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.