Código-fonte em Java da inicialização de partida do WAR no Gametrack
private int GTnextInt(int n){
if (n <= 0) return 0;
int bits, val;
//sorteia enquanto não pegar uma chave enviesada, ie, na última trache de quase "n" valores inteiros
do {
bits = rand.nextInt();
++quantRandoms;
if(bits < 0) bits = -bits;
val = bits % n;
} while (bits - val + (n-1) < 0);
return val;
}
// Implementing Fisher–Yates shuffle
private void shuffleArray(int[] ar) {
for (int i = ar.length - 1; i > 0; i--) {
int index = GTnextInt(i + 1);
// Simple swap
int a = ar[index];
ar[index] = ar[i];
ar[i] = a;
}
}
String[] jogadores = {"jogadorA", "jogadorB", "jogadorC", "", "", ""};
java.util.ArrayList<Integer> listaQuem = new java.util.ArrayList<Integer>(jogadores.length);
for(int i = 0; i < jogadores.length; ++i){
if(jogadores[i].equals("")) continue;
listaQuem.add(i);
}
int quant = listaQuem.size();
int[] cores = new int[quant];
int[] ncartas = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41};
int[] mesa = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,42};
int[] listaobjetivos = {0,1,2,3,4,5,6,7,8,9,10,11,12,13};
shuffleArray(ncartas, true);
shuffleArray(mesa, true);
shuffleArray(listaobjetivos, true);
int ind = GTnextInt(quant);
int[] listapegos = new int[42];
for(int i = 0; i < 42; ++i){
listapegos[ncartas[i]] = ind;
if(++ind >= quant) ind = 0;
}
for(int i = 0; i < quant; ++i){
int quem = listaQuem.get(ind);
nomes[i] = jogadores[quem];
cores[i] = quem;
for(int j = 0; j < 42; ++j){
if(listapegos[j] == ind) posses[j] = i;
}
if(++ind >= quant) ind = 0;
}
int j = 0;
for(int i = 0; i < listaobjetivos.length; ++i){
int o = listaobjetivos[i];
// desconsidere a carta se o objetivo for eliminar a si mesmo ou uma cor que não está no jogo
if(o <= 5) {
if((o == cores[j])||(find(cores, o) < 0)) continue;
}
objetivos[j] = o;
if(++j >= quant) break;
}