/*----------------------------------------------------------------------+
| Title: Match.java |
| |
| Author: David E. Joyce |
| Department of Mathematics and Computer Science |
| Clark University |
| Worcester, MA 01610-1477 |
| U.S.A. |
| |
| http://aleph0.clarku.edu/~djoyce/ |
| djoyce@clarku.edu |
| |
| Date: May, 2002. |
+----------------------------------------------------------------------*/
public class Match {
private int payoff[][];
private Player P[]; // array of players
private Player Q[]; // array of quitters
private int nQ; // number of quitters
public void simulate(Player PIn[], int lengthOfMatch, int payoffIn[][]) {
P = PIn;
payoff = payoffIn;
// Put all the players in the quitters array
nQ = 0;
Q = new Player[P.length];
for (int p=0; p
=2) {
--nQ;
Q[nQ].partner = Q[nQ-1].id;
Q[nQ-1].partner = Q[nQ].id;
Q[nQ].movenumber = 0;
Q[nQ-1].movenumber = 0;
--nQ;
}
}
private void play(Player A, Player B) {
if (A.movenumber == 0) {
A.thisMove = A.S.firstMove();
B.thisMove = B.S.firstMove();
} else if (A.movenumber == 1) {
A.thisMove = A.S.secondMove(A.previousMove,B.previousMove,A.score);
B.thisMove = B.S.secondMove(B.previousMove,A.previousMove,B.score);
} else {
A.thisMove = A.S.thirdMove(A.lastMove,B.lastMove,
A.previousMove,B.previousMove,A.score);
B.thisMove = B.S.thirdMove(B.lastMove,A.lastMove,
B.previousMove,A.previousMove,B.score);
}
A.score += payoff[A.thisMove][B.thisMove];
B.score += payoff[B.thisMove][A.thisMove];
if (A.S.leave(A.thisMove,B.thisMove,A.score) ||
B.S.leave(B.thisMove,A.thisMove,B.score)) {
A.partner = -1;
B.partner = -1;
Q[nQ++] = A;
Q[nQ++] = B;
} else {
A.previousMove = A.lastMove;
B.previousMove = B.lastMove;
A.lastMove = A.thisMove;
B.lastMove = B.thisMove;
++A.movenumber;
++B.movenumber;
}
return;
}
} // Match.java