编程语言
首页 > 编程语言> > java-(如何操作)使用ENUM进行扑克定位

java-(如何操作)使用ENUM进行扑克定位

作者:互联网

假设我创建了以下类:

public enum Position {

   Dealer(1), //1
   SB(2),     //2
   BB(3),     //3
   UTG(4),    //4
   UTG1(5),   //5
   UTG2(6),   //6
   UTG3(7),   //7
   HJ(8),     //8
   CO(9);     //9

   //Constructor
   int code;

   Position(int code) {
     this.code = code;
   }
}

如何使用括号中的数字操作ENUM?
例如,在我的扑克桌课程中,我发起了新玩家.每个玩家都通过位置参数.
所以最初

player[1].getPosition() = Dealer  
player[2].getPosition() = SB  
player[3].getPosition() = BB   
etc etc etc 

移交结束后,所有位置都需要移一.
    因此玩家[1]需要拥有CO(9)位置.
    玩家[2]需要拥有Dealer(1)的位置.
    玩家[3]需要拥有SB(2)位置.
    等

我知道我可以使用一个循环遍历数字1到9的for循环,但是如何基于PositionENUM中的整数访问位置?

编辑:
我已经有了吸气剂和吸气剂.

    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }

然而,接球手和接球手并不能为我提供每轮比赛中正确改变球员位置的机会.

在每个下注回合之后,我需要更改每个玩家的位置,因此我需要弄清楚如何在每个下注回合之后移动每个玩家的ENUM位置.

解决方法:

可以根据其代码值选择一个枚举实例.您可以使用静态Map< Integer,Position>去做这个.唯一的陷阱是必须将其容纳在静态内部类中:

public enum Position {

    ...

    Position(int code) {
        this.code = code;
        MapHolder.BY_CODE.put(code, this);
    }

    private static class MapHolder {
        private static final Map<Integer, Position> BY_CODE = new HashMap<Integer, Position>();
    }

    public static Position findByCode(int code) {
        return MapHolder.BY_CODE.get(code);
    }

我还建议委派将下一个职位枚举到枚举本身的逻辑.只需将此方法添加到Position枚举即可:

public Position nextPosition() {
     return findByCode((this.code + 1) % Position.values().length);
}

然后,您的客户端代码可以简单地运行:

for (Player player : players) {
    player.setPosition(player.getPosition().nextPosition());
}

标签:poker,enums,java
来源: https://codeday.me/bug/20191208/2088503.html