Java斗地主扑克牌案例-康嘉鑫

– 斗地主扑克牌案例 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

发布了2 篇原创文章 · 获赞 1 · 访问量 48

猜你喜欢

转载自blog.csdn.net/weixin_44860575/article/details/103214147
今日推荐