java-猜拳游戏

猜拳游戏

  1. 规则
    电脑每次都会随机生成0,1,2,分别表示石头,剪刀,布,规定玩三次;

  2. 思路

  • 先创建一个Tom类,里面的属性有玩家,电脑出拳的类型,玩家赢的次数和比赛的次数;

  • 成员方法有电脑随机猜拳的方法,设置玩家猜拳的方法,比较猜拳的结果,赢得次数的方法;

  • 在main类中创建出对象,和一个二维数组,用来接收局数,Tom出拳情况以及电脑出拳情况及一个一维数组,用来接收输赢情况;

  • 设置for循环,三次后退出,下面大部分程序都在循环中,进行循环赋值;

  • 创建输入函数,设置变量来接收输入的值,将此变量当作玩家出拳的set方法的参数后,设置新变量利用get方法接收这次玩家出拳的值,再将新变量赋值给二维数组的第二列,j要提前设为0;

  • 再直接设置变量接收电脑随机出拳的值,并将变量赋值给二维数组的第三列;

  • 创建变量接收对象调用的pk方法,再将输赢结果赋值一维数组,再将对象调用的局数常量赋给二维数组的第一列;

  • 对每一局进行输出,调用变量输出即可,输出完一轮后,创建变量接收赢得次数的方法,实参时统计输赢结果的变量;

  • for循环结束后,里面数组循环遍历对最终结果进行输出;

  1. 代码
点击查看代码
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;
    }//返回赢得次数

}
                                                                                                      
  1. 心得
  • 如果不考虑封装性的话,可以直接创建创建变量来接收输入的值当作玩家出拳的类型

  • 再输出完一轮后,再接收赢得次数,是因为方法中有局数增加的代码,所有需要循环完一轮再增加局数,以便于接收;

  • 赢得次数方法中用到了equals方法,判断参数和"你赢了"是否相等,相同就增加赢得次数;

  • 在pk方法中只判断赢得情况和平手情况,其他else都是输的情况;

  • 想要控制玩的次数,只需要改变循环次数,二维数组的排数(第一个参数),一维数组的值即可;

参考:https://www.bilibili.com/video/BV1fh411y7R8?p=262&vd_source=f937f0092d385a7b990a2f3311d7d6ef

posted @ 2022-08-18 17:34  hhxxlrkq  阅读(160)  评论(0)    收藏  举报