java编写Nim游戏AI算法

2025-11-06 20:29:45

1、初始化挑战者名字,石子数量n以及每次能拿走的石子数量上限m

java编写Nim游戏AI算法

2、轮到人拿石子,如果拿走后,没有剩余石子,则电脑获胜,若有剩余石子,则轮到电脑。

java编写Nim游戏AI算法

3、这一步是该程序的核心,也就是确保电脑获胜的ai算法,如果n % (m + 1) =1,则随机取,等待人犯错,直到剩余石子数remain % (n+1) 不为1为止,如果此时 remain % (n+1) = 0则电脑取m个石子,即不为0也不为1则取remain % (n + 1) - 1个石子

java编写Nim游戏AI算法

4、从运行结果来分析可以得出,只有人没有按必胜测路犯一次错误,则电脑就必胜了。

java编写Nim游戏AI算法

java编写Nim游戏AI算法

5、最后输入N便可结束游戏,否则继续游戏。

java编写Nim游戏AI算法

6、全部代码:

import java.util.Random;

import java.util.Scanner;

public class NimGame {

public static void main(String[] args) {

Scanner scn = new Scanner(System.in);

int stones = 0;

int upperBound = 0;

System.out.print("Please enter your name:");

String name = scn.nextLine();

while (true) {

System.out.print("Please enter upper bound of "

+ "stone removal(m):");

upperBound = scn.nextInt();

scn.nextLine();

System.out.print("Please enter initial number "

+ "of stones:(n)");

stones = scn.nextInt();

scn.nextLine();

while (stones != 0) {

System.out.print(stones + " stones left:");

for (int i = 0; i < stones; i++) {

System.out.print(" *");

}

System.out.println();

System.out.print(name + "'s turn, remove how many?");

int remove = scn.nextInt();

scn.nextLine();

if (stones - remove == 0) {

System.out.println("Game Over");

System.out.println("computer wins!");

System.out.println();

break;

}

stones -= remove;

System.out.print(stones + " stones left:");

for (int i = 0; i < stones; i++) {

System.out.print(" *");

}

System.out.print("computer's turn - remove ");

int computerRemove;

Random random = new Random();

if (stones % (upperBound + 1) == 1) {

if (stones > upperBound)

computerRemove = random.nextInt(upperBound) + 1;

else computerRemove =  random.nextInt(stones) + 1;

} else {

if (stones % (upperBound + 1) == 0)

computerRemove = upperBound;

else computerRemove = stones % (upperBound + 1) - 1;

}

System.out.println(computerRemove);

if (stones - computerRemove == 0) {

System.out.println("Game Over");

System.out.println(name + " wins!");

System.out.println();

break;

}

stones -= computerRemove;

}

System.out.print("Do you want to play again (Y/N):");

String cmd = scn.nextLine();

if ("N".equals(cmd)) {

scn.close();

break;

}

}

}

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢