当前位置:   article > 正文

Java猜数字小游戏_猜数字小游戏java

猜数字小游戏java

/*游戏规则
1.游戏开始,系统随机生成【不重复】的4位数。
2.玩家输入猜测结果,系统根据猜测结果给出提示,AxBx
    A 表示数字、顺序都对
    B 表示数字对,顺序不对
    随机数字 1234,用户猜测 1435,系统提示 A2B1,1和3数字和顺序都对所以A为2个,4数字对所以B为1
    随机数字 1234,用户猜测 5678,系统提示 A0B0,数字、顺序都不对
    随机数字 1234,用户猜测 4321,系统提示 A0B4,数字都对,顺序都不对
    随机数字 1234,用户猜测 1234,系统提示 A4B0,数字、顺序都对,用户猜中!!!
3.每次游戏可以猜测7次。7次仍没有猜中,游戏结束。
*/

方法一代码部分(全部源码):

  1. package Week_HomeWork;
  2. import java.util.Arrays;
  3. import java.util.Random;
  4. import java.util.Scanner;
  5. public class First {
  6. static Random random = new Random();
  7. public static void main(String[] args) {
  8. System.out.println("------------猜数字小游戏---------------");
  9. // 1.系统随机生成不重复的四位数
  10. Scanner scanner = new Scanner(System.in);
  11. int flag = 0;
  12. while (true){
  13. System.out.println("请输入随机位数数字:");
  14. int number = scanner.nextInt();
  15. int readerNumber = number(4);
  16. flag++;
  17. System.out.println(readerNumber);
  18. strNumber(number, readerNumber);
  19. // flag开关思想
  20. if(flag==7){
  21. System.out.println("七次内没有猜中,游戏结束");
  22. break;
  23. }
  24. }
  25. }
  26. // 判断A和B的活动数字
  27. public static void strNumber(int number, int readerNumber) {
  28. int[] nuberToarr = numberToArray(number);
  29. // System.out.println(Arrays.toString(nuberToarr));
  30. int[] nuberToarr2 = numberToArray(readerNumber);
  31. int a = 0, b = 0;
  32. for (int i = 0; i < nuberToarr.length; i++) {
  33. for (int j = 0; j < nuberToarr2.length; j++) {
  34. if (i == j && nuberToarr[i] == nuberToarr2[j]) {
  35. a++;
  36. } else if (nuberToarr[i] == nuberToarr2[j] && i != j) {
  37. b++;
  38. }
  39. }
  40. }
  41. System.out.println( "系统提示A" + a + "B" + b);
  42. }
  43. // 数字转数组
  44. public static int[] numberToArray(int num) {
  45. int length = String.valueOf(num).length();
  46. int[] arr = new int[length];
  47. for (int i = length - 1; i >= 0; i--) {
  48. arr[i] = num % 10;
  49. num /= 10;
  50. }
  51. return arr;
  52. }
  53. // 生成随机数
  54. public static int number(int len) {
  55. int[] arr = new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9};
  56. int last = arr.length - 1;
  57. int res = 0;
  58. for (int i = 0; i < len; i++) {
  59. int index = random.nextInt(last + 1);
  60. int temp = arr[last];
  61. arr[last] = arr[index];
  62. arr[index] = temp;
  63. res = res * 10 + arr[last];
  64. last--;
  65. }
  66. return res;
  67. }
  68. }

运行结果:

方法二代码部分(全部源码):

  1. package Week_HomeWork;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;
  5. import java.util.Scanner;
  6. public class CaiShuzi_game {
  7. public static void main(String[] args) {
  8. // 创建一个Random对象rand,用于生成随机数。
  9. Random rand = new Random();
  10. // 创建一个ArrayList对象randomNumberList,用于存储系统生成的随机数字。
  11. List<Integer> randomNumberList = new ArrayList<>();
  12. // 创建一个Scanner对象scanner,用于接收玩家的输入。
  13. Scanner scanner = new Scanner(System.in);
  14. // 调用generateRandomNumber方法,生成4位不重复的随机数,并将其存储在randomNumberList中。
  15. generateRandomNumber(randomNumberList, rand);
  16. // 向控制台输出游戏开始的提示信息。
  17. System.out.println("猜数字游戏开始了!系统已经生成了一个不重复的4位数。");
  18. // 用于记录猜测的次数,初始化为0。
  19. int attempts = 0;
  20. // 循环进行猜测,当猜测次数小于7时执行。
  21. while (attempts < 7) {
  22. // 提示玩家输入猜测的4位数,将输入的数存储在变量guess中,并将猜测次数加1。
  23. System.out.print("请输入你猜测的4位数:");
  24. int guess = scanner.nextInt();
  25. attempts++;
  26. // 将玩家猜测的数转换为List对象guessList,方便后续比较数字。
  27. List<Integer> guessList = convertToList(guess);
  28. // 用于记录A和B的数量,初始化为0。
  29. int aCount = 0;
  30. int bCount = 0;
  31. // 遍历玩家猜测的数字和系统生成的随机数字,并根据数字相等的情况分别增加aCount和bCount的数量。
  32. for (int i = 0; i < 4; i++) {
  33. int guessDigit = guessList.get(i);
  34. if (guessDigit == randomNumberList.get(i)) {
  35. aCount++;
  36. } else if (randomNumberList.contains(guessDigit)) {
  37. bCount++;
  38. }
  39. }
  40. // 如果aCount等于4,表示全部数字和顺序都猜对,输出猜对的提示信息;否则,输出提示信息,继续下一次猜测。
  41. if (aCount == 4) {
  42. System.out.println("恭喜你,猜对了!系统生成的数字是 " + convertToString(randomNumberList) +
  43. ",你用了 " + attempts + " 次尝试。");
  44. break;
  45. } else {
  46. System.out.println("提示:A" + aCount + "B" + bCount);
  47. }
  48. }
  49. // 如果玩家在7次内没有猜中,输出游戏结束的提示信息。
  50. if (attempts == 7) {
  51. System.out.println("很遗憾,你没有在规定次数内猜对。系统生成的数字是 " + convertToString(randomNumberList) + "。");
  52. }
  53. // 关闭Scanner对象,释放资源。
  54. scanner.close();
  55. }
  56. // 定义了一个名为generateRandomNumber的私有静态方法,用于生成不重复的随机数。
  57. private static void generateRandomNumber(List<Integer> numberList, Random rand) {
  58. // 使用while循环,当numberList的大小小于4时执行循环体。
  59. // 在循环体中,生成一个0到9的随机数digit,并检查numberList中是否已经包含该数字。
  60. // 如果未包含,则将该数字添加到numberList中。
  61. while (numberList.size() < 4) {
  62. int digit = rand.nextInt(10);
  63. if (!numberList.contains(digit)) {
  64. numberList.add(digit);
  65. }
  66. }
  67. }
  68. // 定义了一个名为convertToList的私有静态方法,用于将数字转换为List对象。
  69. private static List<Integer> convertToList(int number) {
  70. // 创建一个ArrayList对象digitList,用于存储数字的每一位。
  71. List<Integer> digitList = new ArrayList<>();
  72. // 使用while循环,当number大于0时执行循环体。
  73. while (number > 0) {
  74. // 在循环体中,取number除以10的余数digit
  75. int digit = number % 10;
  76. // 将digit添加到digitList的最前面
  77. digitList.add(0, digit);
  78. // 再将number除以10取整
  79. number /= 10;
  80. }
  81. return digitList;
  82. }
  83. // 定义了一个名为convertToString的私有静态方法,用于将List对象转换为字符串。
  84. private static String convertToString(List<Integer> numberList) {
  85. // 使用StringBuilder对象sb,遍历numberList中的每个数字,并将其逐个添加到sb中
  86. StringBuilder sb = new StringBuilder();
  87. for (int digit : numberList) {
  88. sb.append(digit);
  89. }
  90. // 最后,将sb转换为字符串并返回。
  91. return sb.toString();
  92. }
  93. }

运行结果:

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号