【学習kotlinシリーズ】プロパティ

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

メソッドの定義を必須にするためにインターフェースを定義したが、変数も同様にプロパティとして定義を必須にできる。定義の仕方はメソッドと同様に、インターフェースの中に変数を定義すればいい。前回のインターフェースのコードにプロパティを追加する。

実際に書いてみる

interface RPG {

    // プロパティを定義する
    var _hp: Int
    var _mp: Int    
    
    // 回復する
    fun cure()
    // 宿屋に泊まる
    fun inn()

    // 攻撃する
    fun attack(that: RPG)
    // 魔法を使う
    fun magic(that: RPG)

    // 現在のHPを取得する
    fun getHP(): Int
    // 現在のMPを取得する
    fun getMP(): Int
    // 最大HPを取得する
    fun getMaxHP(): Int
    // 最大MPを取得する
    fun getMaxMP(): Int

    // 現在のHPを変更する
    fun setHP(hp: Int)
    // 現在のMPを変更する
    fun setMP(mp: Int)
    

}

// RPGオブジェクトを作成する関数
fun createRPG(max_hp: Int = 100, max_mp: Int = 10): RPG = object : RPG {

    // プロパティとして定義されているため、overrideで定義する
    override var _hp: Int = max_hp
    override var _mp: Int = max_mp

    // 回復する
    override fun cure() {
        val hp = getHP() + 20
        val mp = getMP() - 2
        setHP(hp)
        setMP(mp)

    }

    // 宿屋に泊まる
    override fun inn(){
        val hp = getMaxHP()
        val mp = getMaxMP()
        setHP(hp)
        setMP(mp)
    }

    // 相手に攻撃する
    override fun attack(that: RPG){
        // 現在の相手のダメージから5を引いたHPをセットする
        val thatHP = that.getHP() - 5
        that.setHP(thatHP)
    }

    // 相手に魔法をかける
    override fun magic(that: RPG){
        // 現在の相手のダメージから20引いたHPをセットする
        val thatHP = that.getHP() - 20
        that.setHP(thatHP)

        // 現在の自分のMPから3引いたMPをセットする
        val mp = getMP() - 3
        setMP(mp)
    }


    // 現在のHPを取得する
    override fun getHP(): Int = _hp
    // 現在のMPを取得する
    override fun getMP(): Int = _mp
    // 最大HPを取得する
    override fun getMaxHP(): Int = max_hp
    // 最大MPを取得する
    override fun getMaxMP(): Int = max_mp

    // 現在のHPを変更する
    override fun setHP(hp:Int){
        _hp = hp
    }

    // 現在のMPを変更する
    override fun setMP(mp:Int){
        _mp = mp
    }

}


fun main(args: Array<String>){

    val hero: RPG = createRPG(max_hp=100, max_mp=20)
    val monster: RPG = createRPG(max_hp=120, max_mp=10)

    // 現在のmonsterのHPを表示する
    print("現在のモンスターのHP: ")
    println(monster.getHP())

    // heroがmonsterに攻撃した!
    println("勇者は攻撃した!")
    hero.attack(monster)

    // 現在のmonsterのHPを表示する
    print("現在のモンスターのHP: ")
    println(monster.getHP())

    println("----------------")
    // 現在のheroのMPを表示する
    print("現在の勇者のHP: ")
    println(hero.getHP())

    // モンスターは勇者に魔法を使った!
    print("現在のモンスターのMP: ")
    println(monster.getMP())

    println("モンスターは魔法を使った!")
    monster.magic(hero)
    print("現在のモンスターのMP: ")
    println(monster.getMP())

    print("現在の勇者のHP: ")
    println(hero.getHP())


    println("----------------")

    println("勇者は宿屋で寝た")
    hero.inn()
    print("現在の勇者のHP: ")
    println(hero.getHP())

}

実行結果は前回と変わらない。

Related posts

コメントを残す