java课设之 斗地主发牌器.

题目要求:

题目3.  斗地主洗发牌

任务描述:利用控制台编写一个斗地主洗牌发牌程序,要求按照斗地主的规则完成洗牌发牌的过程。一副扑克总共有54张牌,牌面由花色和数字组成(包括2-10、J、Q、K、A)组成,花色有黑桃、红桃、方块、梅花四种,以及小王和大王。斗地主游戏共有三位玩家参与,首先将这54张牌的顺序打乱每人轮流摸一次牌,剩余3张留作底牌,然后在控制台打印三位玩家的牌和三张底牌。

技术要求:要求使用List集合和Map集合实现洗牌、发牌的过程。

(1)创建两个ArrayList集合作为花色集合与数字集合,由于牌面是由花色(包括♠、♥、♦、♣花色)和数字(包括2-10、J、Q、K、A)两部分组成,存储时需要注意。比10大的牌的数字用J、Q、K表示,1用A表示。

(2)将花色集合与数字集合这两个循环进行嵌套循环,将花色与数字组合,形成52张牌,并赋予其编号。将组合后的牌存放到一个HashMap集合中,集合的Key值是编号,value值是组装完成的纸牌。由于大王、小王这两张牌的组装规则不一致,需单独使用add()方法将这两张牌加入到HashMap集合中。

(3)创建一个数字集合,用这个数字集合代替纸牌完成洗牌和发牌操作。由于纸牌的数量是54张,所以创建集合范围是0~53。  

(4)可以使用Collection类的shuffle()方法完成打乱数字集合的操作,实现洗牌效果。由于只有3个人,所以可以使用for循环,通过将数字对3取余的方法,将代表不同纸牌的数字分配给不同人与底牌,实现随机发牌的效果。

(5)洗牌和发牌结束后,可以通过Collection类的sort()方法完成排序,之后通过循环HashMap集合,根据数字查找对应的纸牌字符串,并存入创建的字符串集合中,最后展示字符串集合。

 代码:

package dou;

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

public class doudizhu {
    public static void main(String[] args) {
        ArrayList<String> color=new ArrayList<>();//花色集合
        color.add("黑桃");
        color.add("红桃");
        color.add("方块");
        color.add("梅花");

        ArrayList<String> number= new ArrayList<>();//数值集合
        for (int i=2;i<=10;i++){
            number.add(i+"");
        }
        number.add("J");
        number.add("Q");
        number.add("K");
        number.add("A");

        HashMap<Integer,String>  map=new HashMap<>();//给每张牌一个序号
        int index=0;
        for (String thisNumber:number){//加入52张牌
            for (String thisColor:color){
                map.put(index++,thisColor+thisNumber);
            }
        }
        map.put(index++,"小王");
        map.put(index++,"大王");
        ArrayList<Integer> cards=new ArrayList<>();
        for (int i=0;i<54;i++){
            cards.add(i);
        }
        Collections.shuffle(cards);//将数组进行随机打乱
        ArrayList<Integer> player1= new ArrayList<>();
        ArrayList<Integer> player2= new ArrayList<>();
        ArrayList<Integer> player3= new ArrayList<>();
        ArrayList<Integer> secretcards= new ArrayList<>();

        for (int i=0;i<cards.size();i++){//将打乱后的54张牌分出去.
            if (i>=51){//后三张牌加入底牌
                secretcards.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));
                }
            }
        }
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        ArrayList<String> player11=new ArrayList<>();//存储最终结果
        ArrayList<String> player22=new ArrayList<>();
        ArrayList<String> player33=new ArrayList<>();
        ArrayList<String> secretcardss=new ArrayList<>();
        for (Integer Key:player1){
            player11.add(map.get(Key));//通过哈希值找到名词并加入
        }
        for (Integer Key:player2){
            player22.add(map.get(Key));
        }
        for (Integer Key:player3){
            player33.add(map.get(Key));
        }
        for (Integer key:secretcards){
            secretcardss.add(map.get(key));
        }
        System.out.println("玩家1:"+player11);
        System.out.println("玩家2:"+player22);
        System.out.println("玩家3:"+player33);
        System.out.println("底牌:"+secretcardss);
    }
}

posted @   冷月半明  阅读(55)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示