Java——扑克牌斗地主

代码实现功能:模拟斗地主发牌,将54张扑克牌随机的等数量的发给三个人,并留下三张底牌

(一)代码(用数组实现):

import java.util.Arrays;
import java.util.Random;

public class Puke {
//        做随机牌数组的index
        public int[] index(){
        int []a=new int[54];
        int i=0,x=0;
        while (i<54){
            x=new Random().nextInt(54);
            boolean isflag=true;
            for (int j = 0; j < i; j++) {
                if(x==a[j]){
                    isflag=false;
                }
            }
            if(isflag) {
                a[i] = x;
                i++;
            }
        }
        return a;
    }
//    将所有牌写到一个数组里
    public String[] value(){
        String[]b=new String[54];
        String [] c={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        String []d={"红桃 ","黑桃","方块","梅花"};
//        b[0]="大王";
//        b[1]="小王";
        int j=0;
        for (int k = 0; k <d.length ; k++) {
            for (int i = 0; i <c.length ; i++) {
                b[j]=d[k]+c[i];
                j++;
            }
        }
        b[j]="大王";
        b[j+1]="小王";
        return b;
    }
//    洗牌,将有序的所有牌数组b变成无序的所有牌s,s=b[a[i]],a[i]是无序的0-53的index,即b数组的index无序遍历下标
    public String[] shuffle(){
            Puke p=new Puke();
        int[]a=p.index();
        String[]b=p.value();
        String c[]=new String[54];
        for (int i = 0; i <c.length ; i++) {
            c[i]=b[a[i]];
        }
        return c;
    }
//    发牌,将已经洗好的牌分别发给三个人,并留下三张底牌
    public void deal() {
        Puke p=new Puke();
        String [] s=p.shuffle();

        int count=0;
        String a[];
        String b[]={"张三","李四","王五","底牌"};
        for (int i = 0; i < 4; i++) {
            if(i<3){
                a=new String[17];
                for (int j = 0; j <a.length ; j++) {
                    a[j]=s[count];
                    count++;
                }
            }else {
                a=new String[3];
                for (int j = 0; j <a.length ; j++) {
                    a[j]=s[count];
                    count++;
                }
            }

            System.out.println(b[i]+":"+Arrays.toString(a));
        }
    }
//    调用发牌方法,完成输出
    public static void main(String[] args) {
        Puke p=new Puke();
        p.deal();
    }
}

(二)代码(用列表实现):

import java.util.ArrayList;
import java.util.Random;

public class PukeList {
    public String poker(int num ){
        String str;
        String[] kind={"红桃","黑桃","方块","梅花"};
        String[] number={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        if(num/4<=12){
            str=kind[num%4]+number[num/4];
        }else {
            if(num%4==0){
                str="大王";
            }else {
                str="小王";
            }
        }
        return str;
    }
    public void pokerList(){
        PukeList p=new PukeList();
        ArrayList list=new ArrayList();
        for (int i = 0; i < 54; i++) {
            list.add(p.poker(i));
        }
        int length = list.size();
        int count=0;
        for (int i = 0; i <length ; i++) {
            int num=new Random().nextInt(list.size());
            System.out.print(list.get(num)+"\t");
            list.remove(num);
            count++;
            if(count%17==0){
                System.out.println();
            }
        }
    }

    public static void main(String[] args) {
        PukeList p=new PukeList();
        p.pokerList();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42775190/article/details/82661775