mirror of
https://github.com/Vale54321/schafkopf-bot.git
synced 2025-12-16 11:49:33 +01:00
122 lines
3.5 KiB
Kotlin
122 lines
3.5 KiB
Kotlin
import de.heiserer.CmdPlayer
|
|
import de.heiserer.SchafkopfMessager
|
|
import de.heiserer.cards.Card
|
|
import de.heiserer.cards.CardColor
|
|
import de.heiserer.cards.CardSymbol
|
|
import de.heiserer.player.Player
|
|
|
|
class CmdSchafkopfMessager: SchafkopfMessager {
|
|
override fun sendPlayerTurn(player: Player) {
|
|
if(player !is CmdPlayer){
|
|
clearConsole()
|
|
}
|
|
|
|
println("${player.getName()} ist am Zug")
|
|
Thread.sleep(1000)
|
|
}
|
|
|
|
override fun sendPlayerWonTrick(player: Player) {
|
|
println("${player.getName()} hat den Stich gewonnen.")
|
|
println()
|
|
}
|
|
|
|
override fun sendPlayerWonGame(player: Player) {
|
|
TODO("Not yet implemented")
|
|
}
|
|
|
|
override fun sendCardPlayed(player: Player, card: Card) {
|
|
println("${player.getName()} hat ${card.displayName} gespielt.")
|
|
}
|
|
|
|
override fun sendTableCards(cards: List<Card>) {
|
|
println("Tischkarten:")
|
|
CmdCard.printCards(cards)
|
|
|
|
Thread.sleep(3000)
|
|
}
|
|
|
|
|
|
|
|
class CmdCard(card: Card){
|
|
private val symbolMap = mapOf(
|
|
CardSymbol.SIEBEN to "7",
|
|
CardSymbol.ACHT to "8",
|
|
CardSymbol.NEUN to "9",
|
|
CardSymbol.ZEHN to "10",
|
|
CardSymbol.OBER to "O",
|
|
CardSymbol.UNTER to "U",
|
|
CardSymbol.KOENIG to "K",
|
|
CardSymbol.ASS to "A"
|
|
)
|
|
|
|
private val colorMap = mapOf(
|
|
CardColor.HERZ to "♥",
|
|
CardColor.SCHELL to "♦",
|
|
CardColor.EICHEL to "♣",
|
|
CardColor.BLATT to "♠"
|
|
)
|
|
|
|
private val symbol = symbolMap[card.symbol]?: "?"
|
|
private val color = colorMap[card.color]?: "?"
|
|
private val colorName = card.color.displayName
|
|
private val symbolName = card.symbol.displayName
|
|
|
|
private val cardWidth = 13
|
|
|
|
private val symbolLine = "│ ${symbol.padEnd(cardWidth-5)}$symbol │"
|
|
private val colorLine = "│ ${color.padEnd(cardWidth-5)}$color │"
|
|
|
|
private val cardLines = listOf(
|
|
"┌───────────┐",
|
|
symbolLine,
|
|
colorLine,
|
|
"│${colorName.padCenter(cardWidth-2)}│",
|
|
"│${symbolName.padCenter(cardWidth-2)}│",
|
|
colorLine,
|
|
symbolLine,
|
|
"└───────────┘"
|
|
|
|
)
|
|
|
|
fun print(){
|
|
cardLines.forEach {
|
|
println(it)
|
|
}
|
|
}
|
|
|
|
fun getCardLines(): List<String> {
|
|
return cardLines
|
|
}
|
|
|
|
private fun String.padCenter(totalWidth: Int, padChar: Char = ' '): String {
|
|
if (this.length >= totalWidth) return this
|
|
val padding = totalWidth - this.length
|
|
val padStart = this.length + padding / 2
|
|
return this.padStart(padStart, padChar).padEnd(totalWidth, padChar)
|
|
}
|
|
|
|
companion object {
|
|
fun printCards(cards: List<Card>) {
|
|
val lastCardLines = CmdCard(cards.last()).getCardLines()
|
|
|
|
val cardLines = cards.map { CmdCard(it).getCardLines() }
|
|
|
|
// Loop through the indices of the lines that are present in all cards
|
|
for (i in lastCardLines.indices) {
|
|
// For other lines, print up to the first 5 characters
|
|
var line = cardLines.joinToString(" ") { it[i].take(5) }
|
|
line += lastCardLines[i].drop(5)
|
|
println(line)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
fun clearConsole() {
|
|
for (i in 1..100) {
|
|
println()
|
|
}
|
|
}
|
|
|
|
} |