Javascript 如何在不输入完整比较的情况下添加无限变化的岩石纸剪刀
我想在玩石头纸剪刀游戏时添加无限多的选项供选择(steen,papier,schaar==石头,纸,剪刀)。我研究了Stackoverflow并找到了一些解决方案,但我不知道如何在自己的代码中实现它 以下是解决方案的链接,但没有在我自己的代码中实现:Javascript 如何在不输入完整比较的情况下添加无限变化的岩石纸剪刀,javascript,Javascript,我想在玩石头纸剪刀游戏时添加无限多的选项供选择(steen,papier,schaar==石头,纸,剪刀)。我研究了Stackoverflow并找到了一些解决方案,但我不知道如何在自己的代码中实现它 以下是解决方案的链接,但没有在我自己的代码中实现: 让userScore=0; 让计算机得分=0; 让userScore_span=document.getElementById(“用户分数”); 让computerScore_span=document.getElementById(“计算机分数
让userScore=0;
让计算机得分=0;
让userScore_span=document.getElementById(“用户分数”);
让computerScore_span=document.getElementById(“计算机分数”);
让scoreMessage=document.getElementById(“score消息”);
const schaar_div=document.getElementById(“schaar”);
const steen_div=document.getElementById(“steen”);
const papier_div=document.getElementById(“papier”);
//计算机选择
函数getRandomChoise(){
const choises=[“schaar”、“steen”、“papier”];
const randomNumber=Math.floor(Math.random()*choises.length);
返回选项[随机数];
}
函数win(){
userScore++;
userScore_span.innerHTML=userScore;
scoreMessage.innerHTML=“你赢了!”;
}
函数丢失(){
计算机评分++;
computerScore_span.innerHTML=computerScore;
scoreMessage.innerHTML=“您输了!”
}
函数绘图(){
scoreMessage.innerHTML=“这是一场平局!”
}
功能游戏(用户选择){
const computerChoise=getRandomChoise();
如果(用户选择+计算机选择==“steenschaar”){
赢();
}否则如果(用户选择+计算机选择==“papiersteen”){
赢();
}否则如果(用户选择+计算机选择==“schaarpapier”){
赢();
}否则如果(用户选择+计算机选择==“steenpapier”){
失去();
}else if(用户选择+计算机选择===“papierschaar”){
失去();
}else if(用户选择+计算机选择==“schaarsteen”){
失去();
}else if(用户选择+计算机选择==“schaarschaar”){
draw();
}否则如果(用户选择+计算机选择==“steensteen”){
draw();
}否则,如果(用户选择+计算机选择==“纸笔”){
draw();
}
}
函数main(){
schaar_div.addEventListener(“单击”,函数)(){
游戏(“沙尔”);
})
steen_div.addEventListener(“单击”,函数)(){
游戏(“steen”);
})
papier_div.addEventListener(“单击”,函数)(){
游戏(“纸制”);
})
}
main();
我希望能够在游戏中添加无限多的选项(lizzard、spock等),而无需反复编写else-if声明。您可以将两个可能选项之间的关系表示为一棵树:
const winsOver = {
schaar: ["papier"],
steen: ["schaar"],
papier: ["steen"],
};
现在,您的比较变得非常简单:
if(userChoice === computerChoice) {
draw();
} else if(winsOver[userChoice].includes(computerChoice)) {
win();
} else lose();
您可以将两个可能选项之间的关系表示为一棵树:
const winsOver = {
schaar: ["papier"],
steen: ["schaar"],
papier: ["steen"],
};
现在,您的比较变得非常简单:
if(userChoice === computerChoice) {
draw();
} else if(winsOver[userChoice].includes(computerChoice)) {
win();
} else lose();
你链接的这篇文章为你提供了一种合乎逻辑的石头剪纸方法: n>=3和n奇数的推广: 设d=(n+a-b)%n。然后: 如果d=0=>平局 如果d%2=1=>a获胜 如果d%2=0=>b获胜 您可以这样实现:
//将名称转换为数字
常量选项={
摇滚乐:0,
论文:1,,
剪刀:2把
}
//物体长度
常量长度=Object.keys(options).length
//用户输入
const user=options[prompt().toLowerCase()]
//为对手随机生成输入
const comp=Math.floor(Math.random()*Math.floor(length));
//调试
控制台日志(用户、公司)
//条件
const win=()=>console.log('win')
const lose=()=>console.log('lose'))
const tie=()=>console.log('tie'))
//计算产量
常数d=(长度+用户-补偿)%length
//d=0->平局
//d%2=1->win
//d%2=0->丢失
Dd%2?win():lose():tie()
您链接的文章为您提供了一种逻辑方法来使用剪刀:
n>=3和n奇数的推广:
设d=(n+a-b)%n。然后:
如果d=0=>平局
如果d%2=1=>a获胜
如果d%2=0=>b获胜
您可以这样实现:
//将名称转换为数字
常量选项={
摇滚乐:0,
论文:1,,
剪刀:2把
}
//物体长度
常量长度=Object.keys(options).length
//用户输入
const user=options[prompt().toLowerCase()]
//为对手随机生成输入
const comp=Math.floor(Math.random()*Math.floor(length));
//调试
控制台日志(用户、公司)
//条件
const win=()=>console.log('win')
const lose=()=>console.log('lose'))
const tie=()=>console.log('tie'))
//计算产量
常数d=(长度+用户-补偿)%length
//d=0->平局
//d%2=1->win
//d%2=0->丢失
Dd%2?赢():输():打领带()
我和乔纳斯·威尔姆斯有同样的想法,但这让我有更多的时间来阐述
const win3={Rock:{e:['Scissors'],m:['Rock crushes Scissors']}
,纸张:{e:['Rock'],m:['Paper cover Rock']}
,剪刀:{e:['布'],m:['剪刀剪布']}
}
const win5={Rock:{e:['剪刀','蜥蜴'],m:['石头压碎剪刀','石头压碎蜥蜴']}
,纸:{e:['岩石','斯波克'],m:['纸封面岩石','纸反驳斯波克']}
,剪刀:{e:['布','蜥蜴'],m:['剪刀剪布','剪刀斩首蜥蜴']}
,蜥蜴:{e:[‘纸’,‘斯波克’],m:[‘蜥蜴吃纸’,‘蜥蜴毒死斯波克’}
,斯波克:{e:['石头','剪刀'],m:['斯波克蒸发石头','斯波克打碎剪刀']}
}
让我们播放=win3//win5。。win1000。。。
,userScore=0
,computerScore=0
;
功能游戏(用户选择、计算机选择)
{
if(userChoice==computerChoice)
{
log('相同的值,没有一个分数')
返回
}
如果(播放[userChoice]。包括(计算机选择))
{
用户分数++
让n=play[userChoice].e.findIndex(e=>e==computerChoice)
console.log(播放[userChoice].m[n])
}
其他的
{
计算机评分++
让我们玩