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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值