java基础练习----21点(游戏)
先介绍一下游戏的功能:先发给用户一个0-9的随机数字作为起始值,接着让用户进行选择菜单:1.继续取随机数字 2.重头开始3.退出游戏
1.(1.继续给用户随机一个0-9的数字,并与初始值相加得到一个和,若和小于21,则显示菜单:1.继续取随机数字 2.重头开始3.退出游戏
若和等于21,则显示:恭喜你完成比赛 1.再来一把2.退出游戏
若和大于21,则显示当前的点数,并告知游戏失败,显示可选择的菜单:1.重头再来 2.退出游戏)
2.选择重头开始则重新给用户随机一个初始值,并显示菜单:1.继续取随机数字 2.重头开始3.退出游戏
3.退出游戏:输入3之后退出游戏
我在这里建了两个类,一个类存储方法(Test4),一个类写主方法(Test3)
Test4:
import java.util.Scanner;public class Test4 {//(先发给用户一个数字(数字随机))//随机数字只能是1-9的数字public static int createRandom() {int a = (int) (Math.random() * 9 + 1);System.out.println("你的初始点为:");System.out.println(a);return a;}//进行菜单:1.继续要数字 2.重头再来 3.退出游戏public static int printMenu() {Scanner sc = new Scanner(System.in);System.out.println("请输入你的选择:");System.out.println("1.继续要数字\n2.重头再来\n3.退出游戏");return sc.nextInt();}//继续要数字public static int oneMoreNum(int a) {Scanner sc = new Scanner(System.in);int num = (int) (Math.random() * 9 + 1);return num + a;}//如果大于21点,输出“游戏失败”,并输出菜单:1.重头再来 2.退出游戏public static int out(int a) {Scanner sc = new Scanner(System.in);System.out.println("游戏失败,当前点数为:" + a);System.out.println("请输入你的选择:\n1.重头再来\n2.退出游戏");return sc.nextInt();}public static int win(int a) {//如果等于21点,输出“恭喜你,完成比赛”并输出菜单:1.再来一把 2.退出游戏Scanner sc = new Scanner(System.in);System.out.println("恭喜你,完成比赛,当前点数为:21");System.out.println("请输入你的选择:\n1.再来一把\n2.退出游戏");return sc.nextInt();}public static int goOn(int a) {//如果小于21点,则游戏没有结束,则输出当前点数,并重新提示菜单://1.继续要数字 2.重头再来 3.退出游戏Scanner sc = new Scanner(System.in);System.out.println("当前点数为:" + a);// printMenu();System.out.println("请输入你的选择:\n1.继续要数字\n2.重头再来\n3.退出游戏");int choice = sc.nextInt();return choice;}
}
Test3:
public class Test3 {public static void main(String[] args) {boolean flag = false;while (true) {int num = Test4.createRandom();int input = Test4.printMenu();
// 输入1时进行如下操作if (input == 1) {while (true) {num = Test4.oneMoreNum(num); // 再随机一个数,并和之前的数相加if (num < 21) { // 如果和小于21int choice = Test4.goOn(num);if (choice == 1) { // 1.继续要数字 2.重头再来 3.退出游戏continue;} else if (choice == 2) {break;} else if (choice == 3) {flag = true;break;}} else if (num == 21) { // 如果和等于21int choice = Test4.win(num);//1.再来一把 2.退出游戏if (choice == 1) {break;} else {flag = true;break;}} else if (num > 21) { // 如果和大于21int choice = Test4.out(num);//1.重头再来 2.退出游戏if (choice == 1) {break;} else {flag = true;break;}}}
// 输入2时重头再来} else if (input == 2) {continue;
// 输入3时退出系统} else if (input == 3) {return;} else {System.out.println("输入有误");}if (flag) {break;}}}
}
在做的时候初学者可能会遇到以下几个问题:
1、当用户获得一个随机数后选择了继续要数字,后续再选择1、2、3等操作的时候,一种思路是将用户的选择return,再在主方法中调用相应的方法;一种是直接一种方法写完。这里第一种思路写起来会比较清晰,第二种容易造成代码逻辑不清晰。
2、根据题意很明显这里要使用一个while(true)死循环,当用户先选择了1(再次获取一个随机数)之后,若是再想选择1,这时候怎么办呢?再写一次?我认为这里再写一个while死循环比较好,如果你有其他比较好的思路欢迎留言。
3.当用户先选择了1(再次获取一个随机数)之后,若是再想选择退出游戏或者重来一局的时候,这时候该用return?break?还是congtinue? 很明显,两个while循环选择重来的时候使用break即可,因为后面没有可执行的代码,会进行下一次循环。选择退出游戏的时候使用break就就不能退出了,只能跳出当前循环,具体怎么实现也很简单,实现方法见代码,hhh
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
