From a26090f93ecb28204f2b6a9a9f0421727c045c70 Mon Sep 17 00:00:00 2001
From: Pedram Ghane
Date: Sun, 11 May 2025 12:35:44 +0200
Subject: [PATCH] done
---
src/viking.js | 112 ++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 108 insertions(+), 4 deletions(-)
diff --git a/src/viking.js b/src/viking.js
index 9017bfc8a..d4b9f6268 100755
--- a/src/viking.js
+++ b/src/viking.js
@@ -1,11 +1,115 @@
// Soldier
-class Soldier {}
+class Soldier {
+ constructor(health, strength) {
+ this.health = health;
+ this.strength = strength;
+ }
+
+ attack() {
+ return this.strength;
+ }
+
+ receiveDamage(damage) {
+ this.health -= damage;
+ }
+}
// Viking
-class Viking {}
+class Viking extends Soldier {
+ constructor(name, health, strength) {
+ super(health, strength);
+ this.name = name;
+ }
+ receiveDamage(damage) {
+ this.health -= damage;
+
+ if (this.health > 0) {
+ return `${this.name} has received ${damage} points of damage`;
+ } else {
+ return `${this.name} has died in act of combat`;
+ }
+ }
+
+ battleCry() {
+ return "Odin Owns You All!";
+ }
+}
// Saxon
-class Saxon {}
+class Saxon extends Soldier {
+ constructor(health, strength) {
+ super(health, strength);
+ }
+
+ receiveDamage(damage) {
+ this.health -= damage;
+
+ if (this.health > 0) {
+ return `A Saxon has received ${damage} points of damage`;
+ } else {
+ return `A Saxon has died in combat`;
+ }
+ }
+}
// War
-class War {}
+class War {
+ constructor() {
+ this.vikingArmy = [];
+ this.saxonArmy = [];
+ }
+
+ addViking(vikingObj) {
+ this.vikingArmy.push(vikingObj);
+ }
+
+ addSaxon(saxonObj) {
+ this.saxonArmy.push(saxonObj);
+ }
+
+ vikingAttack() {
+ const randomSaxonIndex = Math.floor(Math.random() * this.saxonArmy.length);
+ const randomVikingIndex = Math.floor(
+ Math.random() * this.vikingArmy.length
+ );
+
+ const saxon = this.saxonArmy[randomSaxonIndex];
+ const viking = this.vikingArmy[randomVikingIndex];
+
+ const result = saxon.receiveDamage(viking.strength);
+
+ if (saxon.health <= 0) {
+ this.saxonArmy.splice(randomSaxonIndex, 1);
+ }
+
+ return result;
+ }
+
+ saxonAttack() {
+ const randomSaxonIndex = Math.floor(Math.random() * this.saxonArmy.length);
+ const randomVikingIndex = Math.floor(
+ Math.random() * this.vikingArmy.length
+ );
+
+ const saxon = this.saxonArmy[randomSaxonIndex];
+ const viking = this.vikingArmy[randomVikingIndex];
+
+ const result = viking.receiveDamage(saxon.strength);
+
+ if (viking.health <= 0) {
+ this.vikingArmy.splice(randomVikingIndex, 1);
+ }
+
+ return result;
+ }
+
+ showStatus() {
+ if (!this.saxonArmy.length) {
+ return "Vikings have won the war of the century!";
+ } else if (!this.vikingArmy.length) {
+ return "Saxons have fought for their lives and survived another day...";
+ } else {
+ return "Vikings and Saxons are still in the thick of battle.";
+ }
+ }
+}