二维数组---模拟斗地主

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("\n==========发牌完成=============");
        // 玩家一
        System.out.println("玩家一" + Arrays.toString(player1));
        // 玩家二
        System.out.println("玩家二" + Arrays.toString(player2));
        // 玩家三
        System.out.println("玩家三" + Arrays.toString(player3));
        // 底牌
        System.out.println("底牌" + Arrays.toString(temp));

    }

}
时间: 2024-10-04 13:15:36

二维数组---模拟斗地主的相关文章

SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )

图练习-BFS-从起点到目标点的最短步数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天灾,一个叫近卫.在他们所在的地域,有n个隘口,编号为1..n,某些隘口之间是有通道连接的.其中近卫军团在1号隘口,天灾军团在n号隘口.某一天,天灾军团的领袖巫妖王决定派兵攻打近卫军团,天灾军团的部队如此庞大,甚至可以填江过河.但是巫妖王不想付出不必要的代价,他想知道在不修建任何通道的前提下,部队是否

shell 模拟二维数组解析配置文件

前几日项目组内出shell OJ题进行练习, 题目大概为: 现有配置文件conf.ini如下,编写shell,输入title和key,输出其值, 如输入FIFO1 a1 ,则输出11 #this is a config file [FIFO1] a1=11 b1=12 c1=13 [FIFO2] a2=21 b2=22 c2=23 [FIFO3] a3=31 b3=32 c3=33 恰因这几日内在学习数组的用法,故使用shell来模拟二维数组,现博客之,以飨同学,共研讨. 注:本解法未考虑性能,

C++中关于二维数组作为函数参数传递的问题

在做数据结构迷宫实验的时候,要生成一个二维数组存储迷宫数据,为了保证程序的模块化,将生成部分单独放进一个函数migongsc()里.大致代码如下: 问题的关键就集中在了如何将主函数中声明的二维数组migong[8][9]传递到自定义函数中去. 耗费了一个晚上的时间,我总共整理出了三种办法: 方法1:模拟编译器寻址(本法来自CSDN博客,原文: http://blog.csdn.net/jatix/archive/2004/08/29/88150.aspx). 大体意思为:将二维数组当作参数的时候

【二维数组内存申请】

前要:内存申请与释放 头文件:#include <stdlib.h> 申请: malloc(配置内存空间) 相关函数 calloc,free,realloc,brk函数原型 void * malloc(size_t size);一般使用时会将void改为自定义型如: double **pd=NULL; pd =(double **)malloc( sizeof(double *)*n); for(int i=0;i<n;i++) pd[i]=(double *)malloc(n*size

用vector代替实现二维数组

vector可以用来模拟数组,当然也可以用来模拟二维数组: 定义如:vector<int>a[100];   相当于定义了一个100行的数组,当每行的大小是不确定的 模板应用如下: #include <stdio.h> #include <vector> #include <algorithm> using namespace std; int main() { vector<int>a[100]; vector<int>::iter

一句话动态开辟二维数组

#include<iostream> using namespace std; //动态开辟int p[4][5]数组 void main() { //为了验证正确性,我们先把开辟的一维数组赋值给 pp int *pp=new int[20]; int i=0,j=0; for(i=0;i<20;i++)//为一维数组中每一个元素赋值,并输出该元素地址 { pp[i]=i; cout<<&(pp[i])<<" ";//即 pp+i }

Unit06: 数组的常用方法_2 、 二维数组 、 String_1

1.数组API 数组=数据+操作数据的API 1. 数组 to String:2种: var str=arr.toString(); -->输出数组中的内容,每个元素用逗号分隔 -->自动调用 var str=arr.join("连接符") ******* -->输出数组中的内容,自定义元素间连接符 批量操作页面元素时,可以用join拼接成innerHTML,一次性修改 何时使用:2种固定套路 1. 将字符组成单词:arr.join("") 2.

动态内存分配连续内存空间的二维数组

可以直接使用一维数组来模拟二维数组,下面的代码就是在此基础上,用一个二级指针指向一维数组的相应地方,详见代码 #include <stdio.h> #include <malloc.h> int main() { int row,col,i,j,n=0; row=col=3; //malloc连续内存的二维数组 int **arr=(int**)malloc(row*sizeof(int*));//分配二维数组 arr[0]=(int*)malloc(row*col*sizeof(

45.将3&#215;3二维数组转置,并输出

//1.定义一个3*3的二维数组//2.输入内容,并在屏幕中输出//3.运用for循环嵌套将数组转置,并输出 (1)我的程序:运用中间量交换 -错误版:转置算法有问题,需要好好模拟一下 #include<iostream> using namespace std; int main() { int temp; int a[3][3]; cout<<"please input 9 numbers: "<<endl; for(int i=0;i<3