游戏规则:参与人数1人以上,谁的甲虫最先完整谁就胜出。初始的甲虫不具有任何器官,而完整的甲虫具有躯干、头部、6条腿、两只眼、两只触角、一条尾巴。
玩法:轮你掷骰子时,按如下规定采取动作:
1:如果甲虫已有一处躯干,传骰子给下一位。否则,添加一个躯干,并再掷一次。
2:如果甲虫已有头部或没有躯干,传骰子。否则,添加一个头部,并再掷一次。
3:如果甲虫已有6条腿或没有躯干,传骰子,否则,添加两条腿,并再掷一次。
4:如果甲虫已有两只眼或没有头部,传骰子。否则,添加一只眼睛,并再掷一次。
5:如果甲虫已有两根触角或没有头部,传骰子,否则,添加一根触角,并再掷一次。
6:如果甲虫已有一条尾巴或没有躯干,传骰子。否则,添加一条尾巴,并再掷一次。
第一步:先确定这类,有甲虫类、骰子类、甲虫游戏类。
class Beetle { //甲虫类 } class Die { //骰子类 } class BeetleGame { //甲虫游戏类 }
第二步:确定类的字段和方法。甲虫类字段有:躯干(body)、头部(head)、眼睛(eyes)、触角(feelers)、腿(legs)、尾巴(tail)。这里只取躯干和眼睛做个示例。 方法有:构造函数、躯干添加是否成功(addBody())、眼睛添加是否成功(addEye())、甲虫是否完整(isComplete())。
骰子类字段有:最上面的点数(topFace),方法有:构造函数、访问器(getTopFace())、修改器(roll())。
甲虫游戏类字段有:两只甲虫(bettle)、一只骰子(die)、一个按键掷骰子控制器(INPUT),方法有:构造函数、掷骰子判断是否要传骰子(takeTurn)、玩游戏(play())。
如下类UML图表示:
Beetle | Die | BeetleGame |
body:boolean eyes:int |
topFace:int | INPUT:java.util.Scanner beetle1:Beetle beetle2:Beetle die:Die |
Beetle() addBody():boolean addEye():boolean isComplete():boolean |
Die() getTopFace():int roll():void |
BeetleGame() play():void takeTurn(int,Beetle):boolean main(String[]):void |
第三步:Beetle类的实现
class Beetle { private boolean body; private int eyes; public void addBody() { if(body) { return false; //如果已有一个躯干,则添加躯干失败 } else { body = true; //如没有,则添加一个躯干 return true; //添加躯干成功 } } public Beetle() { body = false; eyes = 0; } public void addEye() { if(head && eyes < 2) { //如果有头部且眼睛没有两只,对应点数4规则 eyes++; //添加一只眼睛 return true; //添加眼睛成功 } else { return false; //添加眼睛失败 } } }
Die类的实现
class Die { private int topFace; public Die() { this.topFace = 1; //初始上面点数为1;不然默认就为0了. } public int getTopFace() { return this.topFace; } public void roll() { this.topFace = ((int)Math.random()*6)+1; //掷骰子当然要是随机方法了。采用Math类的random方法,由于它返回的是一个最小值为0,最大值小于1的双精度数,故*6之后还要加1. } }
BeetleGame类的实现
public class BeetleGame { private java.util.Scanner INPUT = java.util.Scanner(System.in); //定义按键掷骰子的控制器INPUT private Beetle beetle1; private Beetle beetle2; private Die die; public BeetleGame() { beetle1 = new Beetle(); beetle2 = new Beetle(); //构造两只甲虫 die = new Die(); //构造一只骰子 } public boolean takeTurn(int player,Beetle beetle) { System.out.println("\n现在拿骰子的是玩家"+player+"你目前的甲虫情况是:"); System.out.println(beetle); System.out.println("按回车键掷骰子:"); INPUT.nextLine(); //捕获键盘信号 roll(); System.out.println("你掷到"+die.getTopFace()+"点"); switch(die.getTopFace) { //按规则采取行动 case 1: System.out.println("是否添加躯干"); return beetle.addBody(); ... case 4: System.out.println("是否添加眼睛"); return beetle.addEye(); } } public void play() { int player = 1; Beetle beetle = beetle1; //第一次掷骰子初始为第一个玩家 while(!isComplete()) { //甲虫不完整 if(!(takeTurn(player,beetle))) { //传骰子给下一个玩家 if(player == 1) { player = 2; beetle = beetle2;} } else {player = 1;beetle = beetle1;} } System.out.println("\n恭喜!玩家"+player+"获得了胜利!"); System.out.println("就是这只完整的甲虫"+beetle); } public static void main(String[] args) { System.out.println("欢迎玩甲虫游戏!"); BeetleGame game = new BeetleGame(); game.play(); } }