我正在尝试让石头剪刀布成为计算机与人类玩家的比赛。我有函数 computerplay();
从三个可能的字符串(“Rock”、“Paper”、“Scissors”)中生成随机值作为游戏匹配值的计算机选择。使用第三个函数 save();
我允许玩家将他的选择输入到 HTML 表单中并尝试将其保存到 round();功能。
作为结果,我想得到变量 c 或 p 递增或打印字符串“draw”作为 round();
获取存储在 x 中的计算机选择和变量玩家的玩家选择的指示。似乎 x 和 player 都附加了它们的值,但 round();
函数没有接收到它。感谢您帮助解决。
function computerPlay() {
const number = Math.floor(Math.random() * 1000);
if (number % 3 === 0) {
return 'Rock';
}
if (number % 3 === 1) {
return 'Paper';
}
return 'Scissors';
}
var p = 0;
var c = 0;
var x = computerPlay();
var player;
player = document.getElementById("player").value;
document.write(x);
function round ( playerSelection = player, computerSelection = x ) {
document.write(player);
document.write(x);
if (playerSelection == 'Rock' && computerSelection == 'Rock') {
document.write (p);
document.write (c);
document.write("draw");
}
else if (playerSelection == 'Rock' && computerSelection == 'Paper') {
c++;
document.write (p);
document.write (c);
document.write("comp");
}
else if (playerSelection == 'Rock' && computerSelection == 'Scissors') {
p++;
document.write (p);
document.write (c);
document.write("player");
}
else if (playerSelection == 'Scissors' && computerSelection == 'Rock') {
c++;
document.write (p);
document.write (c);
document.write("comp");
}
else if (playerSelection == 'Scissors' && computerSelection == 'Paper') {
p++;
document.write (p);
document.write (c);
document.write("player");
}
else if (playerSelection == 'Scissors' && computerSelection == 'Scissors') {
document.write (p);
document.write (c);
document.write("draw");
}
else if (playerSelection == 'Paper' && computerSelection == 'Rock') {
p++;
document.write (p);
document.write (c);
document.write("player");
}
else if (playerSelection == 'Paper' && computerSelection == 'Scissors') {
c++;
document.write (p);
document.write (c);
document.write("computer");
}
else if (playerSelection == 'Paper' && computerSelection == 'Paper') {
document.write (p);
document.write (c);
document.write("draw");
}
}
function save() {
var player;
player = document.getElementById("player").value;
document.write (player);
document.write(x);
computerPlay();
var x = computerPlay();
round();
}
document.write (p);
document.write (c);
if ( c == 5 ) {
document.write (c);
document.write ('computer win');
}
else if ( p == 5 ) {
document.write ('player win');
}
<p id="demo"></p>
<form id="form">
<input id="player" type="text" min="1" name="player">
<button type="button" onclick="save();">Get Value</button>
</form>
答案 0 :(得分:0)
在您的脚本中,您使用了两个都称为 player
的变量,这里有一个:
var x = computerPlay();
var player;
player = document.getElementById("player").value;
这里有一个:
function save() {
var player;
player = document.getElementById("player").value;
第一个变量在脚本主体中声明,这意味着它具有“全局作用域”。相反,您在 save()
中定义的函数具有“函数作用域”(这意味着该函数体之外的任何人都看不到它)。
由于您不带参数调用 round()
,它将使用默认值初始化它们,并从发生函数声明的作用域(在本例中为全局作用域)中获取这些值。由于全局 player
最初是空的并且您永远不会更改该变量,因此 round 将始终将其第一个参数作为空字符串。
有多种方法可以“解决”这个问题:
直接在round()
内部获取变量:
function round(/* ... */) {
player = document.get...
其实就是把参数传给函数:
round(player);
更新 player 变量的值而不是创建一个新变量:
var player;
function save() {
player = document.get...
round();
}
有关 JavaScript 范围规则的更多信息,请阅读 here