模拟斗地主洗牌发牌-JAVA

Posted wx63186321c235c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟斗地主洗牌发牌-JAVA相关的知识,希望对你有一定的参考价值。


1.1案例介绍

模拟斗地主洗牌发牌-JAVA_java

按照斗地主的规则,完成洗牌发牌的动作。

具体规则:

1.组装54张扑克牌

2.将54张牌顺序打乱

3.三个玩家参与游戏,三人交替摸牌,,每人17张牌,最后三张留作底牌。

4.查看三人各自手中的牌(按照牌的大小排序)、底牌

手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

1.2案例需求分析

准备牌:

            完成数字与纸牌的映射关系:

            使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。

洗牌:

            通过数字完成洗牌发牌

发牌:

         将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于牌底,剩余牌通过对3取模依次发牌。

         存放的过程中要求数字大小与斗地主规则的大小对应。

         将代表不同纸牌的数字分配给不同的玩家与底牌。

看牌:

        通过Map集合找到对应字符展示。

        通过查询纸牌与数字对应关系,由数字转成纸牌字符串再进行展示。

1.3实现代码步骤

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
/*
* 斗地主洗牌发牌顺序
*/
public class Poker
public static void main(String[] args)
//准备花色
ArrayList<String> color=new ArrayList<String>();
color.add("♠");
color.add("♥");
color.add("♦");
color.add("♣");
//准备数字
ArrayList<String> number=new ArrayList<String>();
Collections.addAll(number, "3","4","5","6","7","8","9","10","J","Q","K","A","2");
//定义一个map集合,用来将数字与每一张牌进行对应
HashMap<Integer, String> map=new HashMap<Integer,String>();

int index =0;
//加入大小王
map.put(index++, "小?");
map.put(index++,"大?");

for (String thisNumber:number)
for (String thisColor:color)
map.put(index++,thisColor+thisNumber);



//一副牌54张的牌ArrayList里边为0-53的数的新牌
ArrayList<Integer> cards=new ArrayList<Integer>();

for (int i =0;i<=53;i++)
cards.add(i);


//洗牌
Collections.shuffle(cards);

//创建三个玩家和底牌
ArrayList<Integer> iPlayer=new ArrayList<Integer>();
ArrayList<Integer> iPlayer2=new ArrayList<Integer>();
ArrayList<Integer> iPlayer3=new ArrayList<Integer>();
ArrayList<Integer> itCards=new ArrayList<Integer>();

//遍历这副洗好的牌,遍历过程中,将牌发到三个玩家和底牌中
for (int i=0;i<cards.size();i++)
if (i>=51)
itCards.add(cards.get(i));
else
if(i%3==0)
iPlayer.add(cards.get(i));
else if(i%3==1)
iPlayer2.add(cards.get(i));
else
iPlayer3.add(cards.get(i));




//对每个人手中的牌排序
Collections.sort(iPlayer);
Collections.sort(iPlayer2);
Collections.sort(iPlayer3);

//对应数字形式的每个人手中的牌,定义字符串形式的牌
ArrayList<String> sPlayer=new ArrayList<String>();
ArrayList<String> sPlayer2=new ArrayList<String>();
ArrayList<String> sPlayer3=new ArrayList<String>();
ArrayList<String> sCards=new ArrayList<String>();

for (Integer key:iPlayer)
sPlayer.add(map.get(key));


for (Integer key:iPlayer2)
sPlayer2.add(map.get(key));

for (Integer key:iPlayer3)
sPlayer3.add(map.get(key));

for (Integer key:itCards)
sCards.add(map.get(key));

//看牌
System.out.println(sPlayer);
System.out.println(sPlayer2);
System.out.println(sPlayer3);
System.out.println(sCards);


 

以上是关于模拟斗地主洗牌发牌-JAVA的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记34(集合框架八:综合案例:模拟斗地主的洗牌发牌)

斗地主

java斗地主扑克 扑克牌 洗牌 发牌 Collection 集合练习

用集合模拟斗地主发牌

用集合模拟斗地主发牌

java集合--模拟斗地主发牌洗牌