猜拳游戏
-
规则
电脑每次都会随机生成0,1,2,分别表示石头,剪刀,布,规定玩三次; -
思路
-
先创建一个Tom类,里面的属性有玩家,电脑出拳的类型,玩家赢的次数和比赛的次数;
-
成员方法有电脑随机猜拳的方法,设置玩家猜拳的方法,比较猜拳的结果,赢得次数的方法;
-
在main类中创建出对象,和一个二维数组,用来接收局数,Tom出拳情况以及电脑出拳情况及一个一维数组,用来接收输赢情况;
-
设置for循环,三次后退出,下面大部分程序都在循环中,进行循环赋值;
-
创建输入函数,设置变量来接收输入的值,将此变量当作玩家出拳的set方法的参数后,设置新变量利用get方法接收这次玩家出拳的值,再将新变量赋值给二维数组的第二列,j要提前设为0;
-
再直接设置变量接收电脑随机出拳的值,并将变量赋值给二维数组的第三列;
-
创建变量接收对象调用的pk方法,再将输赢结果赋值一维数组,再将对象调用的局数常量赋给二维数组的第一列;
-
对每一局进行输出,调用变量输出即可,输出完一轮后,创建变量接收赢得次数的方法,实参时统计输赢结果的变量;
-
for循环结束后,里面数组循环遍历对最终结果进行输出;
- 代码
点击查看代码
import java.util.Random;
import java.util.Scanner;
/*
请编写一个猜拳的游戏
有个人 Tom,设计他的成员变量. 成员方法, 可以电脑猜拳. 电脑每次都会随机生成 0, 1, 2
0 表示 石头 1 表示剪刀 2 表示 布
并要可以显示 Tom的输赢次数(清单), 假定 玩三次.
*/
// 测试类,主类
public class MoraGame {
public static void main(String[] args) {
int isWinCount = 0; //最后输赢的次数
int arr1[][] = new int[3][3];
String arr2[] = new String[3];
int j = 0;
Tom t = new Tom();
for (int i = 0; i < 3; i++) {
System.out.println("请输入你要出的拳(0-拳头,1-剪刀,2-布):");
Scanner in = new Scanner(System.in);
int num = in.nextInt();
t.setTomGuess(num);
int tomGuess = t.getTomGuess(); //获取玩的出的拳类型
//int tomGuess=num;
arr1[i][j+1]=tomGuess;
int comGuess=t.comGuessNum();//获取电脑出的拳类型
arr1[i][j+2]=comGuess;
arr1[i][j]=t.count;
String isWin=t.vscomputer(); //接收每局输赢的情况
arr2[i]=isWin;
//对每一局情况进行输出
System.out.println("============================");
System.out.println("局数\t玩家的出拳\t电脑出拳\t输赢情况");
System.out.println(t.count+"\t\t\t\t"+tomGuess+"\t\t\t\t"+comGuess+"\t\t\t"+isWin);
System.out.println("============================");
System.out.println();
isWinCount=t.winCount(isWin); //接收最终输赢的情况
}
//输出最终的情况
System.out.println("局数\t玩家的出拳\t电脑出拳\t\t输赢情况");
for(int a=0;a<arr1.length;a++){
for(int b=0;b<arr1[a].length;b++){
System.out.print(arr1[a][b]+"\t\t\t\t");
}
System.out.print(arr2[a]);
System.out.println();
}
System.out.println("你赢了"+isWinCount+"次");
}
}
class Tom{
private int tomGuessNum; //玩家出拳情况
private int comGuessNum;
int winCountNum;
int count=1;
public int getTomGuess() {
return tomGuessNum;
}
//玩家出拳情况获取
public void setTomGuess(int tomGuess) {
this.tomGuessNum = tomGuess;
}
public int comGuessNum(){
Random r=new Random();
comGuessNum=r.nextInt(3);
return comGuessNum;
}//电脑出拳获取
public String vscomputer(){
if(tomGuessNum==0&&comGuessNum==1){
return "你赢了";
}else if(tomGuessNum==1&&comGuessNum==2){
return "你赢了";
}else if(tomGuessNum==2&&comGuessNum==0){
return "你赢了";
}else if(tomGuessNum==comGuessNum){
return "平手";
}else{
return "你输了";
}
}
public int winCount(String s) {
count++; //控制玩的次数
if (s.equals("你赢了")) { //统计赢的次数
winCountNum++;
}
return winCountNum;
}//返回赢得次数
}
- 心得
-
如果不考虑封装性的话,可以直接创建创建变量来接收输入的值当作玩家出拳的类型
-
再输出完一轮后,再接收赢得次数,是因为方法中有局数增加的代码,所有需要循环完一轮再增加局数,以便于接收;
-
赢得次数方法中用到了equals方法,判断参数和"你赢了"是否相等,相同就增加赢得次数;
-
在pk方法中只判断赢得情况和平手情况,其他else都是输的情况;
-
想要控制玩的次数,只需要改变循环次数,二维数组的排数(第一个参数),一维数组的值即可;
参考:https://www.bilibili.com/video/BV1fh411y7R8?p=262&vd_source=f937f0092d385a7b990a2f3311d7d6ef
标签:java,猜拳,int,System,游戏,接收,变量,出拳 From: https://www.cnblogs.com/xljy/p/16599536.html