package bingo.shared;
import java.util.Random;
import java.util.Vector;
import java.util.Stack;
import java.io.Serializable;
import java.security.*;
// a Bingo card, created by the GameKeeper and signed
public class Card implements Serializable {
public static final int SIZE = 5;
public static char[] columnTitles = { 'B', 'I', 'N', 'G', 'O' };
public BingoBall[][] boardValues = new BingoBall[SIZE][SIZE];
private byte[] signature;
public Card() {
this(new Random(System.currentTimeMillis()));
}
public Card(Random generator) {
int min=0, max=0;
for (int i = 0; i < SIZE; i ++) {
int numBalls = BingoBall.RANGE;
Vector balls = new Vector(numBalls);
Stack randomBalls = new Stack();
switch (i) {
case 0:
min = BingoBall.MIN;
max = BingoBall.MAX_B;
break;
case 1:
min = max + 1;
max = BingoBall.MAX_I;
break;
case 2:
min = max + 1;
max = BingoBall.MAX_N;
break;
case 3:
min = max + 1;
max = BingoBall.MAX_G;
break;
case 4:
min = max + 1;
max = BingoBall.MAX_O;
break;
}
// generate all 15 balls in this range
for (int j = min; j <= max; j++) {
balls.addElement(new BingoBall(j));
}
// randomize the 15 balls
for (int k = BingoBall.RANGE - 1; k >= 0; k--) {
int num = (int)(generator.nextDouble() * (k+1));
randomBalls.push(balls.elementAt(num));
balls.removeElementAt(num);
}
// choose 5 of them to put on the card
for (int j = 0; j < SIZE; j ++) {
boardValues[j][i] = (BingoBall)randomBalls.pop();
}
}
boardValues[2][2] = new BingoBall(BingoBall.FREE_SPACE);
}
public void setSignature(byte[] sig) {
signature = sig;
}
public byte[] getSignature() {
return signature;
}
}
|