110 lines
2.5 KiB
Kotlin
110 lines
2.5 KiB
Kotlin
package eventDemo.app.entity
|
|
|
|
import eventDemo.configuration.UUIDSerializer
|
|
import kotlinx.serialization.SerialName
|
|
import kotlinx.serialization.Serializable
|
|
import java.util.UUID
|
|
|
|
/**
|
|
* A Play card
|
|
*/
|
|
@Serializable
|
|
sealed interface Card {
|
|
val id: UUID
|
|
|
|
/**
|
|
* The color of a card
|
|
*/
|
|
@Serializable
|
|
enum class Color {
|
|
Blue,
|
|
Red,
|
|
Yellow,
|
|
Green,
|
|
}
|
|
|
|
sealed interface ColorCard : Card {
|
|
val color: Color
|
|
}
|
|
|
|
/**
|
|
* A play card with color and number
|
|
*/
|
|
@Serializable
|
|
@SerialName("Simple")
|
|
data class NumericCard(
|
|
val number: Int,
|
|
override val color: Color,
|
|
@Serializable(with = UUIDSerializer::class)
|
|
override val id: UUID = UUID.randomUUID(),
|
|
) : Card,
|
|
ColorCard
|
|
|
|
sealed interface Special : Card
|
|
|
|
/**
|
|
* A revert card to revert the order of the turn.
|
|
*/
|
|
@Serializable
|
|
@SerialName("Reverse")
|
|
data class ReverseCard(
|
|
override val color: Color,
|
|
@Serializable(with = UUIDSerializer::class)
|
|
override val id: UUID = UUID.randomUUID(),
|
|
) : Special,
|
|
ColorCard
|
|
|
|
sealed interface PassTurnCard : Card
|
|
|
|
/**
|
|
* A pass card to pass the turn of the next player.
|
|
*/
|
|
@Serializable
|
|
@SerialName("Pass")
|
|
data class PassCard(
|
|
override val color: Color,
|
|
@Serializable(with = UUIDSerializer::class)
|
|
override val id: UUID = UUID.randomUUID(),
|
|
) : Special,
|
|
ColorCard,
|
|
PassTurnCard
|
|
|
|
/**
|
|
* A play card to force the next player to take 2 card and pass the turn.
|
|
*/
|
|
@Serializable
|
|
@SerialName("Plus2")
|
|
data class Plus2Card(
|
|
override val color: Color,
|
|
@Serializable(with = UUIDSerializer::class)
|
|
override val id: UUID = UUID.randomUUID(),
|
|
) : Special,
|
|
ColorCard,
|
|
PassTurnCard
|
|
|
|
sealed interface AllColorCard : Card
|
|
|
|
/**
|
|
* A play card to force the next player to take 4 card and pass the turn.
|
|
*/
|
|
@Serializable
|
|
@SerialName("Plus4")
|
|
class Plus4Card(
|
|
@Serializable(with = UUIDSerializer::class)
|
|
override val id: UUID = UUID.randomUUID(),
|
|
) : Special,
|
|
AllColorCard,
|
|
PassTurnCard
|
|
|
|
/**
|
|
* A play card to change the color.
|
|
*/
|
|
@Serializable
|
|
@SerialName("ChangeColor")
|
|
class ChangeColorCard(
|
|
@Serializable(with = UUIDSerializer::class)
|
|
override val id: UUID = UUID.randomUUID(),
|
|
) : Special,
|
|
AllColorCard
|
|
}
|