import java.applet.*;
import java.awt.*;
import java.io.*;
import java.util.*;

class KenoGame 
{
  Keno keno;

  static final int BOARDSIZE = 80;

  int board [];

  int savedPosition [];

  int gameNumber;

  Random random;

  static final int MAXPLAYERSELECT = 15;

  static final int MAXHOUSESELECT = 20;

  int nSelect;

  int wagerAmount;

  int gameWinnings;

  int totalWinnings;

  KenoGame(Keno keno) {
    this.keno = keno;
    random = new Random(getSeed());
    board = new int [BOARDSIZE];
    savedPosition = new int [BOARDSIZE];
    gameNumber = 0;
    nSelect = 0;
    wagerAmount = 1234;
    gameWinnings = 0;
    totalWinnings = 0;
  }

  int getSeed() {
 
    // use current time to make a seed

    Calendar calendar = Calendar.getInstance();
    return
      calendar.get(Calendar.MINUTE) *
      calendar.get(Calendar.SECOND) *
      calendar.get(Calendar.MILLISECOND);
  }

  void displayBoard() {
    int n;
    for (n = 0; n < BOARDSIZE; n++)
      keno.drawSquare(n, board [n]);
  }

  int power(int digitIndex) {
    int idx;
    int product = 1;
    for (idx = 0; idx < digitIndex; idx++)
      product *= 10;
    return product;
  }

  void changeWagerAmountByDigit(int digitIndex) {
    int digit;
    int delta;
    digitIndex++;
    digit = (wagerAmount % power(digitIndex)) / power(digitIndex - 1);
    digit += 1;
    if (digit == 10) {
      digit = 0;
      delta = -(9 * power(digitIndex - 1));
    }
    else
      delta = power(digitIndex - 1);
    wagerAmount += delta;
  }

  void playerSelection(int n) {
    if (board [n] == keno.PLAYERMARKED) {
      board [n] = keno.UNMARKED;
      keno.drawSquare(n, board [n]);
      nSelect--;
    }
    else
    if (nSelect == MAXPLAYERSELECT)
      keno.beepUser();
    else {
      board [n] = keno.PLAYERMARKED;
      keno.drawSquare(n, board [n]);
      nSelect++;
    }
  }

  void houseSelection() {
    int i, n;
    int winningSpots = 0;

    i = 0;
    while (i < MAXHOUSESELECT) { 
      n = (int)Math.abs(random.nextInt()) % BOARDSIZE;
      if (board [n] == keno.UNMARKED) {
        board [n] = keno.HOUSEMARKED;
        i++;
      }
      else
      if (board [n] == keno.PLAYERMARKED) {
        board [n] = keno.WIN;
        winningSpots++;
        i++;
      }
    }
    gameNumber++;
    determineWinnings(winningSpots);
    displayBoard();
  }

  void newGame() {
    int n;
    nSelect = 0;
    for (n = 0; n < BOARDSIZE; n++) {
      board [n] = keno.UNMARKED;
      if (savedPosition [n] == keno.PLAYERMARKED) {
        board [n] = savedPosition [n];
        nSelect++;
      }
    }
    displayBoard();
  }

  void rememberPosition() {
    int n;
    for (n = 0; n < BOARDSIZE; n++) {
      savedPosition [n] = keno.UNMARKED;
      if (board [n] == keno.PLAYERMARKED || board [n] == keno.WIN)
        savedPosition [n] = keno.PLAYERMARKED;
    }
    newGame();
  }

  void forgetPosition() {
    int n;
    for (n = 0; n < BOARDSIZE; n++)
      savedPosition [n] = keno.UNMARKED;
    newGame();
  }

  void determineWinnings(int winningSpots) {
    if (nSelect == 1) {
      if (winningSpots < 1) gameWinnings = 0;
      else
        gameWinnings = 3*wagerAmount;
    }
    else
    if (nSelect == 2) {
      if (winningSpots < 2) gameWinnings = 0;
      else
        gameWinnings = 12*wagerAmount;
    }
    else
    if (nSelect == 3) {
      if (winningSpots < 2) gameWinnings = 0;
      else
      if (winningSpots == 2) gameWinnings = wagerAmount;
      else
        gameWinnings = 42*wagerAmount;
    }
    else
    if (nSelect == 4) {
      if (winningSpots < 2) gameWinnings = 0;
      else
      if (winningSpots == 2) gameWinnings = wagerAmount;
      else
      if (winningSpots == 3) gameWinnings = 4*wagerAmount;
      else
        gameWinnings = 113*wagerAmount;
    }
    else
    if (nSelect == 5) {
      if (winningSpots < 3) gameWinnings = 0;
      else
      if (winningSpots == 3) gameWinnings = wagerAmount;
      else
      if (winningSpots == 4) gameWinnings = 11*wagerAmount;
      else
        gameWinnings = 750*wagerAmount;
    }
    else
    if (nSelect == 6) {
      if (winningSpots < 3) gameWinnings = 0;
      else
      if (winningSpots == 3) gameWinnings = wagerAmount;
      else
      if (winningSpots == 4) gameWinnings = 3*wagerAmount;
      else
      if (winningSpots == 5) gameWinnings = 100*wagerAmount;
      else
        gameWinnings = 1480*wagerAmount;
    }
    else
    if (nSelect == 7) {
      if (winningSpots < 4) gameWinnings = 0;
      else
      if (winningSpots == 4) gameWinnings = wagerAmount;
      else
      if (winningSpots == 5) gameWinnings = 20*wagerAmount;
      else
      if (winningSpots == 6) gameWinnings = 410*wagerAmount;
      else
        gameWinnings = 8100*wagerAmount;
    }
    else
    if (nSelect == 8) {
      if (winningSpots < 5) gameWinnings = 0;
      else
      if (winningSpots == 5) gameWinnings = 9*wagerAmount;
      else
      if (winningSpots == 6) gameWinnings = 100*wagerAmount;
      else
      if (winningSpots == 7) gameWinnings = 1480*wagerAmount;
      else
        gameWinnings = 19000*wagerAmount;
    }
    else
    if (nSelect == 9) {
      if (winningSpots < 5) gameWinnings = 0;
      else
      if (winningSpots == 5) gameWinnings = 3*wagerAmount;
      else
      if (winningSpots == 6) gameWinnings = 45*wagerAmount;
      else
      if (winningSpots == 7) gameWinnings = 335*wagerAmount;
      else
      if (winningSpots == 8) gameWinnings = 4700*wagerAmount;
      else
        gameWinnings = 18500*wagerAmount;
    }
    else
    if (nSelect == 10) {
      if (winningSpots < 5) gameWinnings = 0;
      else
      if (winningSpots == 5) gameWinnings = 2*wagerAmount;
      else
      if (winningSpots == 6) gameWinnings = 20*wagerAmount;
      else
      if (winningSpots == 7) gameWinnings = 142*wagerAmount;
      else
      if (winningSpots == 8) gameWinnings = 1000*wagerAmount;
      else
      if (winningSpots == 9) gameWinnings = 4500*wagerAmount;
      else
        gameWinnings = 19000*wagerAmount;
    }
    else
    if (nSelect == 11) {
      if (winningSpots < 6) gameWinnings = 0;
      else
      if (winningSpots == 6) gameWinnings = 20*wagerAmount;
      else
      if (winningSpots == 7) gameWinnings = 150*wagerAmount;
      else
      if (winningSpots == 8) gameWinnings = 760*wagerAmount;
      else
      if (winningSpots == 9) gameWinnings = 4000*wagerAmount;
      else
      if (winningSpots == 10) gameWinnings = 25000*wagerAmount;
      else
        gameWinnings = 39000*wagerAmount;
    }
    else
    if (nSelect == 12) {
      if (winningSpots < 6) gameWinnings = 0;
      else
      if (winningSpots == 6) gameWinnings = 12*wagerAmount;
      else
      if (winningSpots == 7) gameWinnings = 56*wagerAmount;
      else
      if (winningSpots == 8) gameWinnings = 400*wagerAmount;
      else
      if (winningSpots == 9) gameWinnings = 1700*wagerAmount;
      else
      if (winningSpots == 10) gameWinnings = 4800*wagerAmount;
      else
      if (winningSpots == 11) gameWinnings = 26000*wagerAmount;
      else
        gameWinnings = 50000*wagerAmount;
    }
    else
    if (nSelect == 13) {
      if (winningSpots < 6) gameWinnings = 0;
      else
      if (winningSpots == 6) gameWinnings = 4*wagerAmount;
      else
      if (winningSpots == 7) gameWinnings = 32*wagerAmount;
      else
      if (winningSpots == 8) gameWinnings = 156*wagerAmount;
      else
      if (winningSpots == 9) gameWinnings = 1400*wagerAmount;
      else
      if (winningSpots == 10) gameWinnings = 7200*wagerAmount;
      else
      if (winningSpots == 11) gameWinnings = 18000*wagerAmount;
      else
      if (winningSpots == 12) gameWinnings = 50000*wagerAmount;
      else
        gameWinnings = 50000*wagerAmount;
    }
    else
    if (nSelect == 14) {
      if (winningSpots < 6) gameWinnings = 0;
      else
      if (winningSpots == 6) gameWinnings = 4*wagerAmount;
      else
      if (winningSpots == 7) gameWinnings = 16*wagerAmount;
      else
      if (winningSpots == 8) gameWinnings = 42*wagerAmount;
      else
      if (winningSpots == 9) gameWinnings = 150*wagerAmount;
      else
      if (winningSpots == 10) gameWinnings = 480*wagerAmount;
      else
      if (winningSpots == 11) gameWinnings = 4800*wagerAmount;
      else
      if (winningSpots == 12) gameWinnings = 16000*wagerAmount;
      else
      if (winningSpots == 13) gameWinnings = 50000*wagerAmount;
      else
        gameWinnings = 50000*wagerAmount;
    }

    if (gameWinnings == 0)
      totalWinnings = totalWinnings - wagerAmount;
    else
      totalWinnings = totalWinnings + gameWinnings;
  }
}
