반응형
지난번에 쓴 Movie 클래스 코드다. 이번에 produce() 함수를 완성시켜 보자.
먼저, 영화가 제작이 될 때 어떤 일들이 일어나야하는지를 적어본다.
=>
1. 영화수익이 생긴다. (예상수익: 1000000~2000000)
2. 영화가 평가된다. ( = 평점이 부여된다.)
3. 평점에서 수익이 발생한다.
4. 이런 부분수익은 전체 수익에 더해진다.
5. 계산된 총 수익은 Movie 의 속성 revenue 에 저장된다.
6. 총 손실과 이익을 계산 후 출력한다.
7. 감독과 배우에게 영화가 제작되었음을 알려야 한다.
[ 전체코드 ]
import kotlin.random.Random
import kotlin.math.round
class Actor(val firstName: String, val lastName: String, val genre: List<Genre>){
var salary = round(Random.nextDouble(100000.0, 2000000.0))
val skill : Skill = Skill()
fun movieSuccessfullyProduced(){
skill.currentSkill += skill.learningSpeed
}
}
class Director(val firstName: String, val lastName: String, val preferredActor: Actor){
var salary = round(Random.nextDouble(100000.0, 2000000.0))
val skill : Skill = Skill()
fun movieSuccessfullyProduced(){
skill.currentSkill += skill.learningSpeed
}
}
class Skill{
val maxSkill = Random.nextInt(250,500)
var currentSkill = Random.nextInt(100,maxSkill)
set(value){
if(value > field && value <= currentSkill){
field = value
}
}
val learningSpeed = Random.nextInt(2,10)
}
class Movie(val title: String, val director: Director, val mainActor: Actor, val budget: Int, val genre : Genre){
private val ratings = mutableListOf<Double>()
val costs = director.salary + mainActor.salary + budget
var revenue = 0.0
private set
fun produce()
{
val baseRevenue = round(Random.nextDouble(1_000_000.0,2_000_000.0))
rating()
var totalRevenue = 0.0
for(rating in ratings){
val additionalRevenue = (baseRevenue * rating)
totalRevenue += additionalRevenue
println("영화 새 평점이 등록되었습니다. 평점: $rating | 영화수익: $additionalRevenue")
}
this.revenue = totalRevenue
println("영화 총 수익: $revenue")
val profit = revenue - costs
if(profit > 0) {
println("성공!")
println("영화 이윤은 $profit 입니다.")
}else{
println("실패!")
println("영화 적자는 ${profit*(-1)} 입니다.")
}
mainActor.movieSuccessfullyProduced()
director.movieSuccessfullyProduced()
}
fun rating(){
for( x in 1..5){
val rating = round(Random.nextDouble(0.0,5.0))
ratings.add(rating)
}
}
}
fun main(){
val emma = Actor("Emma","Thompson",listOf(Genre.DRAMA,Genre.FANTASY,Genre.THRILLER))
val steve = Director("Steve","Spielburg",emma)
val firstMovie = Movie("Summer", steve, emma, 85000, Genre.DRAMA)
println("---영화 구성안---")
println("영화 제목: ${firstMovie.title}")
println("영화 감독: ${firstMovie.director.firstName},${firstMovie.director.lastName})")
println("영화 주연배우: ${firstMovie.mainActor.firstName},${firstMovie.mainActor.lastName}")
println("총 예상비용: ${firstMovie.costs}")
println("결과")
firstMovie.produce()
}
결과를 보자.
출처:
내용 / 도움준 곳: 학교 교수님 (Christian Kohls) 강의
728x90
반응형
'언어 > Kotlin' 카테고리의 다른 글
Kotlin : 상속 (inheritance) 적용해보기 (0) | 2022.10.28 |
---|---|
Kotlin : 상속 (inheritance) (0) | 2022.10.20 |
Kotlin : Movie Maker 일단 클래스부터 (0) | 2022.10.19 |
Kotlin : Movie Maker 시물레이션, 구상 (0) | 2022.10.18 |
Kotlin : 간단한 for 과 while, do..While 문의 이용 (0) | 2022.10.13 |