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.
}