基于数组来实现的斗地主发牌

需求:

1.准备一副牌(数组长度:54)
2.洗牌(Math.radon)
3.发牌(嵌套循环)
4.每人十七张 (新数组)
5.选地主(scanner)
6.将底牌给地主(数组扩容)
7.展示每个人的手牌(print)

代码:

import java.util.Arrays;
import java.util.Scanner;

/**
 * @Author: Bun
 * @Version: 1.0
 * @Date: 2022/9/26-18:53
 * @Name: 斗地主发牌
 */
public class HomeWork3 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String poke[] = {"黑桃2", "梅花2", "方块2", "红桃2", "黑桃3", "梅花3", "方块3", "红桃3", "黑桃4", "梅花4",
                "方块4", "红桃4", "黑桃5", "梅花5", "方块5", "红桃5", "黑桃6", "梅花6", "方块6", "红桃6", "黑桃7",
                "梅花7", "方块7", "红桃7", "黑桃8", "梅花8", "方块8", "红桃8", "黑桃9", "梅花9", "方块9", "红桃9",
                "黑桃10", "梅花10", "方块10", "红桃10", "黑桃J", "梅花J", "方块J", "红桃J", "黑桃K", "梅花K",
                "方块K", "红桃K", "黑桃Q", "梅花Q", "方块Q", "红桃Q", "黑桃A", "梅花A", "方块A", "红桃A",
                "小王", "大王"};
        System.out.println(poke.length);

        //打乱数组顺序
        for (int i = 0; i < poke.length; i++) {
            int rand = (int) (Math.random() * poke.length);
            String temp = poke[rand];
            poke[rand] = poke[i];
            poke[i] = temp;
        }

        //发牌
        String[] poke1 = new String[17];
        String[] poke2 = new String[17];
        String[] poke3 = new String[17];
        int a = 0, b = 1, c = 2, A = 0, B = 0, C = 0;
        for (int i = 0; i < 51; i++) {
            if (i == a) {
                poke1[A] = poke[i];
                A++;
                a += 3;
            } else if (i == b) {
                poke2[B] = poke[i];
                B++;
                b += 3;
            } else if (i == c) {
                poke3[C] = poke[i];
                C++;
                c += 3;
            }
        }

        //抢地主
        boolean G = true;
        while (G) {
            System.out.println("谁是地主? 1/2/3");
            int choose = input.nextInt();
            int g = 17;
            switch (choose) {
                case 1:
                    poke1 = Arrays.copyOf(poke1, poke1.length + 3);
                    for (int i = 51; i < 54; i++) {
                        poke1[g++] = poke[i];
                    }
                    System.out.println("一号是地主");
                    G = false;
                    break;
                case 2:
                    poke2 = Arrays.copyOf(poke2, poke2.length + 3);
                    for (int i = 51; i < 54; i++) {
                        poke2[g++] = poke[i];
                    }
                    System.out.println("二号是地主");
                    G = false;
                    break;
                case 3:
                    poke3 = Arrays.copyOf(poke3, poke3.length + 3);
                    for (int i = 51; i < 54; i++) {
                        poke3[g++] = poke[i];
                    }
                    System.out.println("三号是地主");
                    G = false;
                    break;
                default:
                    break;
            }
        }
        System.out.println(Arrays.toString(poke1));
        System.out.println(Arrays.toString(poke2));
        System.out.println(Arrays.toString(poke3));
    }
}

remake

import java.util.Arrays;
import java.util.Scanner;

/**
 * @Author: Bun
 * @Version: 1.0
 * @Date: 2022/9/27-10:16
 * @Name: 斗地主remake
 */
public class HomeWork3Remake {
    public static void main(String[] args) {
        //准备牌组
        String[] poke = new String[54];
        Scanner input = new Scanner(System.in);
        String[] color = {"方块", "梅花", "红桃", "黑桃"};
        String[] numbers = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        String[] king = {"小王", "大王"};

        //设置索引
        int index = 0;
        //设置牌组
        for (int i = 0; i < color.length; i++) {
            for (int j = 0; j < numbers.length; j++) {
                poke[index++] = color[i] + numbers[j];
            }
        }
        poke[index++] = king[0];
        poke[index] = king[1];
        System.out.println("展示牌组:");
        System.out.println(Arrays.toString(poke));

        //洗牌
        for (int i = 0; i < poke.length; i++) {
            //随机一张牌
            int randomIndex = (int) (Math.random() * poke.length);
            //互换
            String temp = poke[i];
            poke[i] = poke[randomIndex];
            poke[randomIndex] = temp;
        }
        System.out.println("洗牌后: " + Arrays.toString(poke));

        //开始发牌
        String[] poke1 = new String[17];
        int A = 0;
        String[] poke2 = new String[17];
        int B = 0;
        String[] poke3 = new String[17];
        int C = 0;

        //-3:留3张底牌
        for (int i = 0; i < poke.length - 3; i++) {
            //  0 3 6   %3==0
            if (i % 3 == 0) {
                poke1[A++] = poke[i];
            } else if (i % 3 == 1) {
                poke2[B++] = poke[i];
            } else if (i % 3 == 2) {
                poke3[C++] = poke[i];
            }
        }

        //选地主
        boolean G = true;
        while (G) {
            System.out.println("谁是地主? 1/2/3");
            int choose = input.nextInt();
            switch (choose) {
                case 1:
                    poke1 = Arrays.copyOf(poke1, poke1.length + 3);
                    poke1[A++] = poke[poke.length - 1];
                    poke1[A++] = poke[poke.length - 2];
                    poke1[A] = poke[poke.length - 3];
                    G = false;
                    break;
                case 2:
                    poke2 = Arrays.copyOf(poke2, poke2.length + 3);
                    poke2[A++] = poke[poke.length - 1];
                    poke2[A++] = poke[poke.length - 2];
                    poke2[A] = poke[poke.length - 3];
                    G = false;
                    break;
                case 3:
                    poke3 = Arrays.copyOf(poke3, poke3.length + 3);
                    poke3[A++] = poke[poke.length - 1];
                    poke3[A++] = poke[poke.length - 2];
                    poke3[A] = poke[poke.length - 3];
                    G = false;
                    break;
                default:
                    break;
            }
        }
        System.out.println(Arrays.toString(poke1));
        System.out.println(Arrays.toString(poke2));
        System.out.println(Arrays.toString(poke3));
    }
}

ps:两个都能跑,但我更中意remake

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值