From 14960477225c3f68b5c9d24c62231fae14556504 Mon Sep 17 00:00:00 2001
From: PhenixCeleste <vivien.d06@gmail.com>
Date: Mon, 14 Feb 2022 15:29:32 +0100
Subject: [PATCH] new capacities added; capacity class upgraded

---
 src/main/scala/backend/Main.scala             | 10 ++--
 src/main/scala/backend/Pokemon/7              | 26 +++++++++
 src/main/scala/backend/Pokemon/Capacity.scala | 11 +++-
 .../backend/Pokemon/CapacityFactory.scala     | 20 ++++++-
 src/main/scala/backend/Pokemon/Pokemon.scala  |  4 +-
 .../backend/Pokemon/PokemonFactory.scala      | 54 +++++++++++++++++--
 6 files changed, 112 insertions(+), 13 deletions(-)
 create mode 100644 src/main/scala/backend/Pokemon/7

diff --git a/src/main/scala/backend/Main.scala b/src/main/scala/backend/Main.scala
index 7561898..6d9363a 100644
--- a/src/main/scala/backend/Main.scala
+++ b/src/main/scala/backend/Main.scala
@@ -1,15 +1,15 @@
 @main def main() =
-    val pkmn = PokemonFactory("Bulbasaur")
+    val pkmn1 = PokemonFactory("Bulbasaur")
     val pkmn2 = PokemonFactory("Charmander")
     val pkmn3 = PokemonFactory("Squirtle")
 
-    println(pkmn)
+    println(pkmn1)
     println(pkmn2)
     println(pkmn3)
 
-    pkmn.useCapacity(CapacityFactory("Vine Whip"), pkmn2)
-    pkmn.useCapacity(CapacityFactory("Vine Whip"), pkmn3)
+    pkmn1.useCapacity(CapacityFactory("Vine Whip"), pkmn2)
+    pkmn1.useCapacity(CapacityFactory("Vine Whip"), pkmn3)
 
-    println(pkmn)
+    println(pkmn1)
     println(pkmn2)
     println(pkmn3)
diff --git a/src/main/scala/backend/Pokemon/7 b/src/main/scala/backend/Pokemon/7
new file mode 100644
index 0000000..9f3656a
--- /dev/null
+++ b/src/main/scala/backend/Pokemon/7
@@ -0,0 +1,26 @@
+object PokemonFactory:
+
+    private case class Bulbasaur()
+        extends Pokemon(
+            "Bulbasaur",
+            11,
+            List(Grass, Poison),
+            List(apply("Absorb"), apply("Vine Whip"), apply("Constrict"), apply("Bubble")),
+            49,
+            49,
+            45,
+            45,
+            1
+        )
+    private case class Charmander()
+        extends Pokemon(
+        "Charmander",
+        12, List(Fire),
+        List(apply("Bubble"), apply("Bubble Beam"), apply("Rock Throw"), apply("Absorb")),
+        52, 43, 65, 39, 1)
+    private case class Squirtle() extends Pokemon("Squirtle", 11, List(Water), List(), 48, 65, 43, 44, 1)
+
+    def apply(name: String): Pokemon = name match
+        case "Bulbasaur"  => Bulbasaur()
+        case "Charmander" => Charmander()
+        case "Squirtle"   => Squirtle()
diff --git a/src/main/scala/backend/Pokemon/Capacity.scala b/src/main/scala/backend/Pokemon/Capacity.scala
index 730eeef..a5855a7 100644
--- a/src/main/scala/backend/Pokemon/Capacity.scala
+++ b/src/main/scala/backend/Pokemon/Capacity.scala
@@ -1 +1,10 @@
-class Capacity(val name: String, val ctype: Type, val maxUses: Int, val power: Int)
+class Capacity(val name: String, val ctype: Type, val maxUses: Int, private var _usesLeft: Int, val power: Int):
+
+    // getter
+    def usesLeft: Int = this._usesLeft
+
+    // setter
+    def usesLeft_=(uses: Int) = this._usesLeft = uses
+
+    def useCapacity() =
+        this._usesLeft = this.usesLeft - 1
diff --git a/src/main/scala/backend/Pokemon/CapacityFactory.scala b/src/main/scala/backend/Pokemon/CapacityFactory.scala
index 1c47d63..a87c1cd 100644
--- a/src/main/scala/backend/Pokemon/CapacityFactory.scala
+++ b/src/main/scala/backend/Pokemon/CapacityFactory.scala
@@ -1,6 +1,22 @@
 object CapacityFactory:
 
-    private case class VineWhip() extends Capacity("Vine Whip", Grass, 10, 35)
+    private case class Absorb() extends Capacity("Absorb", Grass, 25, 25, 20)
+    private case class Bubble() extends Capacity("Bubble", Water, 30, 30, 40)
+    private case class BubbleBeam() extends Capacity("Bubble Beam", Water, 20, 20, 65)
+    private case class Constrict() extends Capacity("Constrict", Normal, 35, 35, 10)
+    private case class Ember() extends Capacity("Ember", Fire, 25, 25, 40)
+    private case class FireSpin() extends Capacity("Fire Spin", Fire, 15, 15, 35)
+    private case class RockThrow() extends Capacity("Rock Throw", Rock, 15, 15, 50)
+    private case class Thunder() extends Capacity("Thunder", Electric, 10, 10, 110)
+    private case class VineWhip() extends Capacity("Vine Whip", Grass, 25, 25, 45)
 
     def apply(name: String): Capacity = name match
-        case "Vine Whip" => VineWhip()
+        case "Absorb"      => Absorb()
+        case "Bubble"      => Bubble()
+        case "Bubble Beam" => BubbleBeam()
+        case "Constrict"   => Constrict()
+        case "Ember"       => Ember()
+        case "Fire Spin"   => FireSpin()
+        case "Rock Throw"  => RockThrow()
+        case "Thunder"     => Thunder()
+        case "Vine Whip"   => VineWhip()
diff --git a/src/main/scala/backend/Pokemon/Pokemon.scala b/src/main/scala/backend/Pokemon/Pokemon.scala
index 8490be2..fe6deae 100644
--- a/src/main/scala/backend/Pokemon/Pokemon.scala
+++ b/src/main/scala/backend/Pokemon/Pokemon.scala
@@ -1,4 +1,4 @@
-trait Pokemon( // TODO: must add later max_life...
+trait Pokemon(
     private var _name: String,
     private var _life: Int,
     val ptype: List[Type],
@@ -34,7 +34,7 @@ trait Pokemon( // TODO: must add later max_life...
 
         other.decreaseLife(Math.round(damage.toFloat))
 
-    def decreaseLife(x: Int) = this._life = this._life - x
+    def decreaseLife(x: Int) = this._life = this.life - x
 
     override def toString(): String =
         s"[${this.name}] Life: ${this.life}\nMaxLife: ${this.maxLife}\nAttack: ${this.attack}\nDefense: ${this.defense}\nSpeed: ${this.speed}\n"
diff --git a/src/main/scala/backend/Pokemon/PokemonFactory.scala b/src/main/scala/backend/Pokemon/PokemonFactory.scala
index 23f8126..88c608a 100644
--- a/src/main/scala/backend/Pokemon/PokemonFactory.scala
+++ b/src/main/scala/backend/Pokemon/PokemonFactory.scala
@@ -1,8 +1,56 @@
 object PokemonFactory:
 
-    private case class Bulbasaur() extends Pokemon("Bulbasaur", 11, List(Grass, Poison), List(), 49, 49, 45, 45, 1)
-    private case class Charmander() extends Pokemon("Charmander", 12, List(Fire), List(), 52, 43, 65, 39, 1)
-    private case class Squirtle() extends Pokemon("Squirtle", 11, List(Water), List(), 48, 65, 43, 44, 1)
+    private case class Bulbasaur()
+        extends Pokemon(
+            "Bulbasaur",
+            11,
+            List(Grass, Poison),
+            List(
+                CapacityFactory("Absorb"),
+                CapacityFactory("Vine Whip"),
+                CapacityFactory("Constrict"),
+                CapacityFactory("Bubble")
+            ),
+            49,
+            49,
+            45,
+            45,
+            1
+        )
+    private case class Charmander()
+        extends Pokemon(
+            "Charmander",
+            12,
+            List(Fire),
+            List(
+                CapacityFactory("Fire Spin"),
+                CapacityFactory("Ember"),
+                CapacityFactory("Rock Throw"),
+                CapacityFactory("Thunder")
+            ),
+            52,
+            43,
+            65,
+            39,
+            1
+        )
+    private case class Squirtle()
+        extends Pokemon(
+            "Squirtle",
+            11,
+            List(Water),
+            List(
+                CapacityFactory("Bubble"),
+                CapacityFactory("Bubble Beam"),
+                CapacityFactory("Rock Throw"),
+                CapacityFactory("Absorb")
+            ),
+            48,
+            65,
+            43,
+            44,
+            1
+        )
 
     def apply(name: String): Pokemon = name match
         case "Bulbasaur"  => Bulbasaur()
-- 
GitLab