欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#使用二维数组模拟斗地主

程序员文章站 2023-10-27 08:04:34
本文实例讲述了c#使用二维数组模拟斗地主的方法。分享给大家供大家参考。具体如下: package com.pb.demo; import java.util.a...

本文实例讲述了c#使用二维数组模拟斗地主的方法。分享给大家供大家参考。具体如下:

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));
 }
}

希望本文所述对大家的c#程序设计有所帮助。