This repository has been archived on 2021-09-06. You can view files and clone it, but cannot push or open issues or pull requests.
vuejs_course/2021-01-22 prj-monster-01-s.../app.js

123 lines
3.4 KiB
JavaScript
Raw Permalink Normal View History

2021-01-20 22:50:24 +01:00
"use strict";
2021-01-22 19:49:46 +01:00
function getRandomValue(min, max) {
2021-01-20 22:50:24 +01:00
return Math.floor(Math.random() * (max - min)) + min;
}
const app = Vue.createApp({
data() {
return {
playerHealth: 100,
monsterHealth: 100,
battleLog: [],
2021-01-21 12:28:31 +01:00
currentRound: 0,
2021-01-22 19:50:36 +01:00
winner: null,
2021-01-20 22:50:24 +01:00
};
},
computed: {
monsterBarStyles() {
2021-01-22 19:52:56 +01:00
if (this.monsterHealth < 0) {
return { width: "0%" };
}
2021-01-20 22:50:24 +01:00
return { width: this.monsterHealth + "%" };
},
playerBarStyles() {
2021-01-22 19:52:56 +01:00
if (this.playerHealth < 0) {
return { width: "0%" };
}
2021-01-20 22:50:24 +01:00
return { width: this.playerHealth + "%" };
},
2021-01-21 12:28:31 +01:00
specialAttackAllowed() {
return this.currentRound % 3 !== 0;
},
2021-01-22 19:50:36 +01:00
playerWon() {
if (this.winner === "player") {
return true;
} else {
return false;
}
},
monsterWon() {
if (this.winner === "monster") {
return true;
} else {
return false;
}
},
draw() {
if (this.winner === "draw") {
return true;
} else {
return false;
}
},
},
watch: {
playerHealth(value) {
if (value <= 0 && this.monsterHealth <= 0) {
this.winner = "draw";
} else if (value <= 0) {
this.winner = "monster";
}
},
monsterHealth(value) {
if (value <= 0 && this.playerHealth <= 0) {
this.winner = "draw";
} else if (value <= 0) {
this.winner = "player";
}
},
2021-01-20 22:50:24 +01:00
},
methods: {
2021-01-22 20:01:25 +01:00
restartGame() {
this.playerHealth = 100;
this.monsterHealth = 100;
this.winner = null;
this.currentRound = 0;
2021-01-22 20:40:40 +01:00
this.battleLog = [];
2021-01-22 20:01:25 +01:00
},
2021-01-20 22:50:24 +01:00
attackMonster() {
2021-01-21 12:28:31 +01:00
this.currentRound++;
2021-01-22 20:14:19 +01:00
const attackValue = getRandomValue(5, 12);
this.monsterHealth -= attackValue;
2021-01-22 20:21:30 +01:00
this.addToBattleLog("player", "attack", attackValue);
2021-01-20 22:50:24 +01:00
this.attackPlayer();
},
2021-01-21 12:28:31 +01:00
specialAttackMonster() {
this.currentRound++;
2021-01-22 20:14:19 +01:00
const attackValue = getRandomValue(10, 25);
this.monsterHealth -= attackValue;
2021-01-22 20:21:30 +01:00
this.addToBattleLog("player", "special attack", attackValue);
2021-01-22 19:49:46 +01:00
this.attackPlayer();
},
2021-01-22 19:50:16 +01:00
healPlayer() {
this.currentRound++;
const healValue = getRandomValue(8, 20);
if (this.playerHealth + healValue > 100) {
this.playerHealth = 100;
} else {
this.playerHealth += healValue;
}
2021-01-22 20:21:30 +01:00
this.addToBattleLog("player", "heal", healValue);
2021-01-21 12:28:31 +01:00
this.attackPlayer();
},
2021-01-22 20:05:29 +01:00
surrender() {
this.winner = "monster";
},
2021-01-20 22:50:24 +01:00
attackPlayer() {
2021-01-22 20:14:19 +01:00
const attackValue = getRandomValue(8, 15);
2021-01-22 20:21:30 +01:00
this.addToBattleLog("monster", "attack", attackValue);
2021-01-22 20:14:19 +01:00
this.playerHealth -= attackValue;
},
2021-01-22 20:21:30 +01:00
addToBattleLog(who, what, value) {
this.battleLog.unshift({
actionBy: who,
actionType: what,
actionValue: value,
});
2021-01-20 22:50:24 +01:00
},
},
});
app.mount("#game");