– 斗地主扑克牌案例 Java –
1.准备牌
特殊牌:2张(大、小王)
数字牌:36张(2~10)
字母牌:16张(JQKA)
四种花色:♥ ♠ ♣ ♦
- 定义一个集合/数组,储存四种花色
- 定义一个集合/数组,储存基本牌,泛型使用String(因为JQKA不是整数)
- 定义一个双列集合map 用于将色号与牌号 连接在一起
- 定义一个纸牌的编号,并将编号赋予给纸牌
2.洗牌
使用Collection.shuffle 打乱纸牌的顺序
3.摸牌
要求:每个人获得17张牌 ,轮流发牌使用for循环 ,剩余三张牌作为底牌加入if 判断语句。
注意:集合的索引是从0开始的,54张牌的索引为(0~53)
4.排序
使用Collection.sort 对分到的牌进行排序
5.看牌
排序后,获得序号索引对应的牌,打印集合
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
public class PokerGame {
public static void main(String[] args) {
// 1.准备牌
// 定义一个储存四种花色的ArrayList集合
ArrayList<String> color = new ArrayList<>();
color.add("♥");
color.add("♠");
color.add("♣");
color.add("♦");
// 定义一个储存基本牌的ArrayList集合,因为 JQKA 的存在 泛型使用String
ArrayList<String> number = new ArrayList<>();
for (int i = 2; i <=10 ; i++) {
number.add(i+"");// 将数字类型的i 变成字符串类型
}
number.add("J");
number.add("Q");
number.add("K");
number.add("A");
// 定义一个双列集合 map 用于将 色号 与 牌号 连接在一起
HashMap<Integer, String> map = new HashMap<>();
// 定义一个纸牌的 编号
int index=0;
for(String thisNumber : number){
for(String thisColor : color){
map.put(index++,thisColor+thisNumber);// 将编号 赋予纸牌
}
}
map.put(index++,"大☠");
map.put(index++,"小☠");
System.out.println(map);
// 2. 洗牌
ArrayList<Integer> cards =new ArrayList<>();
for (int i = 0; i <= 53; i++) {
cards.add(i); // 0~53
}
System.out.println("默认的:"+cards);
Collections.shuffle(cards);// 打乱牌的顺序
System.out.println("洗牌后:"+cards);
// 3.发牌
// 创建三个玩家和底牌的集合
ArrayList<Integer> player1 =new ArrayList<>();
ArrayList<Integer> player2 =new ArrayList<>();
ArrayList<Integer> player3 =new ArrayList<>();
ArrayList<Integer> lowCards=new ArrayList<>();
for (int i = 0; i < cards.size(); i++) {
// 轮流发牌
if (i>=51){
lowCards.add(cards.get(i)); // 三张底牌
}else {
if (i % 3 ==0){
player1.add(cards.get(i));// 给玩家一得到的牌
}else if (i % 3 ==1){
player2.add(cards.get(i));// 给玩家二得到的牌
}else{
player3.add(cards.get(i)); // 给玩家三得到的牌
}
}
}
// 4.排序
// 将分到的牌进行排序
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
System.out.println("_______________________________________________________________________________");
// 5.看牌
ArrayList<String> splayer1 =new ArrayList<>();
ArrayList<String> splayer2 =new ArrayList<>();
ArrayList<String> splayer3 =new ArrayList<>();
ArrayList<String> slowCards=new ArrayList<>();
//获得序号 对应的 牌
for (Integer key : player1){
splayer1.add(map.get(key));
}
for (Integer key : player2){
splayer2.add(map.get(key));
}
for (Integer key : player3){
splayer3.add(map.get(key));
}
for (Integer key : lowCards){
slowCards.add(map.get(key));
}
System.out.println("——————————————————————————————————激情斗地主————————————————————————————————————");
System.out.println("地主:"+splayer1);
System.out.println("农民:"+splayer2);
System.out.println("村民:"+splayer3);
System.out.println("底牌:"+slowCards);
}
运行结果如下:
扫描二维码关注公众号,回复:
9993579 查看本文章
Mr.kang