java版 简易斗地主(二)

Room类 主入口

sort为洗牌顺序,主要是为了方便测试bug,可以重现牌局
landowner 是 0,1,2 三个玩家 谁为地主.

public class Room {

    public static void main(String[] args) {
        ArrayList<Player> player = new ArrayList<Player>();
        player.add(new Player("P1"));
        player.add(new Player("P2"));
        player.add(new Player("P3"));

        String sort = "48,31,41,43,28,19,32,51,20,29,27,60,17,12,33,59,38,55,61,57,10,22,39,34,42,24,53,37,21,13,58,23,44,15,45,18,16,49,40,25,26,30,63,47,36,52,11,14,46,54,62,56,50,35";
        int landowner = 1;
//        new Game().start(player,sort,landowner);
        new Game().start(player);
    }
}

Game类

负责生成54张扑克,和洗牌,分配地主.
以及 最后 打印整个牌局.

public class Game {

    private LinkedHashMap<String, Poker> _unvalidPoker = new LinkedHashMap<String, Poker>();
    private LinkedHashMap<String, Poker> _underPoker = new LinkedHashMap<String, Poker>();
    private ArrayList<Loop> _record = new ArrayList();

    public void start(ArrayList<Player> player) {
        start(player,null,-1);
    }
    public void start(ArrayList<Player> player, String sort, int num) {

        dealPoker(player,makePoker(sort));

        Player landowner = makeLandowner(player,num);

        Player winer = beginLoop(landowner,player);

        end(winer);
        System.out.println("process:");
        for (Loop loop : _record) {
            loop.printLog();
        }
        end(winer);
    }

    public Player beginLoop(Player landowner, ArrayList<Player> player) {
        Loop loop = null;
        Player user = landowner;
        for (int i = 1; i < 11; i++) {
            loop = new Loop(i);
            user = loop.start(user,player);
            _record.add(loop);
            if(isFinalWiner(user)) {
                break;
            }
        }
        return user;
    }

    public boolean isFinalWiner(Player user) {
        return user.getHandPoker().keySet().size()<=0;
    }

    public void end(Player player) {
        System.out.println(player.getFullName()+" win!!!");
    }

    public ArrayList<Poker> makePoker(String sort) {
        Map<String, Poker> map = new HashMap<>();
        Poker poker = null;
        int index = 10;
        for (String s : Poker.TYPES) {
            for (int i = 0; i < Poker.LABELS.length; i++) {
                poker = new Poker(index++, Poker.VALUES[i], Poker.LABELS[i],s);
                map.put(poker.getId(),poker);
            }
        }

        poker = new Poker(index++).bigKing();
        map.put(poker.getId(),poker);
        poker = new Poker(index++).smallKing();
        map.put(poker.getId(),poker);

        ArrayList<Poker> idList = new ArrayList<>();

        if(StringUtils.isNotBlank(sort)) {
            String[] ids = StringUtils.split(sort,",");
            for (String id : ids) {
                if(StringUtils.isBlank(id)) {
                    continue;
                }
                idList.add(map.get(id));
            }
        }else {
            idList.addAll(map.values());
            Collections.shuffle(idList);
        }
        System.out.print("config: ");
        for (Poker p : idList) {
            System.out.print(p.getId());
            System.out.print(",");
        }
        System.out.println();
        return idList;
    }

    public void dealPoker(ArrayList<Player> player, ArrayList<Poker> list) {
        for (int i = 0; i < list.size(); i++) {
            if (i >= list.size() - 3) {
                _underPoker.put(list.get(i).getId(),list.get(i));
            } else {
                player.get(i % 3).getPoker(list.get(i));
            }
        }
    }

    public Player makeLandowner(ArrayList<Player> player, int num) {
        if(num<0) {
            Random r = new Random();
            num = r.nextInt(3);
        }
        Player landowner = player.get(num);
        landowner.landowner();

        Iterator<String> iterator = _underPoker.keySet().iterator();
        while (iterator.hasNext()) {
            landowner.getPoker(_underPoker.get(iterator.next()));
        }

        for (Player p1 : player) {
            p1.sort();
            System.out.print(p1.getName());
            p1.printLabel();
        }

        return landowner;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值