// Decompiled by Jad v1.5.7f. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   Client.java

package Scrabble;

import KennethTam.Debug;
import java.awt.*;
import java.io.PrintStream;

// Referenced classes of package Scrabble:
//            BlankTileDlg, BlankTileDlgFrame, BoardSquare, BoardState, 
//            ButtonPanel, Client, ClientGameState, Rack, 
//            Tile

class Board extends Canvas
{

    public Board(Client client)
    {
        _app = client;
        _boardImg = _app.loadImg("board.gif", this);
        _width = _boardImg.getWidth(null);
        _height = _boardImg.getHeight(null);
        System.out.println("Board pixel dimens: " + _width + "x" + _height);
        _buffer = null;
        _boardState = new BoardState();
    }

    public Dimension preferredSize()
    {
        return new Dimension(_width, _height);
    }

    public Dimension minimumSize()
    {
        System.out.println("Minimum size called");
        return new Dimension(_width, _height);
    }

    public synchronized void update(Graphics g)
    {
        paint(g);
    }

    public synchronized void paint(Graphics g)
    {
        if(_buffer == null)
        {
            _buffer = createImage(_width, _height);
            if(_buffer == null)
                System.out.println("BOARD OFFSCREEN BUFFER IS NULL!");
            else
                System.out.println("Board offscreen buffer image created");
        }
        Graphics g1 = _buffer.getGraphics();
        g1.drawImage(_boardImg, 0, 0, null);
        for(int i = 0; i < 15; i++)
        {
            for(int j = 0; j < 15; j++)
            {
                int k = _boardState.letterAt(i, j);
                if(k != 100)
                {
                    g1.clipRect(j * 25, i * 25, 25, 25);
                    g1.drawImage(_app._tilesImg, j * 25, (i - k) * 25, null);
                    g1.dispose();
                    g1 = _buffer.getGraphics();
                }
            }

        }

        g1.dispose();
        g.drawImage(_buffer, 0, 0, this);
    }

    public synchronized boolean mouseDown(Event event, int i, int j)
    {
        int k = j / 25;
        int l = i / 25;
        if(l < 15 && k < 15)
        {
            if(_app._gameState.haveActiveTile())
            {
                if(_boardState.letterAt(k, l) == 100)
                {
                    Tile tile = _app._gameState.putActiveTile();
                    if(tile.isBlank())
                    {
                        tile.resetBlankTile();
                        BlankTileDlgFrame blanktiledlgframe = new BlankTileDlgFrame(tile);
                        BlankTileDlg blanktiledlg = new BlankTileDlg(blanktiledlgframe);
                        blanktiledlg.show();
                    }
                    _boardState.putTileAt(k, l, tile);
                    _app._gameState.addPlayedTileAt(k, l, tile);
                }
            } else
            if(_boardState.letterAt(k, l) != 100)
            {
                Tile tile1 = _app._gameState.removePlayedTileAt(k, l);
                if(tile1 != null)
                {
                    Tile tile2 = _boardState.pickupTileAt(k, l);
                    Debug.assert(tile1 == tile2, "Tile mismatch between played list and board state");
                    _app._gameState.pickupActiveTile(tile1);
                }
            }
            repaint();
        }
        return true;
    }

    public synchronized void setRow(String s)
    {
        _boardState.setRow(s);
    }

    public synchronized int letterAt(int i, int j)
    {
        return _boardState.letterAt(i, j);
    }

    public synchronized boolean hasExistingTileAdjacentTo(int i, int j)
    {
        Debug.assert(i >= 0 && i < 15 && j >= 0 && j < 15, "Invalid row or col");
        return _boardState.letterAt(i + 1, j) != 100 && !_app._gameState.hasPlayedTileAt(i + 1, j) || _boardState.letterAt(i - 1, j) != 100 && !_app._gameState.hasPlayedTileAt(i - 1, j) || _boardState.letterAt(i, j + 1) != 100 && !_app._gameState.hasPlayedTileAt(i, j + 1) || _boardState.letterAt(i, j - 1) != 100 && !_app._gameState.hasPlayedTileAt(i, j - 1);
    }

    public static final int NUMSQR = 15;
    private Client _app;
    private Image _boardImg;
    private int _width;
    private int _height;
    private Image _buffer;
    private BoardState _boardState;
}

