1、案例介绍
按照斗地主的规则,完成洗牌发牌的动作
2、具体规则:
- 组装54张扑克牌
- 将54张扑克牌打乱
- 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌
- 查看三人各自手中的牌(按照牌的大小顺序)、底牌
- 手中扑克牌大小顺序:大王、小王、2、A、K、Q、J、10、9、8、7、6、5、4、3
3、需求分析
- 准备牌:完成数字到纸牌的映射关系
- 洗牌:通过数字完成洗牌发牌
- 发牌:将每个人以及底牌放入到一个有序的集合
- 看牌:遍历
代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
public class Poker {
public static void main(String[] args) {
// 扑克牌的集合,键是编号,值是牌
HashMap<Integer, String> poker = new HashMap<>();
// 创建list, 存储编号
List<Integer> pokerNumber = new ArrayList<>();
// 牌的花色
String[] colors = {"黑桃","红桃","梅花","方块"};
// 牌的点数
String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
poker.put(0,"大王");
pokerNumber.add(0);
poker.put(1,"小王");
pokerNumber.add(1);
int index = 2;
for (String number: numbers){
for(String color:colors){
poker.put(index,color+number);
pokerNumber.add(index);
index++;
}
}
// 洗牌:将牌的顺序打乱
Collections.shuffle(pokerNumber);
// 发牌:将牌的编号发给玩家的集合
// 创建三个玩家集合
List<Integer> player1 = new ArrayList<>();
List<Integer> player2 = new ArrayList<>();
List<Integer> player3 = new ArrayList<>();
List<Integer> bottomcards = new ArrayList<>();
for(int i=0;i<pokerNumber.size();i++){
if(i<3){
bottomcards.add(pokerNumber.get(i));
}else if(i % 3 ==0){
player1.add(pokerNumber.get(i));
}else if(i % 3 == 1){
player2.add(pokerNumber.get(i));
}else if(i % 3 == 2){
player3.add(pokerNumber.get(i));
}
}
// 排序
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
// 遍历
show(player1,poker);
show(player2,poker);
show(player3,poker);
show(bottomcards,poker);
}
public static void show(List<Integer> list,HashMap poker){
for(Integer i : list){
Object o = poker.get(i);
System.out.println(o);
}
}
}