答案 石头剪刀布 编码过程 0912

答案 石头剪刀布 编码过程 0912

效果

在这里插入图片描述

下载 脑图

https://cloud.189.cn/t/VJzu6jRvQ7Rb

在这里插入图片描述

01根据脑图创建类

需要有的类

  • 玩家,player
  • 电脑,computer
  • 裁判,referee

创建类

在这里插入图片描述

三个类

一个测试文件

编写玩家类的属性与方法

玩家类

public class Player {
    
    
    // 名字
    String name;
    // 得分
    int score;

    /**
     * 出拳方法
     */
    public void punches() {
    
    
        System.out.println("玩家出了一个拳");
    }
}

测试一下

public class test {
    
    
    public static void main(String[] args) {
    
    
        // 测试开始

        // 玩家对象
        Player zs = new Player();
        zs.punches();
    }
}

结果

玩家出了一个拳

编写计算机类的属性与方法

代码与玩家类的代码差不太多,所以直接复制

public class Computer {
    
    
    // 名字
    String name;
    // 得分
    int score;

    /**
     * 出拳方法
     */
    public void punches() {
    
    
        System.out.println("计算机出了一个拳");
    }
}

测试

public class test {
    
    
    public static void main(String[] args) {
    
    
        // 测试开始

        // 玩家对象
        Player zs = new Player();
        zs.punches();

        // 计算机对象
        Computer pc = new Computer();
        pc.punches();
    }
}

结果

玩家出了一个拳
计算机出了一个拳

裁判类

定义

public class Referee {
    
    

    /**
     * 开始游戏
     * 用途:控制游戏流程
     */
    public void start() {
    
    
        System.out.println("让游戏开始吧");
    }
}

测试

public class test {
    
    
    public static void main(String[] args) {
    
    
        // 测试开始

        // 玩家对象
        Player zs = new Player();
        zs.punches();

        // 计算机对象
        Computer pc = new Computer();
        pc.punches();

        // caipan对象
        Referee cp = new Referee();
        cp.start();
    }
}

结果

玩家出了一个拳
计算机出了一个拳
让游戏开始吧

源码 01

https://cloud.189.cn/t/7VRnyaMvMvAj

视频 01

https://www.ixigua.com/6871813006473298440?logTag=1kWy5BjWbX2BTRb5vH5d2

02 实现裁判的开始方法

脑图
在这里插入图片描述

清除测试类中的杂乱代码

只保留裁判断的实例化与开始方法的调用

测试能否正常输出结果

在start方法中编写执行过程

先写占位代码

/**
 * 裁判类
 */
public class Referee {
    
    

    /**
     * 开始游戏
     * 用途:控制游戏流程
     */
    public void start() {
    
    
        // 初始化选手
        System.out.println("玩家对象登场");
        System.out.println("电脑对象登场");

        // 获取出拳
        System.out.println("玩家出拳");
        System.out.println("电脑出拳");

        // 计数器变化
        System.out.println("计数器变化");

        // 胜负判断
        System.out.println("胜负判断");

        // 是否要继续
        System.out.println("要继续吗?");
    }
}

效果

玩家对象登场
电脑对象登场
玩家出拳
电脑出拳
计数器变化
胜负判断
要继续吗?

视频 02

https://www.ixigua.com/6871834964221133326?logTag=DP0I_im3_7KDCTTaWt3OD

03 实现玩家与电脑的出拳-玩家

玩家出拳

    /**
     * 出拳方法
     */
    public String punches() {
    
    
        System.out.println("请出拳:1-剪刀,2-石头,3-布(输入相应数字):");
        String quan = ipt.next();
        System.out.println("你出拳" + quan);
        return quan;
    }

玩家通过键盘输入,出拳

quan变量接收键盘的输入

字符串类型

return 这个录入的结果

测试一下

可以正常的收到数据

在这里插入图片描述

然而需求为

在这里插入图片描述

输入2,提示出石头

所以还缺一个数字转字符串的打印操作

考虑使用分支语句可以完成

视频 03

04 实现玩家与电脑的出拳-电脑

电脑的出拳办法

电脑利用随机数出拳

随机出1 2 3 三个数据

先写一个随机小功能

测测能否实现1 2 3 的数据生成

在这里插入图片描述

在电脑出拳方法中生成一个数

    public int punches() {
    
    
        Random random = new Random();
        int randNum = random.nextInt(3) + 1;
        return randNum;
    }

修正一下玩家出拳的数据类型

电脑出的是整数

玩家出的是字符串

应该统一数据类型

所以把,玩家出拳的返回值变成整数返回

视频 04

https://www.ixigua.com/6871846165554725390?logTag=-GFlBc25qOnbCxvX8jHd3

05 数字转字符串

思考,这里如何进行输出?

如果出拳是2,就输出石头, 如果出拳是1,就输出剪刀

可以考虑:

多路分支

简单粗暴的写法


        // 需要,把1转换成剪刀,2转换成石头,3转换成布进行输出
        // 使用一个粗旷的方法来实现
        // 玩家出拳的转换
        if (player1Quan == 1) {
    
    
            System.out.println("你出拳:剪刀");
        } else if (player1Quan == 2) {
    
    
            System.out.println("你出拳:石头");
        } else if (player1Quan == 3) {
    
    
            System.out.println("你出拳:布");
        }
        // 电脑出拳的转换
        if (computer1Quan == 1) {
    
    
            System.out.println("电脑出拳:剪刀");
        } else if (computer1Quan == 2) {
    
    
            System.out.println("电脑出拳:石头");
        } else if (computer1Quan == 3) {
    
    
            System.out.println("电脑出拳:布");
        }
        System.out.println("虽然功能实现了,但是代码太罗嗦了,可以优化");

视频 05

https://www.ixigua.com/6871849136673522183?logTag=Zf5bwygPjJUJlZ8W5p4cS

06 胜负判断

在这里插入图片描述

利用分支进行三种情况的处理

  • 平局情况
  • 胜利情况
  • 其它就是失败情况

视频 06

https://www.ixigua.com/6871853339307409927?logTag=m7mTVIFUSjvOZ85QnXhoK

07 游戏循环起来

在这里插入图片描述
一局游戏后,问询是否下一局

如果用户输入y,就继续游戏

do{
    
    反复的游戏}while(键盘输入是否是y);

视频 07

https://www.ixigua.com/6871856414227169799?logTag=fBvij9VaaSASNdbjoKzKj

08 调整显示

  • 计数器变化
  • 玩家固定名字
  • 选择电脑姓名
  • 在出拳前显示 玩家vs电脑
  • do…while循环转while循环
  • 计分处理

代码

import java.util.Scanner;

/**
 * 裁判类
 */
public class Referee {
    
    

    /**
     * 开始游戏
     * 用途:控制游戏流程
     */
    public void start() {
    
    
        // scanner
        Scanner ipt = new Scanner(System.in);
        // 初始化选手
        Player player1 = new Player();
        // 玩家名字默认为王子
        player1.name = "王子";

        // 初始化电脑
        Computer computer1 = new Computer();
        // 给电脑起名字
        System.out.println("请选择对方角色(1 刘备,2 孙权,3 曹操)");
        int nameNum = ipt.nextInt();
        String computer1Name = "";
        switch (nameNum) {
    
    
            case 1:
                computer1Name = "刘备";
                break;
            case 2:
                computer1Name = "孙权";
                break;
            case 3:
                computer1Name = "曹操";
                break;
        }
        computer1.name = computer1Name;


        // scanner对象
        // 是否继续
        String is_continue;
        // 计数器
        int counter = 0;

        // 宣布对战
        System.out.println(player1.name + "  VS  " + computer1.name + "  对战");

        // 游戏循环:出拳,评判,是否再玩,再出拳,再评判,再问是否玩,do...while


        // do...while 转while....
        // 是否要继续
        System.out.println("要继续吗?y-继续");
        is_continue = ipt.next();

        while ("y".equals(is_continue)) {
    
    
            // 获取出拳,需要有返回值,用于提供裁判进行比较
            int player1Quan = player1.punches();
            int computer1Quan = computer1.punches();

            // 需要,把1转换成剪刀,2转换成石头,3转换成布进行输出
            // 使用一个粗旷的方法来实现
            // 玩家出拳的转换
            if (player1Quan == 1) {
    
    
                System.out.println("你出拳:剪刀");
            } else if (player1Quan == 2) {
    
    
                System.out.println("你出拳:石头");
            } else if (player1Quan == 3) {
    
    
                System.out.println("你出拳:布");
            }
            // 电脑出拳的转换
            if (computer1Quan == 1) {
    
    
                System.out.println("电脑出拳:剪刀");
            } else if (computer1Quan == 2) {
    
    
                System.out.println("电脑出拳:石头");
            } else if (computer1Quan == 3) {
    
    
                System.out.println("电脑出拳:布");
            }

            // 计数器变化
            counter++;

            // 胜负判断
            if (computer1Quan == player1Quan) {
    
    
                // 平局情况
                System.out.println("天哪,平局了");

            } else if (player1Quan == 2 && computer1Quan == 1 || player1Quan == 1 && computer1Quan == 3 || player1Quan == 3 && computer1Quan == 2) {
    
    
                // 胜利情况
                System.out.println("玩家胜利,电脑失败");
                player1.score += 1;
            } else {
    
    
                // 失败情况
                System.out.println("电脑胜利,玩家失败");
                computer1.score += 1;
            }

            // 是否要继续
            System.out.println("要继续吗?y-继续");
            is_continue = ipt.next();

            // 换行
            System.out.println();
            System.out.println();

        }
        ;

        System.out.println("一共比赛的次数:" + counter);
        System.out.println("玩家得分:" + player1.score);
        System.out.println("电脑得分:" + computer1.score);
    }
}

视频 08

https://www.ixigua.com/6871861896690172424?logTag=0CaNWCd2OZz_j0uU9iiSk

源文件 08

https://cloud.189.cn/t/iYfI3iyQzi63

说明

此法并不是最优的写法

为了便于理解,拆的很细

当编码流程理解透后

可以有更好的写法出来

小结

本项目主要演练如何让一个复杂的项目充实起来

看见这么麻烦的一个项目,脑头有可能会很大

不过要学会,先分析,再拆解,再填空,这样的思路

再难的东西,都可以分而治之

编码过程中有遇到过结构设计错误的情况

例如应该用while循环的结构,结果用了do…while…结构

但是并不影响

我们只需要把那附近的代码进行一个调整即可

猜你喜欢

转载自blog.csdn.net/ifubing/article/details/108545389
今日推荐