簡體   English   中英

如何讓怪物在 javascript 中隨機擊中玩家

[英]How to make a monster hit a random player in javascript

我正在嘗試在 vue js 中制作一個游戲,我有坦克、dps 和治療師

data: {
        tankHealth: 100,
        healerHealth: 100,
        dpsHealth: 100,
        monsterHealth: 200,
        gameRunning: false,
        turns: [],
},

我有一個按鈕,當它被點擊時,它會進入一個 setinterval function 每隔 1 秒坦克和 dps 攻擊怪物。 治療者治療其中一名玩家。 但是當怪物攻擊玩家時,我希望怪物隨機攻擊這樣的玩家之一:

var monsterDamage = self.calculateDamage(10,20); // returns a random number between 10 and 20
var number = self.randomNumberFn(1,3);
// get a random number here so i can randomly pick a player to attack
switch(number) {
    case 1:
        self.dpsHealth -= monsterDamage;
        if(self.dpsHealth <= 0) {
            self.dpsHealth = 0;
            break;
        }
        break;
    case 2:
        self.tankHealth -= monsterDamage;
        if(self.tankHealth <= 0) {
            self.tankHealth = 0;
            break;
        }
        break;
    case 3:
        self.healerHealth -= monsterDamage;
        if(self.healerHealth <= 0) {
            self.healerHealth = 0;
            break;
        }
        break;
}

當其中一名球員死亡時,問題就來了。 在這種情況下,我希望怪物只攻擊活着的玩家。 在我現在擁有的 model 中,即使其中一名玩家死了,怪物也會繼續攻擊他

也許像這樣?

do {
var n1 = 1;
var n2 = 3;

var monsterDamage = self.calculateDamage(10, 20);
var number = self.randomNumberFn(n1, n2);

switch (number) {
    case 1:
        if (self.dpsHealth === 0) { // === checks type too...
            n1 = 2;
            continue;
        }
        self.dpsHealth = doDamage(self.dpsHealth, monsterDamage);
        break;
    case 2:
        if (self.dpsHealth === 0) {
            continue;
        }
        self.tankHealth = doDamage(self.tankHealth, monsterDamage);
        break;
    case 3:
        if (self.dpsHealth === 0) {
            n2 = 2;
            continue;
        }
        self.healerHealth = doDamage(self.healerHealth, monsterDamage);
        break;
}
} while((self.dpsHealth + self.tankHealth + self.healerHealth) === 0)

function doDamage(health, damage) {
    if ((health - damage) <= 0) {
        return 0;
    } else {
        return health - damage;
    }
}

為了解決這個問題,你可以創建一個數組來保存你的活人,並遍歷所述數組以獲得隨機值。

let livingHumans = []; 

if(dpsHealth > 0) {
  livingHumans.push({name:'dpsHealth', health:dpsHealth});
}
if(tankHealth > 0) {
  livingHumans.push({name:'tankHealth', health:tankHealth});
}
if(healerHealth > 0) {
  livingHumans.push({name:'healerHealth', health:healerHealth});
}

// get random value from array
let number = self.randomNumber(1, livingHumans.length)
// once you receive the output, 
// you can use the name property to find the player in your object. 

name = livingHumans[number].name;
console.log(data[name]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM