Kotlin : Movie Maker produce() 함수

언어/Kotlin

Kotlin : Movie Maker produce() 함수

해리누나 2022. 10. 19. 04:14
반응형

지난번에 쓴 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
반응형