斗地主小游戏

步骤

  • 准备牌
  • 洗牌
  • 发牌

控制台操作

运行页面

package com.atguigu.demo1.doudizhu1;

public class App {
    public static void main(String[] args) {
        new PokerGame();

    }
}


洗发牌

package com.atguigu.demo1.doudizhu1;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;

public class PokerGame {
static ArrayList<String> list = new ArrayList<>();//牌盒
//创建一个集合,用来添加牌的价值
static HashMap<String,Integer> hm = new HashMap<>();
// 使用静态代码块保证牌只有一副
static{
String[] color = {"♥","♦","♣","♠"};
String[] number = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

for (int i = 0; i < color.length; i++) {
for (int j = 0; j < number.length; j++) {
list.add(color[i]+number[j]);
}
}
list.add(" 小王");
list.add(" 大王");
// 给牌盒中的每一张牌添加价值
hm
.put("小王",100);
hm.put("大王",101);
for (int i = 0; i < number.length; i++) {
hm.put(number[i],i+3);
}
System.out.println("牌盒中的牌和价值为:"+hm);
}

public PokerGame() {//空参构造
Collections.shuffle(list);//洗牌
// 发牌
ArrayList<String> player1 = new ArrayList<>();
ArrayList<String> player2 = new ArrayList<>();
ArrayList<String> player3 = new ArrayList<>();
ArrayList<String> dipai = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
if (i >= list.size() - 3) {
dipai.add(list.get(i));
} else if (i % 3 == 0) {
player1.add(list.get(i));
} else if (i % 3 == 1) {
player2.add(list.get(i));
} else if (i % 3 == 2) {
player3.add(list.get(i));
}
}
order(player1);
order(player2);
order(player3);
order(dipai);
// 打印玩家牌和底牌
System.out.println("玩家1:" + player1);
System.out.println("玩家2:" + player2);
System.out.println("玩家3:" + player3);
System.out.println("底牌: " + dipai);
}

public void order(ArrayList<String> list){
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//o1表示当前要插入到有序序列中的牌
//o2表示有序序列中的牌
String color1=o1.substring(0,1);
int value1=getValue(o1);
String color2=o2.substring(0,1);
int value2=getValue(o2);
int result=value1-value2;
if (result==0){//如果价值相等,比较花色
return color1.compareTo(color2);
}
return result;
}
});
}
public int getValue(String poker){
String number1=poker.substring(1);
if (hm.containsKey(number1)){//如果牌面是数字或JQKA2
return hm.get(number1);
}else {//如果牌面是小王或大王
return Integer.parseInt(number1);
}
}
}

运行结果