写成一个类:
package createpai;
import java.util.Random;
/***********************
生成一定数量的牌
数据结构为一个数组队列,可以调用其前面,或者末尾的牌
产生牌时,先生成一个临时数组的牌,依次赋麻将值,然后随机的取临时数组里面的麻将值到队列里面.
*/
public class CreatePai {
private int pai[];
private int front;
private int rear;
private int total;
public CreatePai(int n) {
total = n;
pai = new int[n];
front = 0;
rear = n - 1;
SetPai(CreateSeqArray());
}
//产生一个临时数组,顺序往里面放牌
//基本的牌是 9*3*4 = 108 ,只有箭 +12 = 120;有箭有风 再+16=136;有梅兰等等 再+8 = 144
private int[] CreateSeqArray() {
int array[] = new int[total];
int temp = 0;
int shi = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j++) {
for (int k = 0; k < 4; k++) {
array[temp] = shi + j;
temp++;
}
}
shi += 10;
}
//不同的个数决定了有不同的牌
if (total >= 120) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
array[temp] = 30 + i;
temp++;
}
}
}
if (total >= 136) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
array[temp] = 33 + i;
temp++;
}
}
}
if (total == 144) {
}
return array;
}
//把临时数组的牌装入到数据成员里边
private void SetPai(int array[]) {
Random r = new Random();
int n = 0;
for (int i = 0; i < total; i++) {
do {
n = r.nextInt(total);
} while (array[n] == -1);
pai[i] = array[n];
array[n] = -1;
}
}
//顺序得到牌
public int GetSeqPai() {
int re = -1;
if (front <= rear) {
re = pai[front];
front++;
}
return re;
}
//逆序得到牌,用于杠的情况
public int GetAthPai() {
int re = -1;
if (rear >= front) {
re = pai[rear];
rear--;
}
return re;
}
public static void main(String[] args) {
CreatePai r = new CreatePai(136);
for (int i = 0; i < 40; i++) {
System.out.print(r.GetSeqPai());
System.out.print("\t");
}
}
}
2006-10-12 17:23:38
Views(1013)
Comments