效果演示:

===========人机猜丁壳大战============
------------第1局-------------
请选择你的手势:【0-石头】 【1-剪刀】 【2-布】
1
李世石:剪子  阿尔法狗:石头
本局 :阿尔法狗赢
当前的比分为:李世石   0:1 阿尔法狗//项目分析:有两个对象,选手类:李世石 和 阿尔法狗
//比赛项目是猜丁壳 需要一个裁判
------------第2局-------------
请选择你的手势:【0-石头】 【1-剪刀】 【2-布】
2
李世石:布   阿尔法狗:石头
当前的比分为:李世石   1:1 阿尔法狗
------------第3局-------------
请选择你的手势:【0-石头】 【1-剪刀】 【2-布】
2
李世石:布   阿尔法狗:石头
当前的比分为:李世石   2:1 阿尔法狗
------------第4局-------------
请选择你的手势:【0-石头】 【1-剪刀】 【2-布】
1
李世石:剪子  阿尔法狗:石头
本局 :阿尔法狗赢
当前的比分为:李世石   2:2 阿尔法狗
------------第5局-------------
请选择你的手势:【0-石头】 【1-剪刀】 【2-布】
1
李世石:剪子  阿尔法狗:布
当前的比分为:李世石   3:2 阿尔法狗
------------第6局-------------
请选择你的手势:【0-石头】 【1-剪刀】 【2-布】
1
李世石:剪子  阿尔法狗:剪子
本局 : 和局
当前的比分为:李世石   3:2 阿尔法狗
------------第7局-------------
请选择你的手势:【0-石头】 【1-剪刀】 【2-布】
1
李世石:剪子  阿尔法狗:石头
本局 :阿尔法狗赢
当前的比分为:李世石   3:3 阿尔法狗
------------第8局-------------
请选择你的手势:【0-石头】 【1-剪刀】 【2-布】
1
李世石:剪子  阿尔法狗:布
当前的比分为:李世石   4:3 阿尔法狗
------------第9局-------------
请选择你的手势:【0-石头】 【1-剪刀】 【2-布】
1
李世石:剪子  阿尔法狗:布
当前的比分为:李世石   5:3 阿尔法狗
============================
最终比分为:李世石    5:阿尔法狗  3
李世石胜利Process finished with exit code 0

根据上图可以看出一共有9个类,3种包!

service包:接口GameInterface GuessGame | 类Player ComputerPlayer UserPlayer | Judger

test包:TestGame 启动类

util包:Constants MyUtil

定义一个常量类和工具类:

public class Constants {public static final int STONE = 0; //石头public static final int SCISSORS = 1; //剪子public static final int CLOTH = 2; //布public static final int WINCOUNT = 5; //判定胜利的局数public static final String[] NAMES ={"石头","剪子","布"};
}
public class MyUtil {private MyUtil(){}/*** 产生指定范围的随机数[0,max]* @param max* @return*/public static int getRandom(int max){return new Random().nextInt(max+1);//[0,max]}}

开发玩家类和裁判类:

抽象玩家类:

public abstract class Player {private String name;//姓名 李世石 阿尔法狗private int value;//出拳 手势 0 1 2private int winCount;//取胜局数public Player(){}public Player(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getValue() {return value;}public void setValue(int value) {this.value = value;}public int getWinCount() {return winCount;}public void setWinCount(int winCount) {this.winCount = winCount;}/*** 获取玩家的手势对应的数据,赋给成员变量value并返回value的值* @return*/public abstract int getInputValue();}
public class UserPlayer extends Player {public UserPlayer() {}public UserPlayer(String name) {super(name);}@Overridepublic int getInputValue() {//获取从键盘输入的随机数Scanner input = new Scanner(System.in);System.out.println("请选择你的手势:【0-石头】 【1-剪刀】 【2-布】");int value = input.nextInt();//赋给用户玩家的valuethis.setValue(value);//返回随机数return value;}
}
/*** 电脑玩家*/
public class ComputerPlayer extends Player {public ComputerPlayer() {}public ComputerPlayer(String name) {super(name);}@Overridepublic int getInputValue() {//获取一个随机数int value = MyUtil.getRandom(2);//赋给电脑玩家的valuethis.setValue(value);//返回随机数return value;}
}

裁判类:

public class Judger {/*** 根据某一局两个玩家的出拳,判断这局两个玩家的胜负* @param computerValue 电脑玩家* @param userValue 用户玩家* @return 0 和局 1 电脑赢 -1 电脑输*/public int compare(int computerValue,int userValue){if(computerValue == userValue){return 0;}else if(computerValue == 0){//石头if(userValue == 1){//剪刀return 1;}else{//userValue == 2 布return -1;}}else if(computerValue == 1){//剪刀if(userValue == 0){//石头return -1;}else{//userValue == 2//布return 1;}}else{//computerValue ==2//布if(userValue == 0){//石头return 1;}else{//userValue == 1//剪刀return -1;}}}
}

开发游戏类并进行测试:

/*** 启动类*/
public class TestGame {public static void main(String[] args) {GameInterface game = new GuessGame();game.initGame();game.startGame();game.endGame();}
}
package com.bjsxt.service;public interface GameInterface {/*** 初始化游戏*/public void initGame();/*** 开始游戏*/public void startGame();/*** 结束游戏*/public void endGame();
}
private Player computerPlayer; //电脑玩家private Player userPlayer; //用户玩家private Judger judger; //裁判private int count;//局数 当前是第几局@Overridepublic void initGame() {computerPlayer = new ComputerPlayer("阿尔法狗");userPlayer = new UserPlayer("李世石");judger = new Judger();count = 1;}@Overridepublic void startGame() {System.out.println("===========人机猜丁壳大战============");while(true){System.out.println("------------第"+count+++"局-------------");//1.玩家出拳int userValue = userPlayer.getInputValue();//2.电脑玩家出拳int computerValue = computerPlayer.getInputValue();//3.输出双方的出拳System.out.println(userPlayer.getName()+":"+ Constants.NAMES[userValue]+"\t"+computerPlayer.getName()+":"+Constants.NAMES[computerValue]);//4.裁判进行判断int result = judger.compare(computerValue,userValue);//5.根据本局比赛结果修改玩家winCountmodifyWinCount(result);//6.输出本剧比赛结果showResult(result);//7.判断游戏的胜负if(userPlayer.getWinCount()==Constants.WINCOUNT || computerPlayer.getWinCount()==Constants.WINCOUNT){break;}}}

流程又走了一遍,现在自己动手尝试不看源码写一个项目吧!

猜丁壳案例(剪刀石头布)相关推荐

  1. 一个用Shell脚本写的猜丁壳游戏

    为什么80%的码农都做不了架构师?>>> 这几天在学习Linux的Shell脚本,写了一个猜丁壳游戏. 游戏规则:每回合玩家和电脑各出石头.剪子.布中的一个,分别以0.1.2表示,规 ...

  2. 【猜丁壳】小游戏练习

    模拟一次人和电脑之间的游戏:猜丁壳. 石头剪刀布. 要求: 玩家:通过键盘输入选择石头.剪刀.布 电脑:随机获得. 打印玩家和电脑的手势. 然后比较玩家和电脑的手势. 最后打印结果,谁胜利了. < ...

  3. 使用Java实现玩家和电脑猜丁壳

    猜丁壳要求:玩家和电脑进行猜丁壳的游戏,某一方胜利次数达到3即为某方获胜. 1.难点:电脑[随机]出石头.剪刀.布. 解决方法:使用Math.random()实现 Math.random():有返回值 ...

  4. 网教20. 猜-丁-壳!

    "石头.剪刀.布"也叫作"猜丁壳",是猜拳的一种.游戏规则中,石头克剪刀,剪刀克布,布克石头. 红哥哥听闻程设的同学们都是擅长玩猜丁壳的高手,于是他决定举办一场 ...

  5. BITCS2016程序设计 | 20. 猜-丁-壳!

    20. 猜-丁-壳! 成绩 10 开启时间 2016年09月13日 星期二 11:15 折扣 0.8 折扣时间 2016年09月18日 星期日 23:55 允许迟交 否 关闭时间 2016年10月10 ...

  6. Java小游戏 猜丁壳( 石头、剪刀、布)

    用Java实现猜丁壳(石头剪刀布) 我们在控制台输入数字1,2,3分别代表石头,剪刀,布.让后人机(电脑玩家)随机生成石头剪刀布中的一个,比较后得出比分与赢的一方.率先获得5场胜利的玩家获胜. 文章目 ...

  7. Java实现猜丁壳小游戏(猜拳)

    剪刀.石头.布又称"猜丁壳",游戏规则中,石头克剪刀,剪刀克布,布克石头. 常见玩法: 一局定胜负 三局两胜 五局三胜 猜拳小游戏要求:用Java编写一个人机对战的猜拳小游戏.人选 ...

  8. 【JavaLearn】(7)面向对象案例:猜丁壳

    目录 1. 案例设计 2. 搭建案例框架 3. 开发工具类和常量类 4. 开发玩家类和裁判类 5. 开发游戏类并进行测试 1. 案例设计 最终的运行效果: 类的设计:[常量类 和 工具类 在开发中应该 ...

  9. 【JavaLearn】 # (7)面向对象案例:猜丁壳

    1. 案例设计 最终的运行效果: 类的设计:[常量类 和 工具类 在开发中应该必须定义] 游戏的核心业务: 对战一局 用户玩家出手 电脑玩家出手 输出两方的出手 裁判判断谁赢谁输 根据结果修改赢家的 ...

最新文章

  1. 【Python】实现将testlink上的用例指定格式保存至Excel,用于修改上传
  2. 区块链100讲:智能合约审计指南
  3. C# ?(问号)的三个用处
  4. 同学录APP开题报告 2017-12-14
  5. 互联网医院 2020年突出成就_资讯丨2020中国医院互联网影响力排行榜
  6. 数猪第一名!推荐给你的朋友们!猪只盘点挑战赛Baseline分享
  7. 浅析ASP.NET应用ViewState技术
  8. Java若_【JAVA基础】JAVA四种引用(强软若虚)
  9. Mod, Or and Everything HDU - 6950
  10. 如何在CentOS上设置MariaDB Galera Cluster 10.0
  11. 4后期盒子叫什么_考研:什么叫跨考专业?跨考专业的4大原因和存在3个方面的困难...
  12. 微信公众平台获取用户地理位置之开发文档详解
  13. 小米3g刷高格固件_小米路由器3G版padavan老毛子原版固件
  14. STM8L中断线和中断端口使用方法
  15. Netbean 打开报 Cannot locate java installation in specified jdkhome: ***错误
  16. Python编写函数,计算某个员工的奖金发放额度,要求输入员工的营业额,输出对应的奖金总额
  17. Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文最全解读
  18. 一文搞定校验码(奇偶校验,海明,CRC 码)
  19. PS CC 2018 图层
  20. 网络渗透试验一实验报告

热门文章

  1. PATL2_026 小字辈
  2. c语言学习笔记(8)c 语言面试题(二)
  3. Ubuntu Linux 操作系统与实验教程(第2版)微课视频版 习题答案(三)
  4. 应用宝7.0版全新升级 打造宅家休闲娱乐必备品
  5. 【C库函数】strcat函数详解
  6. 世界首度!ArtFin谈针对少儿的“艺术饭+”行动@版权猫ip猫ipMALL.io
  7. 腾讯云域名备案详细说明文档(首次备案)
  8. Modeler玩转数据挖掘——保险公司商品关联与推荐分析
  9. 【数据库】视图,触发器,存储过程
  10. 酷播云的统计分析功能截图