diff --git a/SpecRunner.html b/SpecRunner.html
index 9aa3843ca..c55d6f968 100644
--- a/SpecRunner.html
+++ b/SpecRunner.html
@@ -1,22 +1,25 @@
-
+
Jasmine Spec Runner v2.8.0
+
+
-
+
-
+
-
+
+
diff --git a/src/viking.js b/src/viking.js
index 9017bfc8a..4821b22cb 100755
--- a/src/viking.js
+++ b/src/viking.js
@@ -1,11 +1,102 @@
// 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 {
+ 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(viking) {
+ this.vikingArmy.push(viking);
+ }
+
+ addSaxon(saxon) {
+ this.saxonArmy.push(saxon);
+ }
+
+ vikingAttack() {
+ const viking = this.vikingArmy[Math.floor(Math.random() * this.vikingArmy.length)];
+ const saxonIndex = Math.floor(Math.random() * this.saxonArmy.length);
+ const saxon = this.saxonArmy[saxonIndex];
+
+ const result = saxon.receiveDamage(viking.strength);
+
+ if (saxon.health <= 0) {
+ this.saxonArmy.splice(saxonIndex, 1);
+ }
+
+ return result;
+ }
+
+ saxonAttack() {
+ const saxon = this.saxonArmy[Math.floor(Math.random() * this.saxonArmy.length)];
+ const vikingIndex = Math.floor(Math.random() * this.vikingArmy.length);
+ const viking = this.vikingArmy[vikingIndex];
+
+ const result = viking.receiveDamage(saxon.strength);
+
+ if (viking.health <= 0) {
+ this.vikingArmy.splice(vikingIndex, 1);
+ }
+
+ return result;
+ }
+
+ showStatus() {
+ if (this.saxonArmy.length === 0) {
+ return "Vikings have won the war of the century!";
+ } else if (this.vikingArmy.length === 0) {
+ return "Saxons have fought for their lives and survived another day...";
+ } else {
+ return "Vikings and Saxons are still in the thick of battle.";
+ }
+ }
+}