181 lines
7.1 KiB
Kotlin
181 lines
7.1 KiB
Kotlin
import java.util.*
|
||
|
||
abstract class AggressiveCard: Card {
|
||
override fun startSkill() {
|
||
println(activeString)
|
||
owner.enemy.attackingCard = this
|
||
owner.enemy.effectBuffer = this.effects
|
||
owner.enemy.effectBuffer.forEach { it.apply() }
|
||
}
|
||
|
||
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}"
|
||
}
|
||
}
|
||
|
||
//ordinary card
|
||
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(DrawFromDeck(owner, numberOfCards = 2), Defense(owner))
|
||
override val activeString = "$owner 洞悉了 ${owner.enemy} 的攻擊,並抽取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} 的攻擊,反彈了其效果"
|
||
}
|
||
|
||
//SP card
|
||
//Guo's card
|
||
class SpaceZipperDoor(override val owner: Character): DefensiveCard() {
|
||
override val name = "空間之鍊(門)"
|
||
override val id = 101
|
||
override val activeString = "$owner 使出了空間之鍊(門)"
|
||
override val effects: Array<Effect> = arrayOf(Copy(owner), Defense(owner))
|
||
}
|
||
class SpaceZipperShell(override val owner: Character): GeneralCard() {
|
||
override val name = "空間之鍊(殼)"
|
||
override val id = 102
|
||
override val activeString = "$owner 使出了空間之鍊(殼)"
|
||
override val effects: Array<Effect> = arrayOf(BecomeInvincible(owner, turns = 2))
|
||
}
|
||
class SpaceZipperDestroy(override val owner: Character): AggressiveCard() {
|
||
override val name = "空間之鍊(滅)"
|
||
override val id = 103
|
||
override val activeString = "$owner 使出了空間之鍊(滅)"
|
||
override val effects: Array<Effect> = arrayOf(Damage(owner.enemy, decreaseLife = 5),
|
||
LoseCard(owner.enemy, num = 2))
|
||
}
|
||
|
||
//Rabbit's card
|
||
class NoScienceSlash(override val owner: Character): Card {
|
||
override val name = "科學無用論(高速砍擊)"
|
||
override val id = 201
|
||
override val activeString = "$owner 使用了科學無用論(高速砍擊)"
|
||
override val effects: Array<Effect> = arrayOf(UndefendableDamage(owner.enemy, decreaseLife = 3))
|
||
override fun startSkill() {
|
||
effects.forEach { it.apply() }
|
||
}
|
||
|
||
override fun toString() = "$id. $name"
|
||
}
|
||
class NoSciencePowerIncrease(override val owner: Character): GeneralCard() {
|
||
override val name = "科學無用論(力量增幅)"
|
||
override val id = 202
|
||
override val activeString = "$owner 使用了科學無用論(力量增幅)"
|
||
override val effects: Array<Effect> = arrayOf(ChangeDamageAddition(owner.enemy, num = 1, turns = 3))
|
||
}
|
||
class NoScienceFinal(override val owner: Character): Card {
|
||
override val name = "科學無用論(終焉一擊)"
|
||
override val id = 203
|
||
override val activeString = "$owner 使用了科學無用論(終焉一擊)"
|
||
override val effects: Array<Effect> = arrayOf(UndefendableDamage(owner.enemy, decreaseLife = 5))
|
||
override fun startSkill() {
|
||
effects.forEach { it.apply() }
|
||
}
|
||
|
||
override fun toString() = "$id. $name"
|
||
}
|
||
|
||
|
||
|