怎么用java实现人机猜拳?

任务概述:

通过控制台方式实现一个人机对战的猜拳游戏,用户通过输入 (1-剪刀 2-石头 3-布),机器随机生成(1-剪刀 2-石头 3-布),胜者积分, n 局以后通过积分的多少判定胜负。

  • 根据任务目标的要求,我们可以得出以下信息
    • 1个测试类
    • 玩家、机器人、游戏场  等3个类(方法用蓝色字体表示,属性用紫色字体表示)
      • 玩家:存储玩家动作的属性(user)玩家的得分(score)对战的局数(num),执行出拳的方法
      • 机器:存储机器动作的属性(first)机器的得分(score)生成随机数的方法
      • 游戏场中的游戏流程:
        • 1.开始预加载的界面
        • 2.比较双方的数据(机器人的随机数以及玩家输入的数据)
        • 3.比较后能进行积分的积累
        • 4.能比较双方积分,并进行结果展示,以及判定输赢
      • 那,,,以上怎么实现呢?
      • 注意:为了方便比较,将(剪刀,石头,布)在代码中用数字(1,2,3)进行表示

 接下来就是我们的代码了(记得实操呀= ̄ω ̄=)

  • 首先是User类
    • 根据目标,可以知道我们需要  有 “用户出拳”  积分
    • 因为要循环录入用户输入的数据  所以用  Scanner 类生成   input 对象
    • 属性:user(承载用户输入的  剪刀石头布)  score(承载用户每轮的得分) num(用户要进行的游戏次数)
    • 方法:setUser录入用户输入的数据
/**
 * 用于获得和存储用户的出拳
 */
public class User {
    private static Scanner input = new Scanner(System.in);
    private int user;//用户出拳
    int score;//用户积分
    int num;//对战局数

    /**
     * 提示语,录入用户出拳数据,并输出用户出拳信息
     * @return
     */
    public int setUser(){
        System.out.println("请输入:1-剪刀,2-石头,3-布");
        user = input.nextInt();
        if (user==1){
            System.out.println("用户:剪刀");
        }else if (user==2){
            System.out.println("用户:石头");
        }else if (user==3){
            System.out.println("用户:布");
        }else System.err.println("输入错误!请按规则输入对应数字!");
        return user;
    }
}
  • 下面是Machine(人机)类
    • 重点:随机数
    • 属性:score(承载每轮猜拳 人机的 得分情况),fist(承载随机数后生成的剪刀,石头,布)
    • 方法:在setId方法中 生成Random(随即类)的random(对象)
public class Machine {
    private static int fist;
    public int score;

    /**
     * 生成随机数
     * @return 机器人出拳的数据
     */
    public int setId(){
         Random random = new Random();
         int r = random.nextInt(3);
         fist = r+1;//获取机器人的随机出拳
         if (fist==1){
             System.out.println("机器人:剪刀");
         }else if (fist==2){
             System.out.println("机器人:石头");
         }else System.out.println("机器人:布");
         return fist;
    }
}

  • 弄好上面的两个基本类,就到了我们的“游戏场”了,这是最复杂的部分
    • 游戏场  自然要有 游戏规则,初始化界面,计算以及呈现比赛的结果
    • 将每一个行为都用函数写成单独的函数
    • 方法有:
      1. startMenu()  初始化界面,这里面包括了游戏规则,以及对双方出拳的判断,展示每轮的得分情况
      2. showResult()  将结果展示在控制台上
      3. Result()  对双方的分数做胜负的判断
/**
 * 用户,机器人的出拳进行对比,
 * 对结果进行记录
 * 然后输出结果
 */
public class Game {
    static Scanner input = new Scanner(System.in);
    //对用户类和机器人类进行初始化
    User user = new User();
    Machine machine = new Machine();
    /**
     * 开始菜单
     */
    public void startMenu(){
        //--初始化界面
        System.out.println("=======欢迎来到猜拳游戏=======");
        System.out.println();
        System.out.println("*******************************");
        System.out.println("——————出拳规则:1-剪刀,2-石头,3-布——————");
        System.out.println("*******************************");
        System.out.println("-------》》》猜拳开始《《《------");
        System.out.println("-------------------------------");

        //获取用户想要进行的对战次数
        System.out.println("请输入对战局数");
        user.num = input.nextInt();//对象.属性名  用于直接给其属性赋值,主用于在其他类中
        int userFist;//用户出拳
        int machineFist;//机器人出拳
        for (int i=0; i< user.num; i++){
            //获取双方出拳
            userFist = user.setUser();
            machineFist = machine.setId();
            if (userFist==machineFist){
                System.out.println("结果:"+"第"+i+"局,平局,不积分");
            }else if ((userFist==1)&&(machineFist==2)||(userFist==2)&&(machineFist==3)||(userFist==3)&&(machineFist==1)){
                System.out.println("结果:"+"第"+i+"局,机器人赢,机器人积一分");
                machine.score++;
            }else if ((userFist==1)&&(machineFist==3)||(userFist==2)&&(machineFist==1)||(userFist==3)&&(machineFist==2)){
                System.out.println("结果:"+"第"+i+"局,玩家赢,玩家积一分");
                user.score++;
            }else {
                System.out.println("请按规则出拳!");
                break;
            }
        }
        //--显示结果
        showResult();
    }
//以上是初始化界面

    /**
     * 输出对战结果
     */
    private void showResult(){
        //显示对战次数
        System.out.println("--------------------");
        System.out.println("对战次数:"+user.num);

        //显示最终得分
        System.out.println("姓名\t得分");
        System.out.println("用户"+"\t"+user.score);
        System.out.println("机器人"+"\t"+machine.score);

        //显示对战结果
        int result = Result();
        System.out.println("------对战结果如下------");
        if (result==1){
            System.out.println("结果:打成平手");
        }else if (result==2){
            System.out.println("结果:恭喜!您赢了!");//用户获胜
        }else System.out.println("结果:你输了,别气馁,下次再来!");//计算机赢了
        System.out.println("游戏结束");
        System.out.println("------------------");
    }
//以上是输出对战的结果

//下面是计算的部分
    /**
     * 计算比赛结果
     */
    private int Result(){
        if (user.score==machine.score){
            return 1;
        }else if (user.score>machine.score){
            return 2;
        }else return 3;
    }
}

最后一步,用测试类进行测试(~ ̄▽ ̄)~

public class Guess {
    public static void main(String[] args) {
        //创建一个游戏场
        Game game = new Game();
        //直接调用,开始游戏
        game.startMenu();
    }
}

这个小游戏的代码都比较简单,主要是方法以及属性的设计,还有逻辑思路。


下面是成果展示啦

怎么用java实现人机猜拳?_第1张图片

怎么用java实现人机猜拳?_第2张图片


最后,我想送一句我最喜欢的话给努力的你  耐心和坚持总能奇迹般地扫除一切困难和障碍   一起从菜鸟翻身吧!!

还有,感谢您能看到这  ✧(≖ ◡ ≖✿),我会持续更新的!

还要特别感谢Java控制台实现猜拳游戏_java_脚本之家 (jb51.net)的作者给我提供了思路借鉴(菜鸟哭泣(ノへ`、))

你可能感兴趣的:(java)