import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;

//runs the game, with a GUI

public class test2GUI extends Applet implements ActionListener
{

  player[] ScrabblePlayers = { new ScrabBot(),       //the players
                               new ScrabBot(),
                               new ScrabBot(),
                               new ScrabBot() };
  Board BoardStuff = new Board();                    //the game board
  char[][] GameBoard = new char[15][15];             //the game board data
 
  drawObjects Drawer = new drawObjects(this);        //draws board and other graphics
  int playerTurn = 0;                                //which player's turn it is

  boolean GameOver = false;                          //if the current game is over

  Button b = new Button("click for next turn");      //the button that advances the game

  public void paint (Graphics g)
  {  
    Drawer.drawBoard(g);
    Drawer.paint(GameBoard, g);

    int lastPlayerTurn=0;
    if (playerTurn==0)
    { lastPlayerTurn = ScrabblePlayers.length-1; }
    else
    { lastPlayerTurn = playerTurn-1; }
    Drawer.previousPlay(g, lastPlayerTurn+1, ScrabblePlayers[lastPlayerTurn].getLastScore(), ScrabblePlayers[lastPlayerTurn].getLastWord(), ScrabblePlayers[lastPlayerTurn].noMoveInARow);

    if (GameOver)
    {
      int a[] = new int[ScrabblePlayers.length];
      for(int b = 0; b < ScrabblePlayers.length; b++)
      {
        a[b] = ScrabblePlayers[b].getScore();
      }
      Drawer.finishGame(g, a);
    } 
    else
    {
      for(int a = 0; a < ScrabblePlayers.length; a++)
      {
        Drawer.drawScore(g, a+1, ScrabblePlayers[a].getScore());
      }
      Drawer.drawHand(ScrabblePlayers[playerTurn].getHand(), g);
    }
  } //method paint

  public void actionPerformed(ActionEvent e)
  {
    if (!GameOver)
    {
      GameBoard = ScrabblePlayers[playerTurn].doTurn(GameBoard);
      repaint();
      if (ScrabblePlayers[playerTurn].isHuman==false)
      {
        if (ScrabblePlayers[playerTurn].noMoveInARow>2)
        {
          GameOver=true;
          b.setLabel("Game Over");
        }
      }

      playerTurn++;
      if (playerTurn>ScrabblePlayers.length-1)
      { playerTurn = 0; }
    }
  } //method actionPerformed

  public void init ()
  {
    Drawer.init();
    GameBoard = BoardStuff.initBoard(GameBoard);
    bag.initBag();

    //initialize each player
    for(int a = 0; a < ScrabblePlayers.length; a++)
    {
      ScrabblePlayers[a].playerInit();
    }

    setLayout(new BorderLayout());
    this.add("East", b);     
    b.addActionListener(this);

  } //method init
}
