答案 石头剪刀布 编码过程 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/?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/?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/?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/?logTag=Zf5bwygPjJUJlZ8W5p4cS
06 胜负判断

利用分支进行三种情况的处理
- 平局情况
- 胜利情况
- 其它就是失败情况
视频 06
https://www.ixigua.com/0?logTag=m7mTVIFUSjvOZ85QnXhoK
07 游戏循环起来

一局游戏后,问询是否下一局
如果用户输入y,就继续游戏
do{
反复的游戏}while(键盘输入是否是y);
视频 07
https://www.ixigua.com/?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/?logTag=0CaNWCd2OZz_j0uU9iiSk
源文件 08
https://cloud.189.cn/t/iYfI3iyQzi63
说明
此法并不是最优的写法
为了便于理解,拆的很细
当编码流程理解透后
可以有更好的写法出来
小结
本项目主要演练如何让一个复杂的项目充实起来
看见这么麻烦的一个项目,脑头有可能会很大
不过要学会,先分析,再拆解,再填空,这样的思路
再难的东西,都可以分而治之
编码过程中有遇到过结构设计错误的情况
例如应该用while循环的结构,结果用了do…while…结构
但是并不影响
我们只需要把那附近的代码进行一个调整即可


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/43372.html