import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; /** * author:gongyu * description:only one */ public class GuanDan { public int playerNumber; //当前第一个出牌人的序号 0,1,2,3 public int [] laiZi = new int[2]; // laizi[0]记录着玩家0和玩家2的级数,laizi[1]记录着玩家1和玩家3的级数 public int ownerOfLaiZi; //0表示当前是打的是玩家0和玩家2的级数,1表示当前是打的是玩家1和玩家3的级数 public int gameNumber; ArrayDataofGuanDan[] player; //这个类是很重要的类,这个类变量中使用到的类也很重要,除此以外,其他类不是很重要(都是我写代码过程中检验动作集合个数的) public GuanDan(){ playerNumber = 0; //当前是哪一个人出牌,初始为0 laiZi[0] = 2; laiZi[1] = 2;//初始的时候,级数都为2 ownerOfLaiZi = 0; //初始的为打的是玩家0和玩家2的级数 gameNumber = 1; // 当前玩的第几局,初始为1 player = new ArrayDataofGuanDan[4]; //定义4个玩家 } public static void main(String[] args) { GuanDan gameGuanDan = new GuanDan(); // 新的一局,就需要重新定义一个gameGuanDan // 创建一副扑克牌,编号从0到107 List poker = new ArrayList<>(); for (int i = 0; i < 108; i++) { poker.add(i); } // 打乱扑克牌的顺序 Collections.shuffle(poker); // 随机选择一张牌,用来确定第一个出牌的人 Random random = new Random(); int firstCardIndex = random.nextInt(108); // 发牌 for (int i = 0; i < poker.size(); i++) { int card = poker.get(i); gameGuanDan.player[i % 4].cs.setCard(card); if (gameGuanDan.gameNumber == 1 && i == firstCardIndex) { gameGuanDan.ownerOfLaiZi = (i % 4) % 2; gameGuanDan.playerNumber = i % 4; } } //牌发完了,就开始打牌 //根据已有的方法,自行补充 //四个人都有了自己的牌,每一个玩家筛选自己的动作集合索引 //第一个人出牌,后面三个人根据上一个人出的牌,遍历自己以筛选过的动作集合索引,进行出牌 //当连续三个人过牌的时候(这个判断功能没写),重新筛选自己的动作集合 //以此往复,游戏结束 //一局结束后, gameGuanDan.gameNumber++; for(int i=0;i<4;i++){ // 充实初始化每一个玩家的手牌,全部变为0 gameGuanDan.player[i].cs.resetValues(); } } }