一、需求
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函数,收货颇丰。
另外也认识到了自己的短板,编程思想、编程速度还有待提高,部分知识掌握不牢固,还需努力!
我写的这个肯定不是很好的,欢饮大佬们发布指导意见!!