zoukankan      html  css  js  c++  java
  • 二维数组---模拟斗地主

    package com.pb.demo;
    
    import java.util.Arrays;
    import java.util.Random;
    
    /**
     * 扑克牌随机发牌♠♥♣♦ 二维数组实现
     * 
     */
    public class Puker {
    
        public static void main(String[] args) {
            // 定义数组
            String[][] puker = new String[5][];
            puker[0] = new String[] { "♠A", "♠2", "♠3", "♠4", "♠5", "♠6", "♠7",
                    "♠8", "♠9", "♠10", "♠J", "♠Q", "♠K" };
            puker[1] = new String[] { "♥A", "♥2", "♥3", "♥4", "♥5", "♥6", "♥7",
                    "♥8", "♥9", "♥10", "♥J", "♥Q", "♥K" };
            puker[2] = new String[] { "♣A", "♣2", "♣3", "♣4", "♣5", "♣6", "♣7",
                    "♣8", "♣9", "♣10", "♣J", "♣Q", "♣K" };
            puker[3] = new String[] { "♦A", "♦2", "♦3", "♦4", "♦5", "♦6", "♦7",
                    "♦8", "♦9", "♦10", "♦J", "♦Q", "♦K" };
            puker[4] = new String[] { "大王", "小王" };
            // 定义3个玩家和底牌
            String[] player1 = new String[17];
            String[] player2 = new String[17];
            String[] player3 = new String[17];
            String[] temp = new String[3];
    
            // 二维数据洗牌
            Random random = new Random();
            int i1 = 0, i2 = 0, j1 = 0, j2 = 0;// 定义4个变量,用来存放数组的下标
            // 洗牌1000次
            for (int i = 0; i < 1000; i++) {
                // 下标i1等于,随机0~4的整数 一维的下标
                i1 = random.nextInt(5); // 0~4之间
                if (i1 == 4) {
                    // 如果一维的下标是4,则2维的的元素只有2个大王和小王,只有2个元素
                    j1 = random.nextInt(2);
    
                } else {
                    // 如果不是4,则有13张牌
                    j1 = random.nextInt(13); // 0~12 共13个元素
                }
                // 因为最短的数组是2个元素,所以要2次,如果是多个就要多次
                i2 = random.nextInt(5);
                if (i2 == 4) {
                    j2 = random.nextInt(2);
                } else {
                    j2 = random.nextInt(13);
                }
                // 开始洗牌
                String tmp = puker[i1][j1];
                puker[i1][j1] = puker[i2][j2]; // 洗牌法,交换,打乱顺序
                puker[i2][j2] = tmp;
            }
            // 洗牌后的牌
            System.out.println("===========洗牌后的顺序============");
            for (int i = 0; i < puker.length; i++) {
                for (int j = 0; j < puker[i].length; j++) {
                    System.out.print(puker[i][j] + "  ");
                }
    
            }
            // 开始发牌
            for (int i = 0; i < 54; i++) {
                int p = i % 3; // 定义发给哪个玩家
                int k = i / 3 - 1; // 定义轮次
                if (i < 3) {
                    // 先扣下三张底牌
                    temp[i] = puker[i / 13][i % 13]; // 从前向回取3张,估做底牌
                } else if (p == 0) {
                    player1[k] = puker[i / 13][i % 13];
                } else if (p == 1) {
                    player2[k] = puker[i / 13][i % 13];
                } else if (p == 2) {
                    player3[k] = puker[i / 13][i % 13];
                }
    
            }
            System.out.println("
    ==========发牌完成=============");
            // 玩家一
            System.out.println("玩家一" + Arrays.toString(player1));
            // 玩家二
            System.out.println("玩家二" + Arrays.toString(player2));
            // 玩家三
            System.out.println("玩家三" + Arrays.toString(player3));
            // 底牌
            System.out.println("底牌" + Arrays.toString(temp));
    
        }
    
    }
  • 相关阅读:
    Linux内核学习第五周 系统调用
    Linux内核学习第三周 Linux启动过程分析
    WebStorm快捷键大全
    PAT乙级-1056. 组合数的和(15)
    PAT乙级-1043. 输出PATest(20)
    PAT乙级-1021.个位数统计(15)
    PAT乙级-1036.跟奥巴马一起编程(15)
    学习笔记-C++ STL iterator与对指针的理解-20170618
    学习笔记-Little Tips_day20170615-" " and ' '
    HTML5离线存储和本地缓存
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4443171.html
Copyright © 2011-2022 走看看