【学習kotlinシリーズ】プロパティ
メソッドの定義を必須にするためにインターフェースを定義したが、変数も同様にプロパティとして定義を必須にできる。定義の仕方はメソッドと同様に、インターフェースの中に変数を定義すればいい。前回のインターフェースのコードにプロパティを追加する。
実際に書いてみる
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())
}
実行結果は前回と変わらない。
ディスカッション
コメント一覧
まだ、コメントがありません