Beginners JavaScript

Beginners JavaScript

本文关键字:JavaScript Beginners      更新时间:2023-09-26

我是 JavaScript 的新手。我已经通过学习JavaScript(o'reilly(完成了我的工作,但我只是想做我的第一个JavaScript。

我认为最好做一些我感兴趣的事情,事实证明这是相当复杂的。

我基本上是在尝试(最终(模拟太空绿巨人(棋盘游戏(中的情况,其中基因窃取者在他和太空海军陆战队之间有 12 步。第一步,它的6在骰子上杀死Genestealer,然后5或6杀死Genestealer。如果骰子上的数字相同,枪就会卡住。

我只是想在这里模仿第一步。我认为问题出在果酱检查上。

基本上,这输出一如既往,即使我将其更改为 != 它总是显示枪卡住。

我想知道该变量是否需要传递到另一个局部变量中,但它适用于 killCheck,而无需执行此操作。(我试过了,虽然我可能做错了(

这里完全有可能有一些非常简单的错误。

我希望你能提供帮助,或者为我指出正确的方向。

非常感谢!

        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
        <head>
        <title>SH</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript">
      //<![CDATA[
    function diceRoll1() {
       iValue = Math.random(); // random number between 0 and 1
       iValue *= 6; // multiply by 6 to move the decimal
       iValue = Math.floor(iValue)+1; // round to nearest integer. +1 to 1-6.
       var roll1 = iValue;
       document.getElementById('result1').innerHTML = 'Dice roll 1 : ' + roll1;
       killCheck (roll1);
       jamCheck (roll1);
       return;
    }
    function diceRoll2() {
       iValue = Math.random(); // random number between 0 and 1
       iValue *= 6; // multiply by 6 to move the decimal
       iValue = Math.floor(iValue)+1; // round to nearest integer. +1 to 1-6.
       var roll2 = iValue;
       document.getElementById('result2').innerHTML = 'Dice roll 2 : ' + roll2;
       killCheck (roll2);
       jamCheck (roll2);
       return;  
    }
    function killCheck(roll1,roll2){
        if (roll1==6 || roll2==6)
        {
        document.getElementById('kill').innerHTML = 'GS KILLED';
        }
        return;
    }
    function jamCheck(roll1,roll2){
        if (roll1 == roll2)
        {
        document.getElementById('jam').innerHTML = 'GUN JAMMED';
        }
        return;
    }   
    //]]>
    </script>
    </head>
    <body onload="diceRoll1();diceRoll2();killCheck();jamCheck();">
      <p id="result1">Dice roll 1</p>
      <p id="result2">Dice roll 2</p>
      <p id="kill">GS ALIVE</p>
      <p id="jam">GUN FINE</p>
    </body>
    </html>

编辑:我最终在朋友的很多帮助下到达了那里; 这是当前的代码:

...
function getDiceValue() {
var diceValue = Math.random(); 
diceValue *= 6;
diceValue = Math.floor(diceValue) + 1; 
return diceValue;
}
function killCheck(roll1, roll2) {
if (roll1 === 6 || roll2 === 6) {
document.getElementById('kill').innerHTML = 'GS KILLED';
}
return;
}
function jamCheck(roll1, roll2){
if (roll1 === roll2) {
document.getElementById('jam').innerHTML = 'GUN JAMMED';
}
return;
}
function rollDice() {
var roll1 = getDiceValue(),
roll2 = getDiceValue();
document.getElementById('result1').innerHTML = 'Dice roll 1 : ' + roll1;
document.getElementById('result2').innerHTML = 'Dice roll 2 : ' + roll2;
killCheck (roll1, roll2);
jamCheck (roll1, roll2);
}
//]]>
...
<body onload="rollDice();">

Math.floor(( 向下舍入(想想名字...ceil 四舍五入(如果你真的想四舍五入到"最近"整数,你需要使用 Math.round((。

在您的情况下,如果您乘以 6 并向下舍入,您将永远不会得到大于 5 的数字。

我怀疑这是你的问题,

尽管我只看了一眼你的代码,所以,如果这只是一个错误而不是你问题的原因,请原谅我。

[编辑]经过进一步思考,忽略上述内容。 问题是您的方法需要 2 个参数,但您只传入一个参数。

我认为您误解了参数传递的工作方式。

jamCheck(p1, p2){}你给这些命名的无关紧要。这些标签仅存在于您的方法中。我怀疑让您感到困惑的是,您对传入的变量以及方法中的变量使用相同的标签。 因此,当您调用方法jamCheck(roll1(时,它无法执行所需的操作,因为它被设计为处理2个变量。 除此之外,无论你得到什么结果,都只是浏览器试图弥补语法被破坏的代码。 在 C 或 Java 等语言中,您甚至无法编译此类代码;编译器会指出这些行没有任何意义。

所以,解决方案是(类似(...

var roll1,roll2;
roll1 = diceRoll1();
roll2 = diceRoll2();
jamCheck(roll1,roll2);
killCheck(roll1,roll2);

但是在你的diceRoll方法中,你需要做的最后一件事就是return roll1;(或分别是roll2(

看看 kirean 的答案,了解如何将这一切包装在一个 init 方法中,这样你就不会从正文的 onload 回调调用 4 个(或更多(方法。

你在这里做错了几件事,首先是将函数范围的变量与全局范围的变量混淆了。

此函数

function jamCheck(roll1,roll2){
    if (roll1 == roll2)
    {
    document.getElementById('jam').innerHTML = 'GUN JAMMED';
    }
    return;
} 

需要两个参数,但您在此处没有传入任何参数body onload="...jamcheck()"

因此,未定义

等于未定义,所以它当然是正确的。

你需要一个类似于这样的包装函数

function executeGame(){
   var dice1 = rollDice1();
   var dice2 = rollDice2();
   jamCheck(dice1, dice2)
}

然后在身体加载时调用此函数。