我大约一个月前才开始学习javascript。我一直在从事一个个人项目,以帮助我磨练自己的脚步,并决定制作一个基于文本的RPG游戏。
我想要实现的是一种基于“滴答”系统或时间的战斗系统。基本上,一旦战斗开始(通过攻击),滴答声就会开始响起,敌人每隔3滴答声(秒)就会袭击我一次。敌人的攻击频率还取决于他们的敏捷性统计。
到目前为止,我有一个基本的战斗系统,可以根据玩家的力量和敌人的防御值随机攻击敌人。但是,敌人只有在我攻击它们后立即进行攻击。这是代码。
regPlayerAttack = function () {
//random boolean to determine if its going to be 10% dmg of positive or
negative
randomDmgFlag = Math.round(Math.random());
//the 10% will be added on
if (randomDmgFlag === 1) {
rawDmg = Math.round((player.level * 3 + player.strength * 8) -
(chosenEnemy.stamina * 2));
randomDmgRange = (15.0 / 100) * rawDmg;
randomDmg = Math.floor(Math.random() * (randomDmgRange - 0) + 0);
totalDmg = rawDmg + randomDmg;
chosenEnemy.health -= totalDmg;
$("#textbox-text").prepend("You attacked the " + chosenEnemy.name +
" for " + totalDmg + " damage." + "<br>");
}
//the 10% will be subtracted
else {
rawDmg = Math.round((player.level * 3 + player.strength * 8) -
(chosenEnemy.stamina * 2));
randomDmgRange = (15.0 / 100) * rawDmg;
randomDmg = Math.floor(Math.random() * (randomDmgRange - 0) + 0);
totalDmg = rawDmg - randomDmg;
chosenEnemy.health -= totalDmg;
$("#textbox-text").prepend("You attacked the " + chosenEnemy.name +
" for " + totalDmg + " damage." + "<br>");
}
}
我对敌人的攻击具有与上面的代码完全相同的功能。 (我知道我应该使其成为一个函数,但我想首先对其进行可视化处理)
因此,总而言之,一旦基于时间系统的战斗开始后,我想让敌人继续攻击我,而他们将根据敏捷度统计数据来更快或更慢地攻击我。我仍然对破坏公式感到困惑,因此一无所获。有任何想法吗??谢谢。
答案 0 :(得分:0)
一个选择是使用转计数器和一个间隔,该间隔每秒触发一次(或您想要的任何时间)。当角色的turn % agility === 0
受到攻击时。 (例如,敏捷度1表示角色每回合攻击一次;敏捷度3表示角色每3回合攻击一次)
const enemies = [
{ agility: 3, name: 'enemy1', hp: 100 }
];
const player = { agility: 1 };
let turn = 0;
const interval = setInterval(() => {
console.clear();
console.log('turn ' + turn);
// player attacks every turn with agility 1:
regPlayerAttack();
// if all enemies are dead, end the interval
if (enemies.every(({ hp }) => hp <= 0)) {
clearInterval(interval);
console.log('done');
}
// every enemy whose agility modulo the current turn is 0 attacks:
enemies
.filter(({ agility }) => turn % agility === 0)
.forEach(enemyAttack);
turn++;
}, 1000);
function regPlayerAttack() {
console.log('player attacking...');
// insert attack logic
}
function enemyAttack(enemy) {
console.log(enemy.name + ' attacking...');
// insert attack logic
}
请注意,像这样,敏捷度与速度成反比-敏捷度越低越好。这样,在不涉及任何分数的情况下,计算就非常容易可视化,但是如果您希望更高的敏捷度来对应更高的速度,则可以根据需要更改公式。