迷你项目练习题2猜拳游戏

题目

设计一个猜拳游戏,完成人机猜拳互动游戏的开发。
功能:

  1. 选取对战角色
  2. 猜拳
  3. 记录分数
    在这里插入图片描述

第一种写法(面向对象)

题目分析

  • 共需要6个类
  • 自定义类:Player玩家类 Computer电脑类 Judge裁判类 Test测试类
  • 导入类:Scanner类 Random类

代码展示

Player类

public class Player {
    private  int score;
    private String name;
    private String[] quan = {" ","剪刀","石头","布"};
    //出拳的方法
    public String chuQuan(int index){
     return  quan[index];
    }
    //name和score的Getter and Setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public String[] getQuan() {
        return quan;
    }

    public void setQuan(String[] quan) {
        this.quan = quan;
    }
}

Computer类

import java.util.Random;
public class Computer {
    //电脑名字
    private String name;
    //电脑分数
    private  int score;
    //角色数组
    private String[] roles = {" ","刘备","孙权","曹操"};
    //出拳数组
    private String[] quan = {" ","剪刀","石头","布"};
    Random r = new Random();
    //出拳的方法
    public String chuQuan(){
        return quan[r.nextInt(3)+1];
    }
    //获取角色的方法
    public String getRole(int index){
        return roles[index];
    }
    //name,score,roles的Getter and Setter
    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public String[] getRoles() {
        return roles;
    }

    public void setRoles(String[] roles) {
        this.roles = roles;
    }

    public String[] getQuan() {
        return quan;
    }

    public void setQuan(String[] quan) {
        this.quan = quan;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Judge类

public class Judge {
    //结果数组
    private String[] result = {"^_^平手,继续努力","^_^恭喜你,你赢了!","^_^你输了,真笨!"};
    //判断的方法
    public int judge(String player,String computer) {
        if (computer.equals("剪刀")) {
            switch (player) {
                case "剪刀":
                    return 0;
                case "石头":
                    return  1;
                case "布":
                    return  2;
                default:
                    System.out.println("输入错误");
            }
        } if(computer.equals("石头")){
            switch (player) {
                case "剪刀":
                    return 2;
                case "石头":
                    return  0;
                case "布":
                    return  1;
                default:
                    System.out.println("输入错误");
            }
        }if (computer.equals("布")){
            switch (player) {
                case "剪刀":
                    return 1;
                case "石头":
                    return 2;
                case "布":
                    return 0;
                default:
                    System.out.println("输入错误");
            }
        }
         return  0 ;
    }
    //判断得到结果的方法
    public String getResult(int index){
        return result[index];
    }
    //得分的方法
    public void getScore(Player player,Computer computer,int index){
        if(index == 1) {
            player.setScore(player.getScore()+1);
        }
        if(index == 2){
            computer.setScore(computer.getScore()+1);
        }
    }
  //谁赢的方法
    public void victory(Player player,Computer computer){
        if(player.getScore() == computer.getScore()){
            System.out.println(result[0]);
        }
        if(player.getScore() > computer.getScore()){
            System.out.println(result[1]);
        }
        if(player.getScore() < computer.getScore()){
            System.out.println(result[2]);
        }
    }
}

Test类

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        //创建电脑对象
        Computer computer = new Computer();
        //创建玩家对象
        Player player = new Player();
        //创建裁判对象
        Judge judge = new Judge();
        //对战次数初始化
        int times = 0;
        //调用Scanner类
        Scanner sc = new Scanner(System.in);
        System.out.println("*******************");
        System.out.println("**猜拳游戏  马上开始**");
        System.out.println("*******************");
        System.out.println("出拳规则:1.剪刀 2.石头 3.布");
        System.out.print("请选择对方角色(1:刘备 2:孙权 3:曹操)");
        //选择电脑的角色,输入1 2 或3 如果输入错误 可以重新输入
        while (true) {
            int index1 = sc.nextInt();
            if (index1<4 && index1>0) {
                computer.setName(computer.getRole(index1));
                break;
            } else {
                System.out.println("输入的数字不正确,请重试");
            }
        }
        //输入自己的姓名
        System.out.print("请输入你的姓名");
        player.setName(sc.next());
        System.out.println(player.getName() + " vs " + computer.getName() + "对战开始");
        System.out.print("要开始吗?输入y/n");
        while (true) {
            String gameStart = sc.next();
            if (gameStart.equals("y") || gameStart.equals("Y")) {
                times ++;
                System.out.println("对战次数" + times);
                System.out.println("请出拳:1.剪刀 2.石头 3.布");
                int index2 = sc.nextInt();
                System.out.println("你出:"+player.chuQuan(index2));
                String computerQuan = computer.chuQuan();
                System.out.println(computer.getName()+"出"+computerQuan);
                //判断结果的方法
                int judge1 = judge.judge(player.chuQuan(index2), computerQuan);
                //得到结果的方法
                System.out.println(judge.getResult(judge1));
                //得分的方法
                judge.getScore(player,computer,judge1);
                //显示姓名和得分
                System.out.println("姓名 得分");
                System.out.println(player.getName()+" " +player.getScore());
                System.out.println(computer.getName()+" "+computer.getScore());
                System.out.println("是否开始下一轮(y/n)?");
            }else if(gameStart.equals("n")  || gameStart.equals("N")){
                break;
        }else {
                System.out.println("输入错误,请重试");
            }
        }
        if(times == 0){
            System.out.println("连挑战我的勇气都没有吗?");
        }else {
            //根据总分,判断谁胜利
        judge.victory(player,computer);}
        System.out.println("游戏结束");
    }
}

程序运行结果

在这里插入图片描述

第二种写法(面向过程)

题目分析

  • 共需要5个类
  • 自定义类:Player玩家类 Computer电脑类 Test测试类
  • 导入类:Scanner类 Random类

代码展示

Player类

public class Player {
    //玩家名字
    private  String name;
    //玩家得分
    private  int score;
    //无参构造方法
    public Player() {
    }
    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public Player(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Computer类

public class Computer {
    //电脑名字
    private  String name;
    //电脑得分
    private int score;
    public Computer(String name) {
        this.name = name;
    }

    public Computer() {

    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Test类

import java.util.Random;
import java.util.Scanner;
public class Test {
    //猜拳游戏
    public static void fingerGuessingGame(int select,int selectOfComputer,Player player,Computer computer){
        //包含了玩家和电脑都是1 玩家和电脑都是2 玩家和电脑都是3
       boolean b1 = (select == selectOfComputer);//平手
       boolean b2 = (select ==2 && selectOfComputer ==1);//玩家石头 电脑剪刀
        boolean b3 = (select ==3 && selectOfComputer ==2);//玩家布 电脑石头
        boolean b4 = (select ==1 && selectOfComputer ==3);//玩家剪刀 电脑布
        if(b1){
            System.out.println("双方平手");
        }else if(b2 || b3 || b4){
            System.out.println("没想到你还挺厉害的");
            player.setScore(player.getScore()+1);
        }else{
            System.out.println("你输了,你真笨");
            computer.setScore(computer.getScore()+1);
        }
    }
    public static void main(String[] args) {
        //对战次数
        int times = 0;
        //创建玩家对象
        Player player = new Player();
        //创建电脑对象
        Computer computer = new Computer();
        //Scanner类
        Scanner sc = new Scanner(System.in);
        //Random类
        Random random = new Random();
        System.out.println("*******************");
        System.out.println("**猜拳游戏  马上开始**");
        System.out.println("*******************");
        System.out.println("出拳规则:1.剪刀 2.石头 3.布");
        System.out.print("请选择对方角色(1:刘备 2:孙权 3:曹操)");
        loop1:while (true) {
            //获取选择的对方角色数字(1,2或3)
            int computerName = sc.nextInt();
            switch (computerName) {
                case 1:
                    computer.setName("刘备");
                    break loop1;
                case 2:
                    computer.setName("孙权");
                    break loop1;
                case 3:
                    computer.setName("曹操");
                    break loop1;
                default:
                    System.out.println("你输入的数字不正确,请重试");
                    break;
            }
        }
        System.out.print("请输入你的姓名");
        player.setName(sc.next());
        System.out.println(player.getName() + " vs "+computer.getName() +"对战开始");
        System.out.print("要开始吗?输入y/n");
        loop2:while(true) {
            String gameStart = sc.next();
            if(gameStart.equals("y")  || gameStart.equals("Y") ){
                System.out.println("对战次数"+times);
                System.out.println("请出拳:1.剪刀 2.石头 3.布");
                int select = sc.nextInt();
                switch (select){
                    case 1:
                        System.out.println("你出剪刀");break;
                    case 2:
                        System.out.println("你出石头");;break;
                    case 3:
                        System.out.println("你出布");break;
                    default:
                        System.out.println("你输入的数字错误,请重试");
                }
                //random类的nextInt方法是左开右闭区间
                int selectOfComputer = random.nextInt(3)+1;
                switch (selectOfComputer){
                    case 1:
                        System.out.println(computer.getName()+"出剪刀");break;
                    case 2:
                        System.out.println(computer.getName()+"出石头");;break;
                    default:
                        System.out.println(computer.getName()+"出布");break;
                }
                fingerGuessingGame(select,selectOfComputer,player,computer);
                   times++;
                System.out.println("姓名 得分");
                System.out.println(player.getName()+" " +player.getScore());
                System.out.println(computer.getName()+" "+computer.getScore());
                System.out.println("是否开始下一轮(y/n)?");
            }else if(gameStart.equals("n")  || gameStart.equals("N")){
                break loop2;
            }
        }
        if(times == 0){
            System.out.println("连挑战我的勇气都没有吗?");
        }
        else if(player.getScore() == computer.getScore()) {
            System.out.println("竟然是平手,看来小瞧你了");
        }else if(player.getScore() < computer.getScore()){
            System.out.println("呵呵,下次加油啊");
        }else{
            System.out.println("败给你了,我以后不会再放水了");
        }
    }
}

程序运行结果

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香鱼嫩虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值