【JAVA面向对象练习】用户与电脑猜拳游戏

一、需求

        1、用户可自定义游戏的局数

        2、用户每局可以输入石头(0),剪刀(1),布(2)

        3、电脑随机从石头(0),剪刀(1),布(2)中选择一个

        4、每局比赛都可以自动判断输赢,并在游戏结束后打印出对局清单

二、分析

        1、用户输入的局数可以用作for循环的结束条件,用于控制每局比赛

        2、判断输赢等操作在自定义类中实现,主函数用于控制输出

        3、电脑随机选择0、1、2三个数字用的是Random函数,用于随机选择0~2之间的一个数

Random r = new Random();
a = r.nextInt(3);

nextInt(3)中的3表示的从0(包括0)开始到3结束(不包括3),从中随机选择一个整数

        4、每局比赛的局数、用户的输入、电脑的输入我选择用一个整数类型的二维数组存储,每局比赛的结果选择一个字符串类型的一维数组存储

        5、部分思路来源于B站韩顺平老师的java课

三、实现

public class Homework12 {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		//提示用户输入需要游玩的次数
		System.out.println("请输入你想游玩几次");
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		//记录玩家赢的次数
		int winMora = 0;
		//定义用户出拳变量
		int userMora;
		//用一个int二维数组来存储局数以及用户和电脑每次的出拳
		int mora[][] = new int[n][4];
		//用一个String一维数组存储每局的结果
		 String result[] = new String[n];
		//创建一个t1对象
		Tom t1 = new Tom();
		//循环控制
		Scanner sc1 = new Scanner(System.in);
		for(int i = 0; i < n; i++) {
			 //提示用户输入信息
			 System.out.println("请输入你要出什么0-石头,1-剪刀,2-布");
			 userMora = sc1.nextInt();
			 t1.userIn(userMora, t1.ComputerMora(), n);
			 //输出一次出拳清单	
			 System.out.println("==================================================================");
			 System.out.println("你出拳\t\t电脑出拳\t\t结果");
			 System.out.println( userMora + "\t\t" + t1.computerMora + "\t\t" + t1.resultMora()); 
			 System.out.println("==================================================================");
			 if(t1.resultMora() == "你赢了") {
				winMora++; 
			 } 
			 mora[i][0] = i;
			 mora[i][1] = userMora;
			 mora[i][2] = t1.computerMora;
			 result[i] = t1.resultMora();	
		} 
		//打印输赢清单
		System.out.println("\t\t\t对局记录");
		System.out.println("------------------------------------------------------------------");
		System.out.println("局数\t\t你出拳\t\t电脑出拳\t\t结果");
		for(int i = 0; i < n; i++) {
			 System.out.println("第" + (mora[i][0]+1) +"局" + "\t\t" + mora[i][1] + "\t\t" + mora[i][2] + "\t\t" + result[i]);
		 }
		System.out.println("------------------------------------------------------------------");
		System.out.println("你一共赢了" + winMora + "局");
		sc.close();
		sc1.close();
		}

}

class Tom {
//	定义用户出拳和电脑出拳和游玩次数
	int userMora;
	int computerMora;
	int n;
//	定义一个方法用来返回电脑随机返回的数
	public int ComputerMora() {
		Random r = new Random();
		computerMora = r.nextInt(3);
		return computerMora;
	}
//	定义一个方法接收出拳
	public void userIn(int userMora, int computerMora, int n) {
		this.userMora = userMora;
//		当用户输入错误时抛出一个异常(不理解)--终止游戏
		 if(userMora >= 3 || userMora < 0) {
			 throw new IllegalArgumentException("你的输入有误");
		 }
		this.computerMora = computerMora;
		this.n = n;
	}
//	定义一个方法比较猜拳结果
	public String resultMora() {
		if(userMora == 0 && computerMora == 1) {
			return "你赢了";
		} 
		else if(userMora == 1 && computerMora == 2) {
			return "你赢了";
		}
		else if (userMora == 2 && computerMora == 0) {
			return "你赢了";
		}
		else if(userMora == computerMora) {
			return "平手";
		}
		else
			return "你输了";
	}
}

四、运行结果

 五、总结

        通过本次的练习,复习了之前面向对象的部分内容,使自己对于此部分的知识更熟练了,并且提高了自己的编程思想,并且学习到了Random函数,收货颇丰。

        另外也认识到了自己的短板,编程思想、编程速度还有待提高,部分知识掌握不牢固,还需努力!

        我写的这个肯定不是很好的,欢饮大佬们发布指导意见!!

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

决心学java的星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值