Generate game
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
package domain
|
||||
|
||||
enum class Animals(symbol: String) : ItemClass {
|
||||
enum class Animals(symbol: String) : ItemClass<Animals> {
|
||||
ZEBRA("🦓"),
|
||||
OCTOPUS("🐙"),
|
||||
GOAT("🐐"),
|
||||
@@ -10,9 +10,16 @@ enum class Animals(symbol: String) : ItemClass {
|
||||
ANT("🐜");
|
||||
|
||||
override val symbols: Array<String> = arrayOf(symbol)
|
||||
|
||||
override val companion
|
||||
get() = Animals
|
||||
|
||||
companion object : ItemClassCompanion<Animals> {
|
||||
override val items: List<Animals> = entries
|
||||
}
|
||||
}
|
||||
|
||||
enum class Nationality(symbol: String) : ItemClass {
|
||||
enum class Nationality(symbol: String) : ItemClass<Nationality> {
|
||||
ENGLAND("🇬🇧"),
|
||||
UKRAINE("🇺🇦"),
|
||||
SPAIN("🇪🇸"),
|
||||
@@ -22,9 +29,16 @@ enum class Nationality(symbol: String) : ItemClass {
|
||||
CANADA("🇨🇦");
|
||||
|
||||
override val symbols: Array<String> = arrayOf(symbol)
|
||||
|
||||
override val companion
|
||||
get() = Nationality
|
||||
|
||||
companion object : ItemClassCompanion<Nationality> {
|
||||
override val items: List<Nationality> = entries
|
||||
}
|
||||
}
|
||||
|
||||
enum class Drink(symbol: String) : ItemClass {
|
||||
enum class Drink(symbol: String) : ItemClass<Drink> {
|
||||
MILK("🥛"),
|
||||
WINE("🍷"),
|
||||
COCKTAIL("🍸"),
|
||||
@@ -34,9 +48,16 @@ enum class Drink(symbol: String) : ItemClass {
|
||||
BEVERAGE("🧃");
|
||||
|
||||
override val symbols: Array<String> = arrayOf(symbol)
|
||||
|
||||
override val companion
|
||||
get() = Drink
|
||||
|
||||
companion object : ItemClassCompanion<Drink> {
|
||||
override val items: List<Drink> = entries
|
||||
}
|
||||
}
|
||||
|
||||
enum class Profession(symbol: String) : ItemClass {
|
||||
enum class Profession(symbol: String) : ItemClass<Profession> {
|
||||
ASTRONAUT("\u200D\uD83D\uDE80"),
|
||||
HEALTH_WORKER("\u200D⚕\uFE0F"),
|
||||
FARMER("\u200D\uD83C\uDF3E"),
|
||||
@@ -47,9 +68,16 @@ enum class Profession(symbol: String) : ItemClass {
|
||||
TEACHER("\u200D\uD83C\uDFEB");
|
||||
|
||||
override val symbols: Array<String> = idic(symbol)
|
||||
|
||||
override val companion
|
||||
get() = Profession
|
||||
|
||||
companion object : ItemClassCompanion<Profession> {
|
||||
override val items: List<Profession> = entries
|
||||
}
|
||||
}
|
||||
|
||||
enum class Fruit(symbol: String) : ItemClass {
|
||||
enum class Fruit(symbol: String) : ItemClass<Fruit> {
|
||||
GRAPES("🍇"),
|
||||
WATERMELON("🍉"),
|
||||
LEMON("🍋"),
|
||||
@@ -62,9 +90,16 @@ enum class Fruit(symbol: String) : ItemClass {
|
||||
MANGO("🥭");
|
||||
|
||||
override val symbols: Array<String> = idic(symbol)
|
||||
|
||||
override val companion
|
||||
get() = Fruit
|
||||
|
||||
companion object : ItemClassCompanion<Fruit> {
|
||||
override val items: List<Fruit> = entries
|
||||
}
|
||||
}
|
||||
|
||||
enum class Dessert(symbol: String) : ItemClass {
|
||||
enum class Dessert(symbol: String) : ItemClass<Dessert> {
|
||||
ICE_CREAM("🍨"),
|
||||
DOUGHNUT("🍩"),
|
||||
COOKIE("🍪"),
|
||||
@@ -76,9 +111,16 @@ enum class Dessert(symbol: String) : ItemClass {
|
||||
CUSTARD("🍮");
|
||||
|
||||
override val symbols: Array<String> = idic(symbol)
|
||||
|
||||
override val companion
|
||||
get() = Dessert
|
||||
|
||||
companion object : ItemClassCompanion<Dessert> {
|
||||
override val items: List<Dessert> = entries
|
||||
}
|
||||
}
|
||||
|
||||
enum class Transportation(symbol: String) : ItemClass {
|
||||
enum class Transportation(symbol: String) : ItemClass<Transportation> {
|
||||
BICYCLE("🚲"),
|
||||
MOTOR_SCOOTER("🛵"),
|
||||
SKATEBOARD("🛹"),
|
||||
@@ -88,18 +130,51 @@ enum class Transportation(symbol: String) : ItemClass {
|
||||
BUS("🚌");
|
||||
|
||||
override val symbols: Array<String> = idic(symbol)
|
||||
|
||||
override val companion
|
||||
get() = Transportation
|
||||
|
||||
companion object : ItemClassCompanion<Transportation> {
|
||||
override val items: List<Transportation> = entries
|
||||
}
|
||||
}
|
||||
|
||||
private val GENDERS = arrayOf("\uD83E\uDDD1", "\uD83D\uDC68", "\uD83D\uDC69")
|
||||
private val SKIN_TONES =
|
||||
arrayOf("\uD83C\uDFFB", "\uD83C\uDFFC", "\uD83C\uDFFD", "\uD83C\uDFFE", "\uD83C\uDFFF")
|
||||
|
||||
private fun idic(symbol: String) = Array<String>(GENDERS.size * SKIN_TONES.size) { i ->
|
||||
private fun idic(symbol: String): Array<String> = Array(GENDERS.size * SKIN_TONES.size) { i ->
|
||||
val g = GENDERS[i % GENDERS.size]
|
||||
val t = SKIN_TONES[i / GENDERS.size]
|
||||
g + t + symbol
|
||||
}
|
||||
|
||||
sealed interface ItemClass {
|
||||
sealed interface ItemClass<out SELF : ItemClass<SELF>> {
|
||||
val symbols: Array<String>
|
||||
|
||||
val companion: ItemClassCompanion<SELF>
|
||||
|
||||
companion object {
|
||||
val classes: List<ItemClassCompanion<*>> = listOf(
|
||||
Animals,
|
||||
Nationality,
|
||||
Drink,
|
||||
Profession,
|
||||
Fruit,
|
||||
Dessert,
|
||||
Transportation
|
||||
)
|
||||
|
||||
fun randomClasses(n: Int): List<ItemClassCompanion<*>> {
|
||||
return classes.shuffled().take(n)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sealed interface ItemClassCompanion<out C : ItemClass<C>> {
|
||||
val items: List<C>
|
||||
|
||||
fun randomItems(n: Int): List<C> {
|
||||
return items.shuffled().take(n)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user