猜丁壳案例(剪刀石头布)
效果演示:
===========人机猜丁壳大战============
------------第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;}}}
流程又走了一遍,现在自己动手尝试不看源码写一个项目吧!
猜丁壳案例(剪刀石头布)相关推荐
- 一个用Shell脚本写的猜丁壳游戏
为什么80%的码农都做不了架构师?>>> 这几天在学习Linux的Shell脚本,写了一个猜丁壳游戏. 游戏规则:每回合玩家和电脑各出石头.剪子.布中的一个,分别以0.1.2表示,规 ...
- 【猜丁壳】小游戏练习
模拟一次人和电脑之间的游戏:猜丁壳. 石头剪刀布. 要求: 玩家:通过键盘输入选择石头.剪刀.布 电脑:随机获得. 打印玩家和电脑的手势. 然后比较玩家和电脑的手势. 最后打印结果,谁胜利了. < ...
- 使用Java实现玩家和电脑猜丁壳
猜丁壳要求:玩家和电脑进行猜丁壳的游戏,某一方胜利次数达到3即为某方获胜. 1.难点:电脑[随机]出石头.剪刀.布. 解决方法:使用Math.random()实现 Math.random():有返回值 ...
- 网教20. 猜-丁-壳!
"石头.剪刀.布"也叫作"猜丁壳",是猜拳的一种.游戏规则中,石头克剪刀,剪刀克布,布克石头. 红哥哥听闻程设的同学们都是擅长玩猜丁壳的高手,于是他决定举办一场 ...
- BITCS2016程序设计 | 20. 猜-丁-壳!
20. 猜-丁-壳! 成绩 10 开启时间 2016年09月13日 星期二 11:15 折扣 0.8 折扣时间 2016年09月18日 星期日 23:55 允许迟交 否 关闭时间 2016年10月10 ...
- Java小游戏 猜丁壳( 石头、剪刀、布)
用Java实现猜丁壳(石头剪刀布) 我们在控制台输入数字1,2,3分别代表石头,剪刀,布.让后人机(电脑玩家)随机生成石头剪刀布中的一个,比较后得出比分与赢的一方.率先获得5场胜利的玩家获胜. 文章目 ...
- Java实现猜丁壳小游戏(猜拳)
剪刀.石头.布又称"猜丁壳",游戏规则中,石头克剪刀,剪刀克布,布克石头. 常见玩法: 一局定胜负 三局两胜 五局三胜 猜拳小游戏要求:用Java编写一个人机对战的猜拳小游戏.人选 ...
- 【JavaLearn】(7)面向对象案例:猜丁壳
目录 1. 案例设计 2. 搭建案例框架 3. 开发工具类和常量类 4. 开发玩家类和裁判类 5. 开发游戏类并进行测试 1. 案例设计 最终的运行效果: 类的设计:[常量类 和 工具类 在开发中应该 ...
- 【JavaLearn】 # (7)面向对象案例:猜丁壳
1. 案例设计 最终的运行效果: 类的设计:[常量类 和 工具类 在开发中应该必须定义] 游戏的核心业务: 对战一局 用户玩家出手 电脑玩家出手 输出两方的出手 裁判判断谁赢谁输 根据结果修改赢家的 ...
最新文章
- 【Python】实现将testlink上的用例指定格式保存至Excel,用于修改上传
- 区块链100讲:智能合约审计指南
- C# ?(问号)的三个用处
- 同学录APP开题报告 2017-12-14
- 互联网医院 2020年突出成就_资讯丨2020中国医院互联网影响力排行榜
- 数猪第一名!推荐给你的朋友们!猪只盘点挑战赛Baseline分享
- 浅析ASP.NET应用ViewState技术
- Java若_【JAVA基础】JAVA四种引用(强软若虚)
- Mod, Or and Everything HDU - 6950
- 如何在CentOS上设置MariaDB Galera Cluster 10.0
- 4后期盒子叫什么_考研:什么叫跨考专业?跨考专业的4大原因和存在3个方面的困难...
- 微信公众平台获取用户地理位置之开发文档详解
- 小米3g刷高格固件_小米路由器3G版padavan老毛子原版固件
- STM8L中断线和中断端口使用方法
- Netbean 打开报 Cannot locate java installation in specified jdkhome: ***错误
- Python编写函数,计算某个员工的奖金发放额度,要求输入员工的营业额,输出对应的奖金总额
- Modbus 的RTU、ASCII、TCP傻傻搞不清楚?一文最全解读
- 一文搞定校验码(奇偶校验,海明,CRC 码)
- PS CC 2018 图层
- 网络渗透试验一实验报告