Javascript 函数间共享随机变量
我正在尝试编写一个游戏,其中一部分有一个战斗系统。我希望玩家点击一个按钮的次数与他们想要找到对手的次数一样多,然后当他们找到一个自己喜欢的按钮时,点击攻击按钮,一个定时事件会慢慢显示结果 我遇到的问题是:Javascript 函数间共享随机变量,javascript,Javascript,我正在尝试编写一个游戏,其中一部分有一个战斗系统。我希望玩家点击一个按钮的次数与他们想要找到对手的次数一样多,然后当他们找到一个自己喜欢的按钮时,点击攻击按钮,一个定时事件会慢慢显示结果 我遇到的问题是: -如果变量在函数外部,则只能渗透一次,但如果它在第一个函数内部,则其他函数无法在战斗中使用这些值。 -胜利的最大英亩数是一根弦,因此它不是10+3=13,而是103。我怎样才能解决这个问题? 非常感谢您的关注,我感谢您的帮助 Javascript: var titles = ["Pe
-如果变量在函数外部,则只能渗透一次,但如果它在第一个函数内部,则其他函数无法在战斗中使用这些值。
-胜利的最大英亩数是一根弦,因此它不是10+3=13,而是103。我怎样才能解决这个问题? 非常感谢您的关注,我感谢您的帮助 Javascript:
var titles = ["Peasant", "Knight"];
var first = ["Ada", "Adro", "Ama"];
var last = ["nija", "har", "nake"];
var random_name1 = titles[Math.floor(Math.random() * titles.length)] + ' ' + first[Math.floor(Math.random() * first.length)] + last[Math.floor(Math.random() * last.length)];
var random_acres1 = (max_acres * (Math.floor(Math.random() * (140 - 75)) + 75) / 100).toFixed(0);
var random_troops1 = (random_acres1 * (Math.floor(Math.random() * (1500 - 600)) + 600) / 100).toFixed(0);
var random_off1 = (random_troops1 * (Math.floor(Math.random() * (1200 - 400)) + 400) / 100).toFixed(0);
var combat_victory_acres1 = (random_acres1 * (((Math.random() * (35 - 11)) + 11) / 100)).toFixed(0);
var combat_defeat_acres1 = (random_acres1 * (Math.floor(Math.random() * (20 - 11)) + 11) / 100).toFixed(0);
var text_victory = 'You have been awarded with ';
var text_defeat = 'You have lost control of ';
var text_acres = ' acres.';
function infiltrate(){
var x = document.getElementById("Combat_table");
if (x.style.display === "none") {
x.style.display = "block";
}
document.getElementById('combat_army_strength').innerHTML = army_strength;
document.getElementById('combat_max_acres').innerHTML = max_acres;
document.getElementById('random_name1').innerHTML = random_name1;
document.getElementById('random_acres1').innerHTML = random_acres1;
document.getElementById('random_troops1').innerHTML = random_troops1;
document.getElementById('random_off1').innerHTML = random_off1;
};
function attack_random1(){
document.getElementById("attack_button1").style.display="none";
document.getElementById("infiltration").style.display="none";
var y = document.getElementById("Combat_Results");
if (y.style.display === "none") {
y.style.display = "block";
}
setTimeout(Combat_Text4, 5000)
var final_outcome1 = army_strength - random_off1;
if (final_outcome1 >= 0) {
setTimeout(Combat_Text_Victory1, 6000);
} else {
setTimeout(Combat_Text_Defeat1, 6000);
}
};
function Combat_Text4() {
document.getElementById("Combat_Results4").innerHTML = "The battle is over, a scout is dispatched to you with the results.";
}
function Combat_Text_Victory1() {
max_acres = max_acres + combat_victory_acres1;
var text_victory_1 = text_victory + combat_victory_acres1 + text_acres;
document.getElementById("Combat_Results5").innerHTML = "You achieved <b>Victory!</b>";
document.getElementById("Combat_Results6").innerHTML = text_victory_1;
document.getElementById('max_acres').innerHTML = max_acres;
document.getElementById('combat_max_acres').innerHTML = max_acres;
}
function Combat_Text_Defeat1() {
max_acres = max_acres - combat_defeat_acres1;
var text_defeat_1 = text_defeat + combat_defeat_acres1 + text_acres;
document.getElementById("Combat_Results5").innerHTML = "You have been <b>Defeated!</b>";
document.getElementById("Combat_Results6").innerHTML = text_defeat_1;
document.getElementById('max_acres').innerHTML = max_acres;
document.getElementById('combat_max_acres').innerHTML = max_acres;
}
var titles=[“农民”、“骑士”];
var first=[“Ada”、“Adro”、“Ama”];
var last=[“nija”、“har”、“nake”];
var random_name1=titles[Math.floor(Math.random()*titles.length)]+“”+first[Math.floor(Math.random()*first.length)]+last[Math.floor(Math.random()*last.length)];
var random_acres1=(最大英亩*(数学楼层(数学随机()*(140-75))+75)/100)。toFixed(0);
var random_troops1=(random_acres1*(Math.floor(Math.random()*(1500-600))+600)/100)。toFixed(0);
var random_off1=(random_troops1*(Math.floor(Math.random()*(1200-400))+400)/100)。toFixed(0);
var战斗胜利acres1=(随机acres1*((数学随机()*(35-11))+11)/100)).toFixed(0);
var combat_Fuel_acres1=(random_acres1*(Math.floor(Math.random()*(20-11))+11)/100)。toFixed(0);
var text_victory='您已获得';
var text_fail='您已失去对'的控制';
var text_acres=‘acres’;
函数渗透(){
var x=document.getElementById(“战斗表”);
如果(x.style.display==“无”){
x、 style.display=“block”;
}
document.getElementById('combat_army_strength')。innerHTML=army_strength;
document.getElementById('combat_max_acres')。innerHTML=max_acres;
document.getElementById('random_name1')。innerHTML=random_name1;
document.getElementById('random_acres1')。innerHTML=random_acres1;
document.getElementById('random_troops1')。innerHTML=random_troops1;
document.getElementById('random_off1')。innerHTML=random_off1;
};
函数攻击_random1(){
document.getElementById(“攻击按钮1”).style.display=“无”;
document.getElementById(“渗透”).style.display=“无”;
var y=document.getElementById(“战斗结果”);
如果(y.style.display==“无”){
y、 style.display=“block”;
}
setTimeout(战斗文本4,5000)
var最终结果1=陆军兵力-随机输出1;
如果(最终结果1>=0){
设置超时(战斗文本胜利1,6000);
}否则{
setTimeout(战斗文本失败1,6000);
}
};
函数战斗_Text4(){
document.getElementById(“Combat_Results4”).innerHTML=“战斗结束,将派遣一名侦察员向您发送结果。”;
}
功能战斗\文本\胜利1(){
最大英亩=最大英亩+战斗胜利英亩1;
var text_victory_1=text_victory+战斗_victory_acres1+text_acres;
document.getElementById(“战斗结果5”).innerHTML=“你取得了胜利!”;
document.getElementById(“Combat_Results6”).innerHTML=text_victory_1;
document.getElementById('max_acres')。innerHTML=max_acres;
document.getElementById('combat_max_acres')。innerHTML=max_acres;
}
函数战斗_文本_失败1(){
max_acres=max_acres-战斗击败acres1;
var text_TEQUE_1=text_TEQUE+战斗_TEQUE_acres1+text_acres;
document.getElementById(“战斗结果5”).innerHTML=“你被打败了!”;
document.getElementById(“Combat_Results6”).innerHTML=text_Failure_1;
document.getElementById('max_acres')。innerHTML=max_acres;
document.getElementById('combat_max_acres')。innerHTML=max_acres;
}
HTML:
土地总面积:10
总进攻:0
渗透王国
国名
英亩
部队
人数
总数
犯罪
攻击!
胜利的max_acres
是一个字符串,因此它不是10+3=13,而是103。我怎样才能解决这个问题
使用而不是,因为对于加法数值,两个操作数都需要作为数字,而不是字符串
使用toFixed
仅用于显示数字
对于其他部分,我建议使用具有相同项数组的对象,如
请尝试将您的代码简化为一堵代码墙-也就是说,您确实应该创建一个函数来清理重复的代码
(Math.floor(Math.random()*(20-11))+11)/100)。toFixed(0)
,并且您应该为这些设置使用一些命名变量,而不是一堆神奇的数字。parseInt()将帮助您解决103~13问题。math.round解决了max_acres问题,但我仍然遇到一个问题,即每次按下按钮都不会生成一个全局变量,但如果它们被移动到渗透函数中,那么该数量就不能用于攻击函数
<div id="Combat" class="tabcontent">
Total Land: <span id="combat_max_acres">10</span><br>
Total Offense: <span id="combat_army_strength">0</span><p>
<button id="infiltration" onclick="infiltrate()">Infiltrate Kingdoms</button>
<div id="Combat_table" style="display: none">
<center><table>
<tr valign="center">
<th>Kingdom Name</th>
<th>Acres</th>
<th>Troop <br>Numbers</th>
<th>Total <br>Offense</th>
<th></th>
</tr>
<tr id="combat_row1">
<td><span id="random_name1"></span></td>
<td><span id="random_acres1"></span></td>
<td><span id="random_troops1"></span></td>
<td><span id="random_off1"></span></td>
<td><button onclick="attack_random1()" id="attack_button1">Attack!</button></td>
</tr>
</table>
</div>
<br>
<div id="Combat_Results" style="display: none">
<center><table><tr>
<td><center><span id="Combat_Results4"></span></td>
</tr><tr>
<td><center><span id="Combat_Results5"></span></td>
</tr><tr>
<td><center><span id="Combat_Results6"></span></td>
</tr>
</table>
</div>
{
name: [],
acres: [],
troops: [],
off: [],
victory_acres: [],
combat_defeat_acres: [],
// etc.
}