128 lines
5.0 KiB
Kotlin
128 lines
5.0 KiB
Kotlin
import java.util.*
|
||
|
||
abstract class AggressiveCard: Card {
|
||
override fun startSkill() {
|
||
println(activeString)
|
||
owner.enemy.effectBuffer = this.effects
|
||
owner.enemy.attackingCard = this
|
||
owner.enemy.effectBuffer.forEach { it.apply() }
|
||
owner.enemy.effectBuffer = emptyArray()
|
||
owner.enemy.attackingCard = null
|
||
}
|
||
|
||
override fun toString(): String {
|
||
return "${this.id}. ${this.name}"
|
||
}
|
||
}
|
||
|
||
abstract class DefensiveCard: Card {
|
||
class NotInPassiveContextException: Exception()
|
||
override fun startSkill() {
|
||
if(owner.effectBuffer.isEmpty()) {
|
||
throw NotInPassiveContextException()
|
||
}
|
||
println(activeString)
|
||
this.effects.forEach { it.apply() }
|
||
}
|
||
|
||
override fun toString(): String {
|
||
return "${this.id}. ${this.name}"
|
||
}
|
||
}
|
||
|
||
abstract class GeneralCard: Card {
|
||
override fun startSkill() {
|
||
println(activeString)
|
||
this.effects.forEach { it.apply() }
|
||
}
|
||
|
||
override fun toString(): String {
|
||
return "${this.id}. ${this.name}"
|
||
}
|
||
}
|
||
|
||
class AttackCard(override val owner: Character): AggressiveCard() {
|
||
override val name = "攻擊"
|
||
override val id = 1
|
||
override val effects: Array<Effect> = arrayOf(Damage(owner.enemy, decreaseLife = 2))
|
||
override val activeString = "$owner 攻擊 ${owner.enemy}"
|
||
|
||
}
|
||
class DefendCard(override val owner: Character): DefensiveCard() {
|
||
override val name = "防禦"
|
||
override val id = 2
|
||
override val effects: Array<Effect> = arrayOf(Defense(owner))
|
||
override val activeString = "$owner 防禦成功"
|
||
}
|
||
class HealCard(override val owner: Character): GeneralCard() {
|
||
override val name = "治癒"
|
||
override val id = 3
|
||
override val effects: Array<Effect> = arrayOf(Heal(owner, increaseLife = 2))
|
||
override val activeString = "$owner 回復2點生命"
|
||
}
|
||
class SupplyCard(override val owner: Character): GeneralCard() {
|
||
override val name = "補給"
|
||
override val id = 4
|
||
override val effects: Array<Effect> = arrayOf(DrawFromDeck(owner, numberOfCards = 2))
|
||
override val activeString = "$owner 增加2張手牌"
|
||
}
|
||
class RobbingCard(override val owner: Character): AggressiveCard() {
|
||
override val name = "強奪"
|
||
override val id = 5
|
||
override val effects: Array<Effect> = arrayOf(ChooseFromCharacterHand(owner, owner.enemy))
|
||
override val activeString = "$owner 正在對 ${owner.enemy} 行搶"
|
||
}
|
||
class SurpriceCard(override val owner: Character): AggressiveCard() {
|
||
override val name = "奇襲"
|
||
override val id = 6
|
||
override val effects: Array<Effect> = arrayOf(Damage(owner.enemy, decreaseLife = 2),
|
||
LoseCard(owner.enemy))
|
||
override val activeString = "$owner 發動奇襲"
|
||
}
|
||
class AwareCard(override val owner: Character): DefensiveCard() {
|
||
override val name = "洞悉"
|
||
override val id = 7
|
||
override val effects: Array<Effect> = arrayOf(Defense(owner), DrawFromDeck(owner, numberOfCards = 2))
|
||
override val activeString = "$owner 洞悉了 ${owner.enemy} 的 ${owner.attackingCard},並抽取2張手牌"
|
||
}
|
||
class PlanCard(override val owner: Character): GeneralCard() {
|
||
override val name = "妙策"
|
||
override val id = 8
|
||
override val effects: Array<Effect> = arrayOf(ChooseFromDeck(owner))
|
||
override val activeString = "$owner 有個妙策"
|
||
}
|
||
class SweepCard(override val owner: Character): AggressiveCard() {
|
||
override val name = "掃射"
|
||
override val id = 9
|
||
private val damage = Random().nextInt(6)
|
||
override val effects: Array<Effect>
|
||
get() = arrayOf(Damage(owner.enemy, decreaseLife = damage))
|
||
override val activeString = "$owner 對 ${owner.enemy} 進行掃射,威力是 $damage"
|
||
}
|
||
class BlessCard(override val owner: Character): GeneralCard() {
|
||
override val name = "加護"
|
||
override val id = 10
|
||
override val effects: Array<Effect> = arrayOf(Heal(owner, increaseLife = 3), SolvePoison(owner))
|
||
override val activeString = "$owner 獲得加護,身上的毒素一掃而空,並回復3點生命"
|
||
}
|
||
class PoisonCard(override val owner: Character): GeneralCard() {
|
||
override val name = "劇毒"
|
||
override val id = 11
|
||
override val effects: Array<Effect> = arrayOf(Poison(owner.enemy))
|
||
override val activeString = "$owner 在食物下毒,${owner.enemy} 中毒了"
|
||
}
|
||
class ChaosCard(override val owner: Character): AggressiveCard() {
|
||
override val name = "狂亂"
|
||
override val id = 12
|
||
override val effects: Array<Effect> = arrayOf(Heal(owner, increaseLife = 3),
|
||
Damage(owner.enemy, decreaseLife = 3))
|
||
override val activeString = "$owner 進入狂亂模式,回復三點生命,並對 ${owner.enemy} 造成三點傷害"
|
||
}
|
||
class ReverseCard(override val owner: Character): DefensiveCard() {
|
||
override val name = "反制"
|
||
override val id = 13
|
||
override val effects: Array<Effect> = arrayOf(Reverse(owner), Defense(owner))
|
||
override val activeString = "$owner 反制了 ${owner.enemy} 的攻擊,反彈了其效果"
|
||
}
|
||
|