斗地主发牌
普遍看见于微信小程序上面各种各样的斗地主,我这里展示无序发牌与未排序的三个玩家的牌
/**
* 斗地主发牌
* 按照斗地主的规则,完成洗牌发牌的动作。
* 具体规则:
* 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
*/
代码
我们在静态时准备一个牌盒
//准备牌盒
static ArrayList<String> list=new ArrayList<>();
然后准备54张牌,将其放入盒中,这里牌前面的小符号可以在网上找自己喜欢的或者直接输入法自带,这里主要就是牌的花色与牌的号数相匹配,变成四个红桃,黑桃,方块,爱心
static {
String[] colorArr={"♠","♥","♣","♦"};
String[] numberArr={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
for(String number:numberArr) {
for (String color : colorArr) {
list.add(color + number);
}
}
list.add("joker");
list.add("JOKER");
}
然后进行洗牌和发牌
public static void main(String[] args) {
//洗牌
System.out.println("未洗牌:"+list);
Collections.shuffle(list);
System.out.println("洗牌后:"+list);
ArrayList<String> DiPai=new ArrayList<>();
ArrayList<String> AA=new ArrayList<>();
ArrayList<String> BB=new ArrayList<>();
ArrayList<String> CC=new ArrayList<>();
for (int i = 0; i <list.size() ; i++) {
String poker=list.get(i);
if(i <= 2){
DiPai.add(poker);
continue;
}
if(i % 3 == 0){
AA.add(poker);
}else if(i % 3 == 1){
BB.add(poker);
}else{
CC.add(poker);
}
}
System.out.println("底牌为:"+ DiPai);
System.out.println("石原里美:"+AA);
System.out.println("长泽雅美:"+BB);
System.out.println("桥本环奈:"+CC);
}
在这里想象准备四个盒子(底牌盒子和分别三个玩家盒子),随机三张给底牌,剩下的牌按照按照51的三种分法分给三个不同玩家,这样也保证了三个不同玩家得到的牌是公正的
结果展示
未洗牌:[♠3, ♥3, ♣3, ♦3, ♠4, ♥4, ♣4, ♦4, ♠5, ♥5, ♣5, ♦5, ♠6, ♥6, ♣6, ♦6, ♠7, ♥7, ♣7, ♦7, ♠8, ♥8, ♣8, ♦8, ♠9, ♥9, ♣9, ♦9, ♠10, ♥10, ♣10, ♦10, ♠J, ♥J, ♣J, ♦J, ♠Q, ♥Q, ♣Q, ♦Q, ♠K, ♥K, ♣K, ♦K, ♠A, ♥A, ♣A, ♦A, ♠2, ♥2, ♣2, ♦2, joker, JOKER]
洗牌后:[♣10, ♣A, JOKER, ♥5, ♠J, ♠10, ♦5, ♥4, ♣9, ♥Q, ♦A, ♦9, ♠5, ♦6, ♠2, ♥3, ♦8, ♥A, ♥2, ♠6, ♥8, ♥K, ♦4, ♦Q, ♠4, ♣3, ♦K, ♥10, ♥9, ♣6, ♠K, ♣8, ♦7, ♠A, ♣K, ♦J, joker, ♠8, ♦2, ♠9, ♥J, ♥7, ♣7, ♣J, ♠Q, ♣5, ♣4, ♦3, ♥6, ♣2, ♠7, ♠3, ♦10, ♣Q]
底牌为:[JOKER, ♣10, ♣A]
石原里美:[joker, ♠3, ♠4, ♠5, ♠9, ♠A, ♠K, ♣5, ♣7, ♥10, ♥2, ♥3, ♥5, ♥6, ♥K, ♥Q, ♦5]
长泽雅美:[♠6, ♠8, ♠J, ♣2, ♣3, ♣4, ♣8, ♣J, ♣K, ♥4, ♥9, ♥J, ♦10, ♦4, ♦6, ♦8, ♦A]
桥本环奈:[♠10, ♠2, ♠7, ♠Q, ♣6, ♣9, ♣Q, ♥7, ♥8, ♥A, ♦2, ♦3, ♦7, ♦9, ♦J, ♦K, ♦Q]
如果嫌弃这是使用ArrayList集合是实现的无序发牌,
可以去尝试一下hashmap,ArrayList,TreeSet集合实现的有序发牌
public class test07Collections {
//准备牌盒
static HashMap<Integer,String> hashmap=new HashMap<Integer,String>();
static ArrayList<Integer> list=new ArrayList<>();
//准备牌 4*13+2=54
static {
int index=0;
String[] colorArr={"♠","♥","♣","♦"};
String[] numberArr={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
for(String number:numberArr) {
for (String color : colorArr) {
String poker=color+number;
hashmap.put(index,poker);//将每张牌对应的编号存储在hashmap集合的键中
list.add(index);//将每张牌的编号同样存储在arraylist集合中
index++;//每存储一张牌,编号加1
}
}
hashmap.put(index,"JOKER");
list.add(index);
index++;//编号加1
hashmap.put(index,"joker");
list.add(index);
}
public static void main(String[] args) {
//洗牌
Collections.shuffle(list);
TreeSet<Integer> AA = new TreeSet<Integer>();//玩家1
TreeSet<Integer> BB = new TreeSet<Integer>();//玩家2
TreeSet<Integer> CC = new TreeSet<Integer>();//玩家3
TreeSet<Integer> DiPai = new TreeSet<Integer>();//底牌
for (int i = 0; i < list.size(); i++) {
if (i <= 2) {
DiPai.add(list.get(i));
continue;
}
if (i % 3 == 0) {
AA.add(list.get(i));
} else if (i % 3 == 1) {
BB.add(list.get(i));
} else {
CC.add(list.get(i));
}
}
总结
斗地主发牌java有很多写法,就看你这样简单明了的写出一个好的程序,我这个都有点繁琐,感觉不怎么好看,希望我这个对您写斗地主发牌有点参照