【发布时间】:2013-11-21 17:25:39
【问题描述】:
我的循环有问题。我认为这个循环在理论上可以正常工作,只是当我尝试堆放它时,它说它需要是静态的。我将其更改为静态,然后随机数的生成器不再起作用,任何建议将不胜感激。
问题 尼姆游戏。这是一个有许多变种的著名游戏。以下变体有一个有趣的获胜策略。两名玩家交替从一堆弹珠中取出。在每一步中,玩家选择要拿多少个弹珠。玩家必须至少拿走一颗但最多一半的弹珠。然后另一个玩家轮到。拿走最后一个弹子的玩家输了。
例如。如果初始堆从 100 开始,那么玩家 1 可以拿走 1 - 50 之间的任何弹珠。让我们假设玩家 1 拿了 20 个弹珠,将堆减少到 80 个弹珠。玩家 2 可以拿走 1 - 40 个弹珠。这种情况一直持续到所有弹珠都消失为止。
编写一个程序,让计算机玩家与人类对手对抗。生成一个 10 到 100 之间的随机整数来表示堆的初始大小。生成一个介于 0 和 1 之间的随机整数来决定是计算机还是人类先轮。生成一个介于 0 和 1 之间的随机整数来决定计算机玩聪明还是玩笨。在愚蠢的模式下,只要有转机,计算机就会简单地从堆中随机取一个合法值(1 到 n/2 之间)。在智能模式下,计算机会取出足够多的弹珠,使堆的大小成为 2 负 1 的幂 - 即 3、7、15、31 或 63。这始终是合法的移动,除非桩目前是一小于二的幂。在这种情况下,计算机会随机进行合法移动(值介于 1 和 n / 2 之间)。
您会注意到,在智能模式下,计算机在先手时无法被击败,除非牌堆大小恰好是 15、31 或 63。当然,先手并知道制胜策略可以战胜计算机。
注意:当您使用的数字是奇数时,您不必担心四舍五入。只需使用整数除法,它将截断(不四舍五入地删除)除法的小数位。
我的代码
import java.util.Random;
import java.util.Scanner;
public class Nim
{ Random generator= new Random();
int turn= generator.nextInt(2);
int pile= generator.nextInt(91) + 10;
int smartDumb= generator.nextInt(2);
Scanner in= new Scanner(System.in);
public static void main(String [] args){
String Comp;
int currentPile= pile;
while (pile>0){
int take=0;
if(smartDumb==1)
Comp="dumb";
else Comp= "smart";
if (turn == 1)
turn = 0;
else
turn = 1;
{
if (turn==0){
System.out.println("Please take some marbles.");
currentPile=pile-in.nextInt();
turn=1;
}
else
if (comp="dumb")
take= generator.nextInt(1,currentPile);
Currentpile= currentPile-take;
if (comp=="smart")
if (currentPile > 64)
currentPile=63;
if (currentPile > 32 && currentPile < 63)
currentPile=31;
if (currentPile > 16 && currentPile < 31)
currentPile=15;
if (currentPile > 8 && currentPile < 15)
currentPile=7;
if (currentPile > 4 && currentPile < 7)
currentPile=3;
if (currentPile == 2)
currentPile = 1;
if (currentPile==1)
currentPile=0;
System.out.println("The game is over!");
break;
}
}
}}
【问题讨论】:
-
“当我试着堆它时说它需要是静态的”你描述你的问题很糟糕。在我看来,问题的主要部分是描述你的游戏。你想要做的是发布你尝试编译时得到的错误(称为堆栈跟踪)
标签: java