猜拳手势
public class Hand {
//表示石头的值
public static final int HANDVALUE_GUU = 0;
//表示剪刀的值
public static final int HANDVALUE_CHO = 1;
//表示布的值
public static final int HANDVALUE_PAA = 2;
//表示猜拳的三种手势的实例
public static final Hand[] hand = {
new Hand(HANDVALUE_GUU),
new Hand(HANDVALUE_CHO),
new Hand(HANDVALUE_PAA)
};
//表示猜拳中手势所对应的字符串
public static final String[] name = {"石头", "剪刀", "布"};
//猜拳中出的手势的值
private int handValue;
//构造器
private Hand(int handValue) {
this.handValue = handValue;
}
//根据手势的值获取其对应的实例
public static Hand getHand(int handValue) {
return hand[handValue];
}
//如果this胜了h则返回true
public boolean isStrongerThan(Hand h) {
return fight(h) == 1;
}
//如果this输给h则返回-1
public boolean isWeakerThan (Hand h) {
return fight(h) == -1;
}
//计分:平0、胜1、负-1
private int fight(Hand h) {
if (this == h) {
return 0;
} else if ((this.handValue + 1) % 3 == h.handValue) {
return 1;
} else {
return -1;
}
}
//转换为手势值所对应的字符串
public String toString() {
return name[handValue];
}
}
策略接口
public interface Strategy {
public abstract Hand nextHand();
public abstract void study(boolean win);
}
策略——随机出拳
import java.util.Random;
public class WinningStrategy implements Strategy {
//实例化Random
private Random random;
//初始化没赢
private boolean won = false;
//手
private Hand prevHand;
//根据种子值生成随机数的构造器
public WinningStrategy(int seed) {
random = new Random(seed);
}
/**
* 随机换一个手势
*/
@Override
public Hand nextHand() {
// TODO Auto-generated method stub
if (!won) {
prevHand = Hand.getHand(random.nextInt(3));
}
return prevHand;
}
/**
* 获知赢没赢
*/
@Override
public void study(boolean win) {
// TODO Auto-generated method stub
won = win;
}
}
说明
随机化的猜拳肯定不是很优的策略,这是个库存,举个小例子展示一下如何使用策略模式。