javascript - 为敌人制作一个有效的战斗系统
问题描述
试图制作一个让敌人受到伤害的战斗按钮。然后它会增加杀死计数,以便稍后禁用按钮,直到杀死一定数量的怪物。 https://jsfiddle.net/7nbvaszh/9/ 我的小提琴它的底部。我的敌人和 hp 堆叠得很好。我还应该补充一点,玩家应该在点击时损失等于敌人伤害的 hp,所以当老鼠受到 1 点伤害时,基本上是战斗按钮(这将是不同的,只是为了让它工作)所以它应该有 9 hp第一次点击,玩家应该有 9 hp(你可以为 hp 创建一个变量并将其设为 10 其 0 atm,因为我希望稍后解锁 hp,但只是为了测试目的,可以添加它)
我和我的朋友试过这个,但它不起作用
var currentEnemyName;
var currentEnemyHp;
var hasEnemyToFight = false;
var enemyNames = ["rat ","slime ","goblin ","skeleton","zombie ","succubus"]
var enemyHps = [10,20,25,50,75,100]
var enemyStrengths = [1,3,5,10,15,25]
var currentItemIndex = 0;
var ratKills = 0;
var slimeKills = 0;
var goblinKills = 0;
var skeletonKills = 0;
var zombieKills = 0;
var succubusKills = 0;
var Strength = 1;
document.getElementById("enemyHp").innerHTML="";
document.getElementById("enemyName").innerHTML="None";
function spawnNewEnemy(enemyNum){
currentEnemyName = enemyNames[enemyNum];
currentEnemyHp = enemyHps[enemyNum];
hasEnemyToFight = true;
document.getElementById("enemyHp").innerHTML=currentEnemyHp;
document.getElementById("enemyName").innerHTML=currentEnemyName;
}
function fight(){
if(hasEnemyToFight == false){
spawnNewEnemy(currentItemIndex)
document.getElementById("enemyName").innerHTML=currentEnemyName+" appeared!";
}
else{
if(currentEnemyHp > 0){
currentEnemyHp -= 1;
document.getElementById("enemyHp").innerHTML=currentEnemyHp;
if (currentEnemyHp <=0){
currentEnemyHp = 0;
goldcoins += 10;
hasEnemyToFight = false;
if(enemyName == "rat"){
ratKills++
}
else if(enemyName == "skeleton"){
skeletonKills++
}
}
}
document.getElementById("enemyHp").innerHTML=currentEnemyHp;
document.getElementById("enemyName").innerHTML=currentEnemyName;
document.getElementById("goldcoins").innerHTML=goldCoins;
}
我的工作代码的Javascript:
function show() {
var enemy = enemyName[currentItemIndex];
var enemyHitPoints = enemyHp[currentItemIndex];
document.getElementById("enemyName").innerHTML=enemyName[currentItemIndex]
document.getElementById("enemyHp").innerHTML=enemyHp[currentItemIndex]
document.getElementById("previous").disabled=currentItemIndex<=0;
document.getElementById("next").disabled
=currentItemIndex>=enemyName.length-
1;
}
var enemyName = ["rat ","slime ","goblin ","skeleton","zombie
","succubus"]
var enemyHp = [10,20,25,50,75,100]
var enemyStrength = [1,3,5,10,15,25]
var currentItemIndex = 0;
window.onload=function() {
document.getElementById("previous").onclick=function() {
currentItemIndex--;
if (currentItemIndex<=0) {
currentItemIndex=0;
}
show();
}
document.getElementById("next").onclick=function() {
currentItemIndex++;
if (currentItemIndex>=enemyName.length-1) {
currentItemIndex=enemyName.length-1;
}
show();
}
var ratKills = 0;
var slimeKills = 0;
var goblinKills = 0;
var skeletonKills = 0;
var zombieKills = 0;
var succubusKills = 0;
var Strength = 1;
function fight(){
if(enemyName == "rat" && enemyHp > 0)
enemyHp = enemyHp - Strength;
document.getElementById("enemyHp").innerHTML=enemyHp;
if (enemyHp <=0)
enemyHp = 0;
goldcoins = goldcoins +10;
document.getElementById("enemyHp").innerHTML=enemyHp;
document.getElementById("goldcoins").innerHTML=enemyHp;
}
}
html:
<button onclick="fight()" id="Fightbtn" >Fight</button> <span
id="enemyName">rat</span> Hp:<span id="enemyHp">10</span>
<body>
<style>
a {
text-decoration: none;
display: inline-block;
padding: 8px 16px;
}
a:hover {
background-color: #ddd;
color: black;
}
.previous {
background-color: #f1f1f1;
color: black;
}
.next {
background-color: #4CAF50;
color: white;
}
.round {
border-radius: 50%;
}
</style>
<a href="#" id="previous" class="previous round">‹</a>
<a href="#" id="next" class="next round">›</a>
</body>
我希望当你按下战斗按钮让敌人的 hp 下降多少你有多少力量然后一旦 hp 低于 0 给予 10 金币然后敌人的 hp 重置回 10。但此刻战斗按钮不做任何事情,敌人的 hp 也不会下降。玩家的 hp 也应该下降 1 或任何敌人的伤害。我确定我缺少一个简单的解决方案来使我的 if 语句起作用。
解决方案
好的!这是在学习 javascript 的同时获得一些乐趣的良好开端。
你的小提琴坏了的主要原因:
- 有多个
html
,head
和body
标签。一个文档应该只有其中一个。 - 包含您的代码的脚本位于结束
</html>
标记之后,因此浏览器甚至没有执行它。 - 该
fight
函数(以及大量重要变量)是在window.onload
函数内部声明的,因此您无法从按钮调用它。
一旦所有这些都解决了,fight
函数本身就需要指向当前敌人的 hp。就目前而言,它将取代保存所有敌人 hp 信息的数组。
这是一个更新的小提琴,修复了前 3 个并将战斗功能值指向正确的位置。
这显示了更新的小提琴中的脚本内容,这是如何处理的工作草图:
var enemyName = ["rat", "slime", "goblin", "skeleton", "zombie", "succubus"]
var enemyHp = [10, 20, 25, 50, 75, 100]
var enemyStrength = [1, 3, 5, 10, 15, 25]
var enemyIsDead = false
var currentItemIndex = 0;
var goldcoins = 0
var enemy
var enemyHitPoints
var ratKills
var slimeKills
var goblinKills
var skeletonKills
var zombieKills
var succubusKills
var Strength
function show() {
enemy = enemyName[currentItemIndex];
enemyHitPoints = enemyHp[currentItemIndex];
enemyIsDead = false
document.getElementById("enemyName").innerHTML = enemyName[currentItemIndex]
document.getElementById("enemyHp").innerHTML = enemyHp[currentItemIndex]
document.getElementById("previous").disabled = currentItemIndex <= 0;
document.getElementById("next").disabled = currentItemIndex >= enemyName.length - 1;
}
function fight() {
if (enemyHitPoints > 0) {
enemyHitPoints = enemyHitPoints - Strength;
document.getElementById("enemyHp").innerHTML = enemyHitPoints;
} else if (!enemyIsDead) {
enemyHitPoints = 0;
enemyIsDead = true
goldcoins += 10;
document.getElementById("enemyHp").innerHTML = enemyHitPoints;
document.getElementById("goldcoins").innerHTML = goldcoins;
}
}
window.onload = function () {
ratKills = 0;
slimeKills = 0;
goblinKills = 0;
skeletonKills = 0;
zombieKills = 0;
succubusKills = 0;
Strength = 1;
show()
document.getElementById("previous").onclick = function () {
currentItemIndex--;
if (currentItemIndex <= 0) {
currentItemIndex = 0;
}
show();
}
document.getElementById("next").onclick = function () {
currentItemIndex++;
if (currentItemIndex >= enemyName.length - 1) {
currentItemIndex = enemyName.length - 1;
}
show();
}
}
推荐阅读
- javascript - 如何获取所有服务器成员 ID?不和谐.js
- visual-studio-2019 - 为什么我的自动化 Visual Studio 构建突然停止构建?
- angular - Ionic5:“离子构建”和“离子构建--prod”之间的区别
- php - yii2 kartik 多选与关系表错误“调用数组上的成员函数 isAttributeRequired()”
- node.js - 如何在 adonis 5 下载 pdf
- postgresql - 使用 pg_hint_plan 时相同查询的 Postgres 查询计划更改
- jersey - Embedded Jetty + 2 Jersey Servlet:无法同时加载
- bash - 使用 shell 脚本转换文件内容
- azure - 如何在 azure cli 上启用 az 安全评估
- reactjs - App.js react native RBAC登录系统问题