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) { // 如果和小于21
int 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) { // 如果和等于21
int choice=Test4.win(num);//1.再来一把 2.退出游戏
if(choice==1) {
break;
}else {
flag=true;
break;
}
} else if (num > 21) { // 如果和大于21
int 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

猜你喜欢

转载自blog.csdn.net/hlp4207/article/details/78308193
今日推荐