1、初始化挑战者名字,石子数量n以及每次能拿走的石子数量上限m
2、轮到人拿石子,如果拿走后,没有剩余石子,则电脑获胜,若有剩余石子,则轮到电脑。
3、这一步是该程序的核心,也就是确保电脑获胜的ai算法,如果n % (m + 1) =1,则随机取,等待人犯错,直到剩余石子数remain % (n+1) 不为1为止,如果此时remain % (n+1) = 0则电脑取m个石子,即不为0也不为1则取remain % (n + 1) - 1个石子
4、从运行结果来分析可以得出,只有人没有按必胜测路犯一次错误,则电脑就必胜了。
5、最后输入N便可结束游戏,否则继续游戏。
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; } } }}