java面向对象编程--猜拳小游戏

java面向对象编程实现--猜拳小游戏

目标

目标:玩家在控制台和电脑猜拳,电脑每次都会随机出石头/剪刀/布,

直到玩家选择退出游戏。记录并显示玩家和电脑猜拳的成绩。

设计思路分析

​ 电脑的随机猜拳可以使用 随机数生成,这里规定 0表示 石头,1 表示剪刀,

2 表示布。 为了显示清晰,可以设置一个方法将生成的随机数 转换为 对应

石头/剪刀/布。

​ 玩家在控制台输入(石头/剪刀/布),但玩家也可能输入别的数,所以这里

需要做一个玩家的输入校验 ,并考虑给玩家退出游戏的选择。

​ 记录的结果有 玩家猜拳选择,电脑猜拳选择 和胜负。为了方便管理和显示,

这里设计一个结果类。用于记录猜拳的结果,因为猜拳次数可能不止一次,所以

考虑将 结果保存到 集合中,这里使用 ArrayList集合。

具体代码实现如下:

import java.util.ArrayList;
import java.util.Scanner;

public class FingerGuessingGame {//测试实现类
    public static void main(String[] args) {
        Tom tom = new Tom();
        tom.guess();
    }

}

//玩家类
class Tom {
    Scanner sc = new Scanner(System.in);

	//猜拳
    public void guess() {
        System.out.println("----------猜拳游戏开始(-1退出)---------");

        //使用ArrayList保存结果
        ArrayList<GuessResult> results = new ArrayList<>();
        while (true) {
            //玩家输入
            String tomGuess = checkInput();
            //如果输入-1退出游戏
            if (tomGuess.equals("-1"))
                break;
            //生成0-2的随机数
            int num = (int) (Math.random() * 3);
            //将获取到的数字按照之前的规定转换为字符串
            String comGuess = convertComputerGuess(num);
            System.out.println("电脑出 " + comGuess);
            //判断输赢
            String isWin = winORLoose(tomGuess, comGuess);
            System.out.println(isWin);
            //将结果添加到集合中
            results.add(new GuessResult(tomGuess, comGuess, isWin));

        }
        //输出结果
        System.out.println("-------本次猜拳的结果------");
        System.out.println("玩家\t\t\t电脑\t\t\t胜负");
        for (GuessResult result : results) {
            System.out.println(result);
        }


    }

    //获取电脑猜拳结果
    public String convertComputerGuess(int num) {
        //0代表石头,1剪刀,2布
        if (num == 0)
            return "石头";
        if (num == 1)
            return "剪刀";
        if (num == 2)
            return "布";
        return "";
    }

    //玩家输入校验
    public String checkInput() {
        while (true) {
            System.out.println("你出(石头/剪刀/布)-1退出:");
            String choice = sc.next();
            if (choice.equals("石头") || choice.equals("剪刀") ||
                    choice.equals("布") || choice.equals("-1")) {
                return choice;
            } else
                System.out.println("你的输入有误! 请检查并重新输入:");
        }
    }

    //判断输赢
    public String winORLoose(String tomGuess, String comGuess) {
        if (tomGuess.equals("石头") && comGuess.equals("剪刀"))
            return "赢";
        else if (tomGuess.equals("剪刀") && comGuess.equals("布"))
            return "赢";
        else if (tomGuess.equals("布") && comGuess.equals("石头"))
            return "赢";
        else if (tomGuess.equals(comGuess))
            return "平手";
        else
            return "输";

    }

}


//结果类 用于记录猜拳的结果
class GuessResult {
    private String tomGuess;
    private String ComGuess;
    private String isWin;

    public GuessResult(String tomGuess, String comGuess, String isWin) {
        this.tomGuess = tomGuess;
        ComGuess = comGuess;
        this.isWin = isWin;
    }
    @Override
    public String toString() {
        return
                tomGuess +"\t\t\t"+
                 ComGuess + "\t\t\t" +
                 isWin ;
    }
}
posted @ 2021-10-26 13:45  穿皮鞋的猫  阅读(386)  评论(0)    收藏  举报