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);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能