package com.example.myapplication
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
// Base Dwelling Class
open class Dwelling(val residents: Int) {
open val buildingMaterial: String = "Generic material"
open val capacity: Int = 0
fun hasRoom(): Boolean {
return residents < capacity
}
open fun description(): String {
return "This dwelling is made of $buildingMaterial and has space for $capacity people."
}
}
// Round Hut Class
class RoundHut(residents: Int) : Dwelling(residents) {
override val buildingMaterial: String = "Straw"
override val capacity: Int = 4
fun floorArea(radius: Double): Double {
return Math.PI * radius * radius
}
override fun description(): String {
return "This is a round hut made of $buildingMaterial with space for $capacity people."
}
}
// Square Cabin Class
class SquareCabin(residents: Int) : Dwelling(residents) {
override val buildingMaterial: String = "Wood"
override val capacity: Int = 6
fun floorArea(length: Double): Double {
return length * length
}
override fun description(): String {
return "This is a square cabin made of $buildingMaterial with space for $capacity people."
}
}
// Round Tower Class
class RoundTower(residents: Int, val floors: Int) : Dwelling(residents) {
override val capacity: Int
get() = 4 * floors
fun floorArea(radius: Double): Double {
return Math.PI * radius * radius * floors
}
override fun description(): String {
return "This is a round tower with $floors floors, made of $buildingMaterial and has space for $capacity people."
}
}
// Main Activity
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
DwellingsTheme {
Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) {
DwellingApp()
}
}
}
}
@Composable
fun DwellingApp() {
val roundHut = RoundHut(3)
val squareCabin = SquareCabin(2)
val roundTower = RoundTower(4, 3)
Column(modifier = Modifier.fillMaxSize().padding(16.dp)) {
Text(text = roundHut.description(), style = MaterialTheme.typography.bodyMedium)
Spacer(modifier = Modifier.height(8.dp))
Text(text = "Floor Area: ${roundHut.floorArea(4.5)} m²", style = MaterialTheme.typography.bodyMedium)
Spacer(modifier = Modifier.height(16.dp))
Text(text = squareCabin.description(), style = MaterialTheme.typography.bodyMedium)
Spacer(modifier = Modifier.height(8.dp))
Text(text = "Floor Area: ${squareCabin.floorArea(5.0)} m²", style = MaterialTheme.typography.bodyMedium)
Spacer(modifier = Modifier.height(16.dp))
Text(text = roundTower.description(), style = MaterialTheme.typography.bodyMedium)
Spacer(modifier = Modifier.height(8.dp))
Text(text = "Floor Area: ${roundTower.floorArea(4.0)} m²", style = MaterialTheme.typography.bodyMedium)
}
}
@Preview(showBackground = true)
@Composable
fun DwellingAppPreview() {
DwellingApp()
}
}
// Theme
@Composable
fun DwellingsTheme(content: @Composable () -> Unit) {
val colorScheme = lightColorScheme(
primary = androidx.compose.ui.graphics.Color(0xFF6200EE),
onPrimary = androidx.compose.ui.graphics.Color.White,
secondary = androidx.compose.ui.graphics.Color(0xFF03DAC6),
onSecondary = androidx.compose.ui.graphics.Color.Black,
)
MaterialTheme(
colorScheme = colorScheme,
typography = MaterialTheme.typography,
content = content
)
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter