【Java语言】项目实践:人机猜拳游戏(源码)(面向对象方法)

本文通过Java编程实现了一个简易的人机猜拳游戏,介绍了PersonPlayer与ComputerPlayer类的设计,展示了游戏规则、玩家交互及结果判定。
package com.njwbhz.part0217.Mora;

import java.util.Scanner;

public class PersonPlayer {
    //属性
    //人类玩家的名字
    String name;
    //人类玩家的得分
    int score;

    //方法
    //人类玩家出拳的动作
    public int showFist() {
        //人类玩家的出拳动作
        //依靠从键盘上出入去实现
        //创建一个从键盘上录入输入的对象
        Scanner scanner = new Scanner(System.in);
        //将录入的出拳对应的数值存储到一个变量中去以便等会返回
        int number = 0;
        //设置一个标志用来判断玩家的出拳是否有问题
        boolean flag = true;
        while (flag) {
            //将录入的出拳对应的数值存储到一个变量中去
            int n = scanner.nextInt();
            //判断玩家的出拳有没有问题
            //如果没有问题
            if (n == 1 || n == 2 || n == 3) {
                //把输入的值赋给要返回的变量
                number = n;
                //然后让标识改变,从而可以跳出循环
                flag = false;
            }else{
                //如果玩家的出拳有问题,那就重新让玩家出拳
                System.out.println("你的出拳有问题,请重新出拳。");
                //然后继续执行循环体
            }
        }
        //跳出循环以后,返回玩家出拳的数值
        return number;
    }
}
package com.njwbhz.part0217.Mora;

import java.util.Scanner;

public class TestPersonPlayer {
    public static void main(String[] args) {
        //创建一个从键盘上录入数值的对象
        Scanner scanner = new Scanner(System.in);
        //创建一个具体的人类玩家的对象
        PersonPlayer personPlayer = new PersonPlayer();
        //初始化人类玩家的名字
        personPlayer.name = "坤坤小仙";
        //初始化人类玩家的得分
        personPlayer.score = 100;
        //展示人类玩家的各项属性
        System.out.println(personPlayer.name);
        System.out.println(personPlayer.score);
        //人类玩家出拳
        //提醒人类玩家出拳
        System.out.println("请" + personPlayer.name + "出拳:");
        //创建一个新的变量录入人类玩家出拳的数值
        int number = scanner.nextInt();
        //展示人类玩家的出拳
        System.out.println(personPlayer.name + "的出拳是:" + number);
    }
}
package com.njwbhz.part0217.Mora;

public class ComputerPlayer {
    //属性
    //计算机玩家的名字
    String name;
    //计算机玩家的得分
    int score;

    //方法
    //计算机玩家的出拳动作
    public int showFist () {
        //让计算机玩家随机出拳
        //依靠随机函数去实现
        int number = (int) (Math.random() * 3 + 1);
        //返回计算机玩家的出拳数值(在Game类中会根据返回的数值来判定计算机玩家的出拳)
        return number;
    }
}
package com.njwbhz.part0217.Mora;

public class TestComputerPlayer {
    public static void main(String[] args) {
        //创建一个具体的计算机玩家的对象
        ComputerPlayer computerPlayer = new ComputerPlayer();
        //初始化计算机玩家的名字
        computerPlayer.name = "坤坤小仙";
        //初始化计算机玩家的得分
        computerPlayer.score = 100;
        //展示计算机玩家的各项属性
        System.out.println(computerPlayer.name);
        System.out.println(computerPlayer.score);
        //让计算机玩家出拳(显示的是数值)
        System.out.println(computerPlayer.showFist());
    }
}
package com.njwbhz.part0217.Mora;

import java.util.Scanner;

public class Game {
    //属性
    //电脑玩家的对象
    ComputerPlayer computerPlayer = new ComputerPlayer();
    //人类玩家的对象
    PersonPlayer personPlayer = new PersonPlayer();
    //变量times用来统计游戏进行的次数
    int times = 0;

    //方法
    //创建一个从键盘上录入数据的对象
    Scanner scanner = new Scanner(System.in);
    //初始化
    public void init () {
        //先向玩家展示出拳的规则
        System.out.println("出拳规则:1.剪刀 2.石头 3.布 ");
        //电脑玩家游戏名字的初始化
        //提示人类玩家进行电脑玩家的初始化
        System.out.println("请选择对方的游戏角色(1:刘备 2:孙权 3:曹操)");
        //根据玩家的选择进行电脑玩家游戏名字的初始化
        while (true){
                //创建一个变量存储从键盘上录入的数据
                int number = scanner.nextInt();
                //设置一个标志用来判断玩家的选择是否有问题
                boolean flag = true;
                switch (number){
                    case 1:
                        computerPlayer.name = "刘备";
                        break;
                    case 2:
                        computerPlayer.name = "孙权";
                        break;
                    case 3:
                        computerPlayer.name = "曹操";
                        break;
                    default:
                        //如果玩家输入的数据有问题,那么就让玩家重新输入
                        System.out.println("你的选择超出范围,请重新选择。");
                        flag = false;
                        break;
                }
                if (flag == false){
                    continue;
                }else{
                    break;
                }
        }
        //代码测试
//            System.out.println(computerPlayer.name);
        //测试完毕

        //人类玩家名字的初始化
        //提示玩家设置游戏名称
        System.out.println("请输入你的名字:");
        //创建一个变量来存储玩家设置的名字
        String name = scanner.next();
        ///将玩家设置的名字初始化到人类玩家的name属性中去
        personPlayer.name = name;
        //代码测试
//        System.out.println(name);
        //代码测试完毕
    }

    //开始游戏
    public void start () {
        //上来就问玩家,是否要开始游戏
        System.out.println("要开始吗?(y/n)");
        //创建一个变量用来存储玩家的意愿
        String isStart = scanner.next();
        //创建一个变量用来判断是否要进行游戏
        boolean flag = false;
        if (isStart.equalsIgnoreCase("y")) {
            //如果玩家同意,那么久开始游戏
            flag = true;
        }
        //如果玩家不同意开始游戏,那么就直接进入游戏统计
        while (flag) {
            //代码测试
//            System.out.println("游戏顺利进行");
            //测试完毕
            //提示游戏规则
            System.out.println("游戏分值规则:谁赢了,加一分,其余情况均不改变分值");
            //提示人类玩家出拳
            System.out.println("请出拳:1.剪刀 2.石头 3.布");
            //创建两个变量来记录玩家出拳的结果
            int personPlayerNumber = personPlayer.showFist();
            int computerPlayerNumber = computerPlayer.showFist();
            //展示人类玩家的出拳结果
            switch (personPlayerNumber) {
                case 1:
                    System.out.println(personPlayer.name + "出拳:剪刀" );
                    break;
                case 2:
                    System.out.println(personPlayer.name + "出拳:石头" );
                    break;
                case 3:
                    System.out.println(personPlayer.name + "出拳:布" );
                    break;
                // 这里没有写default,因为异常情况都已经提前处理好了
            }
            //展示电脑玩家的出拳结果
            switch (computerPlayerNumber) {
                case 1:
                    System.out.println(computerPlayer.name + "出拳:剪刀" );
                    break;
                case 2:
                    System.out.println(computerPlayer.name + "出拳:石头" );
                    break;
                case 3:
                    System.out.println(computerPlayer.name + "出拳:布" );
                    break;
                // 这里没有写default,因为异常情况都已经提前处理好了
                //代码测试
                //代码测试完毕
            }
            calcResult(personPlayerNumber, computerPlayerNumber);
            //游戏完成一轮,累计加1
            times++;
            //询问玩家是否进入下一轮游戏
            System.out.println("你已经进行了" + times + "局游戏,是否进入下一轮(y/n):");
            //用isStart(前面已经用到过了)来存储玩家是否要进行下一轮的意愿
            isStart = scanner.next();
            //根据玩家的意愿来决定是否进入下一轮游戏
            if (isStart.equalsIgnoreCase("n")){
                //如果玩家不想进入下一局游戏
                flag = false;
            }
            //如果flag为false,那就直接跳出循环了,如果不是,那就继续游戏
        }
        //代码测试
//        System.out.println("游戏没有执行");
        //测试完毕
    }
    //判断当局游戏的胜负情况
    public void calcResult(int personPlayerNumber, int computerPlayerNumber){
        //公布游戏结果
        //展示人类玩家出拳的结果并且公布游戏结果
        //这里需要一个变量来记录游戏结果
        //情况1:平局computerPlayerNumber == personPlayerNumber
        //情况2:人类玩家胜利
        //personPlayerNumber == 1 && computerPlayerNumber == 3
        //personPlayerNumber == 2 && computerPlayerNumber == 1
        //personPlayerNumber == 3 && computerPlayerNumber == 2
        //情况3:电脑玩家胜利
        //computerPlayerNumber == 1 && personPlayerNumber == 3
        //computerPlayerNumber == 2 && personPlayerNumber == 1
        //computerPlayerNumber == 3 && personPlayerNumber == 2
        //如果是平局
        if (computerPlayerNumber == personPlayerNumber){
            System.out.println("结果:平局");
        }else if ((personPlayerNumber == 1 && computerPlayerNumber == 3) || (personPlayerNumber == 2 && computerPlayerNumber == 1) || (personPlayerNumber == 3 && computerPlayerNumber == 2)) {
            System.out.println("结果:" + personPlayer.name + "获得胜利");
            //人类玩家加一分
            personPlayer.score++;
        }else{
            System.out.println("结果:" + computerPlayer.name + "获得胜利");
            //电脑玩家加一分
            computerPlayer.score++;
        }
    }
    //输出游戏的统计数据
    public void print () {
        System.out.println(personPlayer.name + "VS" + "\t\t\t" + computerPlayer.name);
        System.out.println("对站次数:" + times);
        System.out.println("姓名\t\t得分");
        System.out.println(personPlayer.name + "\t\t\t\t\t\t" + personPlayer.score);
        System.out.println(computerPlayer.name + "\t\t\t\t\t\t" + computerPlayer.score);
    }
    //计算总的胜负情况
    public void calcTotalResult () {
        if (personPlayer.score == computerPlayer.score){
            System.out.println("游戏的最终结果:平\t局");
        }else if(personPlayer.score > computerPlayer.score){
            System.out.println("游戏的最终结果:" + personPlayer.name + "获得最终的胜利!");
        }else{
            System.out.println("游戏的最终结果:" + computerPlayer.name + "获得最终的胜利!");
        }
    }
}
package com.njwbhz.part0217.Mora;

public class TestGame {
    public static void main(String[] args) {
        Game game = new Game();
        game.init();
        game.start();
    }
}
package com.njwbhz.part0217.Mora;

public class GameApp {
    public static void main(String[] args) {

        //欢迎部分
        System.out.println("——————————欢迎老板——————————");
        System.out.println("\n");
        System.out.println("\t话不多说,开始猜拳");
        System.out.println("————————————————————————");

        //组装游戏部分
        Game game = new Game();
        //初始化
        game.init();
        //开始游戏
        game.start();
        //输出游戏统计结果
        game.print();
        //输出游戏最终结果
        game.calcTotalResult();
    }
}

听取了李辰小可爱的建议,我还附上了运行效果

面向过程方法实现人机猜拳游戏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FairyKunKun

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

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

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

打赏作者

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

抵扣说明:

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

余额充值