Java实现简易斗地主

声明:

1.此简易程序只包含,定义牌,洗牌,发牌三步,至于游戏环节会在后续的博客中给出。

2.此程序采用的存储结构为集合,如果想用数组存储也可以,自己转化一下就可以了。

 

简易斗地主

1.组装牌

首先,我们需要一个集合pokerBox用于存放54张扑克牌。54张扑克牌可分为两张特殊牌(大王,小王)和52张普通牌,其中普通牌均由花色和牌号两部分组成。因此,对于52张普通牌的存储可以通过定义两个集合——颜色pokeColor与数字pokeNums,并循环嵌套遍历两个集合来存储。

代码如下:

//组装54张牌
        ArrayList pokerBox = new ArrayList();

        ArrayList pokerColor = new ArrayList();//花色
        pokerColor.add("♠");
        pokerColor.add("♥");
        pokerColor.add("♣");
        pokerColor.add("♦");
        ArrayList pokeNums = new ArrayList();//点数
        pokeNums.add("A");
        pokeNums.add("J");
        pokeNums.add("K");
        pokeNums.add("Q");
        for (int i=2 ; i<=10; i++)
        {
            pokeNums.add(""+i);
        }

此时我们已经准备好了组装54张牌的前提,下面进行组装,其中大王与小王单独存储

//组装特殊数据
        pokerBox.add("大王");
        pokerBox.add("小王");

        //组装其他52张牌
        for(String color : pokerColor)
        {
            for(String num:pokeNums)
            {
                String temp = color + num;
                pokerBox.add(temp);
            }
        }

这样我们就完成了54张牌的组装.

 

2.洗牌

洗牌部分较为简单,用到了Collections下的shuffle函数,该函数用法简单,在此不过多说明,如果不太明白可以直接查询该函数来得到详细信息。

洗牌部分代码如下:

//洗牌
        Collections.shuffle(pokerBox);

如果大家在此想查看当前洗牌的结果,可以通过如下语句查看:

System.out.println(pokerBox);

 

3.发牌

斗地主中,发牌结束后牌将被分为四堆:底牌堆(dipai),第一个人(theFirst),第二个人(theSecond),第三个人(theThird),我们将这四组分别定义为一个集合,然后分别存储。

集合是一种可以通过角标索引的存储结构,因此我们可以通过控制角标(index)来获取元素。

因为共有三个人,所以可以通过index%3求余的结果来对应三个人的手牌。

代码如下:

//发牌
        ArrayList diPai = new ArrayList();
        ArrayList theFirst = new ArrayList();
        ArrayList theSecond = new ArrayList();
        ArrayList theThird = new ArrayList();

        for(int index = 0;index < pokerBox.size();index++)
        {
            if(index >= 51)
            {diPai.add(pokerBox.get(index));}
            else
            {
                if(index % 3 == 0)
                {theFirst.add(pokerBox.get(index));}
                else
                {
                    if(index % 3 == 1)
                    {theSecond.add(pokerBox.get(index));}
                    else
                    {
                        if(index % 3 == 2)
                        {theThird.add(pokerBox.get(index));}
                    }
                }
            }
        }

 

4.输出最后结果

我们可以通过如下代码来查询现在四堆牌的结果:

System.out.println(diPai);
System.out.println(theFirst);
System.out.println(theSecond);
System.out.println(theThird);

 

 

总代码如下:

package cn.huida.poker;

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

public class PokerTest {
    public static void main(String[] args) {

        //组装54张牌
        ArrayList pokerBox = new ArrayList();

        ArrayList pokerColor = new ArrayList();//花色
        pokerColor.add("♠");
        pokerColor.add("♥");
        pokerColor.add("♣");
        pokerColor.add("♦");
        ArrayList pokeNums = new ArrayList();//点数
        pokeNums.add("A");
        pokeNums.add("J");
        pokeNums.add("K");
        pokeNums.add("Q");
        for (int i=2 ; i<=10; i++)
        {
            pokeNums.add(""+i);
        }

        //组装特殊数据
        pokerBox.add("大王");
        pokerBox.add("小王");

        //组装其他52张牌
        for(String color : pokerColor)
        {
            for(String num:pokeNums)
            {
                String temp = color + num;
                pokerBox.add(temp);
            }
        }

        //洗牌
        Collections.shuffle(pokerBox);

        //发牌
        ArrayList diPai = new ArrayList();
        ArrayList theFirst = new ArrayList();
        ArrayList theSecond = new ArrayList();
        ArrayList theThird = new ArrayList();

        for(int index = 0;index < pokerBox.size();index++)
        {
            if(index >= 51)
            {diPai.add(pokerBox.get(index));}
            else
            {
                if(index % 3 == 0)
                {theFirst.add(pokerBox.get(index));}
                else
                {
                    if(index % 3 == 1)
                    {theSecond.add(pokerBox.get(index));}
                    else
                    {
                        if(index % 3 == 2)
                        {theThird.add(pokerBox.get(index));}
                    }
                }
            }
        }

        System.out.println(diPai);
        System.out.println(theFirst);
        System.out.println(theSecond);
        System.out.println(theThird);


    }
}

 

 

==========================分割线==========================

感觉这一篇解释的不是很详细,如果有不理解的可以直接问我....

你可能感兴趣的:(Java)