我正在使用ReactJS制作Rock-Paper-Scissors-Lizard-Spock(大爆炸理论,电视节目),我正面临某种抽象问题 .
switch (this.state.playerOnePick === 'Rock') {
case((this.state.playerTwoPick === 'Scissors') || (this.state.playerTwoPick === 'Lizard')):
return (
<div>
<h1>Player One wins !</h1>
<h2>P1: {this.state.playerOnePick} P2: {this.state.playerTwoPick}</h2>
</div>
);
break;
case((this.state.playerTwoPick === 'Paper') || (this.state.playerTwoPick === 'Spock')):
return (
<div>
<h1>Player Two wins !</h1>
<h2>P1: {this.state.playerOnePick}
P2: {this.state.playerTwoPick}</h2>
</div>
);
break;
}
switch (this.state.playerOnePick === 'Lizard') {
case((this.state.playerTwoPick === 'Spock') || (this.state.playerTwoPick === 'Paper')):
return (
<div>
<h1>Player One wins !</h1>
<h2>P1: {this.state.playerOnePick} P2: {this.state.playerTwoPick}</h2>
</div>
);
break;
case((this.state.playerTwoPick === 'Scissors') || (this.state.playerTwoPick === 'Rock')):
return (
<div>
<h1>Player Two wins !</h1>
<h2>P1: {this.state.playerOnePick} P2: {this.state.playerTwoPick}</h2>
</div>
);
break;
}
摇滚vs纸正在返回正确的结果,无论是谁选择它,当P1:摇滚,P2:蜥蜴,P1如预期般胜利,但当P1:蜥蜴P2:摇滚时,它返回P1赢了..
What it returns me when P1:Lizard P2:Rock
蜥蜴应该在哪里赢得对抗摇滚......
(playerOnePick和playerTwoPick在玩家选择武器时正确更新)
3 回答
switch
语句的正确用法是你所展示的是
if
/else
的布局,有很多布尔条件:然而,实施Rock-Paper-Scissors-Lizard-Spock的真正问题就是重复(这给错误留下了很大空间) . 实际的编程任务是弄清楚如何减少它 .
提示:为每个可能的选择分配一个整数,并使用一些数学 .
写一个单独的函数
winner(pick1, pick2)
,在第一个玩家获胜时返回-1
,在领带时返回0
,在第二个玩家获胜时返回1
. 然后简单地从与UI内容有关的ReactJS代码中调用它 .开关盒不起作用 . 如果你想使用switch case,你可以这样做:
等等
编辑:您编写的代码是为if语句构造的,如果用if替换switch和case,它将起作用 .
因为你已经这样设定了它 . 看最后
<h1>
.说,你可以写一个更好的
switch/case
语句来评估这个条件 . 你高度重复自己,这是反对DRY(不要重复自己)的校长 .您可以将
<h2>P1: {this.state.playerOnePick} P2: {this.state.playerTwoPick}</h2>
完全拉出switch
块并在开关关闭后立即放置}
. 或者你最好每个案例只放一个单一的值,而不是在一个案例中合并它们 . 这使得遵循代码变得更加困难 . 这是我对这个特殊开关盒的选择: