java建立人机猜拳

  1、 人机猜拳的主要功能有选取对战角色、猜拳、记录分数等。

  2、人机猜拳主要有用户类、计算机类以及游戏类。

    (1) 用户类

          获取姓名、分数、以及出拳方式等。

/**
 * 用户类
 */
public class User {
    //用户属性姓名 得分
    private String name;
    private int count;
    //获取用户输入姓名 与 分数
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count += count;
    }
    /**
     * 出拳方法
     * 1 剪刀   2 石头  3 布  
*/
    public int showFist(int i) {
        //判断 输入内容是否为出拳方式(1 2 3) 是返回原值 不是返回 -1
        if (i == 1 || i == 2 || i == 3) {
            return i;
        } else {
            return -1;
        }
    }
}

   (2) 计算机类

         获取电脑姓名、分数以及出拳方式等。

import java.util.Random;
/**
 * 计算机类
 */
public class Computer{
    //计算机类属性
    private String name;
    private int count;
    /**
     * 获取对战角色(1 刘备  2 孙权  3 曹操)与分数
     */
    public void setName(int i){
        switch(i){
            case 1:
                this.name="刘备";
                break;
            case 2:
                this.name="孙权";
                break;
            case 3:
                this.name="槽操";
                break;
        }
    }
    public String getName(){
        return this.name;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count += count;
    }
    /**出拳方法
     *    1 剪刀   2 石头  3 布
     * */
   public int showFist(){
        /**  随机出拳
         * Random()随机函数     Math.random()  随机取0-1之间的数
         */
        Random r=new Random();
        int i= r.nextInt(3);  //随机取 0-3的整数(不包含 3)
        int tname=-1;
        switch (i){
            case 0:
                tname=1;
                break;
            case 1:
                tname=2;
                break;
            case 2:
                tname=3;
                break;
        }
        return tname;   
    }
}

    (3) 游戏类

          初始化各属性、并判断是否开始游戏以及记录双方获得的分数。

import java.util.Scanner;
/**
 * 游戏类
 */
public class Game{
    //建立对象
    User user=new User();
    Computer com=new Computer();
    Scanner in=new Scanner(System.in);
    //初始化数据
   public void initial(){
        //用户 和 电脑 得分
        user.setCount(0);
        com.setCount(0);
        System.out.println("*******猜拳游戏*******");
        System.out.println();
        System.out.println("出拳规则: 1 剪刀 2 石头 3 布");
       //输入数据不是(1,2,3)时继续循环 是(1,2,3)退出循环
        // while(true)为死循环 不退出会一直循环
        while(true){
            System.out.print("选择对战角色(1 刘备 2 孙权 3 曹操)");
            int k=in.nextInt();
            if(k==1||k==2||k==3){
              com.setName(k);  //对战中电脑方姓名
                break;    //退出循环
            }else{
                System.out.println("无角色 请重新选择!");
            }
        }
        System.out.print("输入你的姓名:");
        String comname=in.next();
        user.setName(comname);   //对战中用户方姓名
        System.out.println(user.getName()+"  vs  "+com.getName()+"  对战");
    }
    //将数字 转换成对应含义
   public String displayfist(int d){
        String tr="";
        switch (d){
            case 1:
                tr="剪刀";
                break;
            case 2:
                tr="石头";
                break;
            case 3:
                tr="布";
        }
        return tr;
    }
    //开始游戏
    void startGame(){
        Scanner ui=new Scanner(System.in);
        System.out.print("要开始游戏?(y/n)");
        String h;
        while(true){
            h=ui.nextLine();
            if(h.equals("y")){
                System.out.print("请出拳(1 剪刀 2 石头 3 布):");
                int e=in.nextInt();
                int x= user.showFist(e);   //用户出全拳
              while (x==-1){      //判断出全拳是否合理
                  System.out.println("出拳输入错误,请重新输拳!");
                  System.out.print("请出拳(1 剪刀 2 石头 3 布):");
                  e=in.nextInt();
                  x=user.showFist(e);
              }
              int y= com.showFist();   //电脑出拳
                //转换
                String xx=displayfist(x);
                String yy=displayfist(y);
                System.out.println("你出拳  "+xx);
                System.out.println("电脑出拳  "+yy);
                //计算分数
                int win=-2;
                if((x==3&&y==1)||(x==1&&y==3)){
                  if(x<y){
                     win=1;
                  }else if(x>y){
                      win=-1;
                  }
              }else {
                    if (x > y) {
                        win = 1;
                    } else if (y > x) {
                        win = -1;
                    } else if (x == y) {
                        win = 0;
                    }
                }
               if(win==-1){
                   com.setCount(2);
                   System.out.println("你输了!");
               }else if(win==0){
                   System.out.println("平局!");
               }else if(win==1){
                   user.setCount(2);
                   System.out.println("你赢了!");
               }
                System.out.println(user.getCount()+"     "+com.getCount());
                System.out.println("------------------");
                System.out.println("是否开始下一轮!(y/n)");
            }else{
                if(h.equals("n")){
                    System.out.println("退出");
                    break;
                }
                System.out.println("输入数据错误请重新输入!");
                System.out.println("是否开始下一轮!(y/n)");
            }
        }
        System.out.println("-------------------------------");
        System.out.println(user.getName()+"获得"+user.getCount());
   System.out.println(com.getName()+"获得"+com.getCount());
    }
}

    (4)测试类

public class 猜拳 {
    public static void main(String[] args) {
        Game game = new Game();
        game.initial();
        game.startGame();
    }
}

测试结果

 

posted on 2021-01-31 15:30  只会编写Bug=_=  阅读(235)  评论(0)    收藏  举报

导航