【学習kotlinシリーズ】インターフェース
Qiitaでことりん学習帳を発売しています!
インターフェースとは
インターフェースとは、「オブジェクトがどのようなメソッドを持っているか」を定義するもの。あるオブジェクトがそのインターフェースを使って定義すると、そのインターフェースに書かれているメソッドはすべて定義されていないといけない。前回に引き続き、RPGの考え方をベースにインターフェースを定義していく。
## 実際に作ってみる
コードが長くなってしまったが、書いている内容一つ一つは難しくない・・・と思う。(と書いてある解説書はだいたい難しい気もしている)
interface RPG {
// 回復する
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 {
var _hp: Int = max_hp
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())
}
実行結果
現在のモンスターのHP: 120
勇者は攻撃した!
現在のモンスターのHP: 115
----------------
現在の勇者のHP: 100
現在のモンスターのMP: 10
モンスターは魔法を使った!
現在のモンスターのMP: 7
現在の勇者のHP: 80
----------------
勇者は宿屋で寝た
現在の勇者のHP: 100
ディスカッション
コメント一覧
まだ、コメントがありません