gpt4 book ai didi

javascript - 初学者

转载 作者:行者123 更新时间:2023-11-30 08:59:39 26 4
gpt4 key购买 nike

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

我认为最好从事我感兴趣的事情,但事实证明这相当复杂。

我基本上是在尝试(最终)模拟 Space Hulk (Boardgame) 中的一种情况,其中 Genestealer 和星际战士之间有 12 步。在第一步中,任一骰子上的 6 点杀死基因窃取者,然后是 5 或 6 点杀死基因窃取者。如果骰子上的数字相同,枪就会卡壳。

我只是想在这里模仿第一步。我认为问题出在 jamCheck 上。

基本上这个输出总是正确的,即使我把它改成 != 它总是显示枪被卡住。

我想知道是否需要将该变量传递给另一个局部变量,但它适用于 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>

编辑: 在 friend 的大力帮助下,我最终到达了那里;这是当前代码:

...
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 个(或更多)方法。

关于javascript - 初学者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10373849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com