import java.io.FileWriter; import java.io.IOException; import java.io.FileInputStream; import java.io.ObjectInputStream; import java.util.Date; public class Table { public Deck cDeck; public Hand[] hPlayers; public int iPlayers; public int[] iCalls; // Call Codes: 0 - Surrender; 1 - Stand; 2 - Hit; 3 - Doubledown public int[][] iCallHistory; public Player[] pPlayers; public int[] iDoubledown; public int[] iWin; public Table(Player[] pPlay) { pPlayers = pPlay; iPlayers = pPlayers.length; iCallHistory = new int[iPlayers][5]; for (int i = 0; i < iPlayers; i++) { iCallHistory[i][0]=0; iCallHistory[i][1]=0; iCallHistory[i][2]=0; iCallHistory[i][3]=0; iCallHistory[i][4]=0; } } public void play() { hPlayers = new Hand[iPlayers]; iCalls = new int[iPlayers]; iDoubledown = new int[iPlayers]; iWin = new int[iPlayers]; cDeck = new Deck(1); // System.out.println(); // System.out.println(cDeck.toString()); // System.out.println(); for (int i = 0; i < iPlayers; i++) { hPlayers[i]=new Hand(cDeck.deal()); iDoubledown[i]=0; } for (int i = 0; i < iPlayers; i++) { hPlayers[i].deal(cDeck.deal()); if (hPlayers[i].getScore()==21) iWin[i]=1; else iWin[i]=0; iCalls[i]=2; } int iHits = 1; int iAction = 0; while (iHits > 0) { iHits = 0; for (int i = 0; i < iPlayers; i++) { if (iCalls[i]>1 && hPlayers[i].getScore()<21) { iAction = pPlayers[i].call(i, iPlayers, hPlayers); iCallHistory[i][iAction]++; iCalls[i] = iAction; if (iAction==0) { } if (iAction==1) { } if (iAction==2) { iHits++; hPlayers[i].deal(cDeck.deal()); } if (iAction==3) { iHits++; hPlayers[i].deal(cDeck.deal()); if (hPlayers[i].cardCount() == 2) iDoubledown[i]=1; } if (iAction==4) { if (hPlayers[i].cardCount() == 2) { iDoubledown[i]=1; iHits++; hPlayers[i].deal(cDeck.deal()); } else iCalls[i] = 1; } } } } for (int i = 1; i < iPlayers; i++) { pPlayers[i].updateScore(this.score(i)); } } public int score(int iPlayerNum) { if (iCalls[iPlayerNum] == 0) return -5; if (iWin[iPlayerNum] == 1) return 15; if (iDoubledown[iPlayerNum] == 0) { if (hPlayers[iPlayerNum].getScore() < 22 && hPlayers[0].getScore() > 21) return 10; if (hPlayers[iPlayerNum].getScore() > 21) return -10; if (hPlayers[iPlayerNum].getScore() == hPlayers[0].getScore()) return 0; if (hPlayers[iPlayerNum].getScore() > hPlayers[0].getScore()) return 10; if (hPlayers[iPlayerNum].getScore() < hPlayers[0].getScore()) return -10; } else { if (hPlayers[iPlayerNum].getScore() < 22 && hPlayers[0].getScore() > 21) return 20; if (hPlayers[iPlayerNum].getScore() > 21) return -20; if (hPlayers[iPlayerNum].getScore() == hPlayers[0].getScore()) return 0; if (hPlayers[iPlayerNum].getScore() > hPlayers[0].getScore()) return 20; if (hPlayers[iPlayerNum].getScore() < hPlayers[0].getScore()) return -20; } return 0; } public void print() { for (int i = 1; i < iPlayers; i++) { System.out.println("Player "+i+" ("+pPlayers[i].getName()+"): "+hPlayers[i].toString()); System.out.println(" Score: "+pPlayers[i].getRunningScore()); System.out.println(" Wins: "+pPlayers[i].getWins()); } } public String toString() { String sOutput = (new Date()).toString(); for (int i = 1; i < iPlayers; i++) { sOutput += "\nPlayer "+i+" ("+pPlayers[i].getName()+"): "+hPlayers[i].toString()+"\n"; sOutput += " Score: "+pPlayers[i].getRunningScore()+"\n"; } return sOutput; } public String toString2() { String sOutput = ""; for (int i = 1; i < iPlayers; i++) { sOutput += "\nPlayer "+i+" ("+pPlayers[i].getName()+"): "+hPlayers[i].toString(); sOutput += " Score: "+pPlayers[i].getRunningScore()+"\n\n"; } return sOutput; } public void record(String sFileName) { try { FileWriter Logger = new FileWriter(sFileName, true); Logger.write((new Date()).toString()); Logger.write(toString()); Logger.close(); } catch (IOException e) { e.printStackTrace(); } } public void record2(String sFileName) { try { FileWriter Logger = new FileWriter(sFileName, true); Logger.write(toString2()); Logger.close(); } catch (IOException e) { e.printStackTrace(); } } public void recordSimple(String sFileName) { try { FileWriter Logger = new FileWriter(sFileName, true); Logger.write(pPlayers[1].iGameCount+", "+pPlayers[1].iWins+", "+pPlayers[1].getScore()+", "+pPlayers[1].getRunningScore()+", "); Logger.close(); } catch (IOException e) { e.printStackTrace(); } } public void recordSimple2(String sFileName) { try { FileWriter Logger = new FileWriter(sFileName, true); Logger.write(pPlayers[1].iGameCount+", "+pPlayers[1].iWins+", "+pPlayers[1].getScore()+", "+pPlayers[1].getRunningScore()+"\n"); Logger.close(); } catch (IOException e) { e.printStackTrace(); } } }