IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 怎么用java实现人机猜拳? -> 正文阅读

[Java知识库]怎么用java实现人机猜拳?

任务概述:

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

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

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

  • 首先是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控制台实现猜拳游戏_java_脚本之家 (jb51.net)的作者给我提供了思路借鉴(菜鸟哭泣(ノへ`、))

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 10:35:34  更:2021-07-23 10:37:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 7:44:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码