// 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:   BoardState.java

package Scrabble;

import KennethTam.Debug;
import java.awt.Point;
import java.util.Hashtable;
import java.util.StringTokenizer;

// Referenced classes of package Scrabble:
//            BoardSquare, PremiumInfo, Tile

public class BoardState
{

    public int letterAt(int i, int j)
    {
        if(i >= 15 || j >= 15 || i < 0 || j < 0)
            return 100;
        Tile tile = _squares[i][j]._tile;
        if(tile != null)
            return tile.letter();
        else
            return 100;
    }

    public int wordModifierAt(int i, int j)
    {
        if(i >= 15 || j >= 15 || i < 0 || j < 0)
            return 1;
        switch(_squares[i][j]._scoreModifier)
        {
        case 3: // '\003'
            return 2;

        case 4: // '\004'
            return 3;
        }
        return 1;
    }

    public int letterModifierAt(int i, int j)
    {
        if(i >= 15 || j >= 15 || i < 0 || j < 0)
            return 1;
        switch(_squares[i][j]._scoreModifier)
        {
        case 1: // '\001'
            return 2;

        case 2: // '\002'
            return 3;
        }
        return 1;
    }

    public boolean putTileAt(int i, int j, Tile tile)
    {
        Debug.assert(tile != null, "Putting down a null tile");
        Debug.assert(i < 15 && j < 15, "Bad row/col");
        if(_squares[i][j]._tile != null)
        {
            return false;
        } else
        {
            _squares[i][j]._tile = tile;
            return true;
        }
    }

    public Tile pickupTileAt(int i, int j)
    {
        Debug.assert(i < 15 && j < 15, "Bad row/col");
        Tile tile = _squares[i][j]._tile;
        _squares[i][j]._tile = null;
        return tile;
    }

    private void setTileAt(int i, int j, String s)
    {
        Debug.assert(i < 15 && j < 15, "Bad row/col");
        Tile tile = null;
        if(!s.equals("."))
            tile = new Tile(s);
        _squares[i][j]._tile = tile;
    }

    public int baseScoreAt(int i, int j)
    {
        Tile tile = _squares[i][j]._tile;
        if(tile != null)
            return tile.score();
        else
            return 0;
    }

    public int scoreAt(int i, int j, Hashtable hashtable, int ai[])
    {
        int k = 0;
        Tile tile = _squares[i][j]._tile;
        if(tile != null)
        {
            k = tile.score();
            if(_squares[i][j]._scoreModifier == 1)
            {
                if(hashtable.containsKey((new Point(j, i)).toString()))
                    k *= 2;
            } else
            if(_squares[i][j]._scoreModifier == 2)
            {
                Point point = new Point(j, i);
                if(hashtable.containsKey((new Point(j, i)).toString()))
                    k *= 3;
            } else
            if(_squares[i][j]._scoreModifier == 3)
            {
                Point point1 = new Point(j, i);
                if(hashtable.containsKey((new Point(j, i)).toString()))
                    ai[0] *= 2;
            } else
            if(_squares[i][j]._scoreModifier == 4 && hashtable.containsKey((new Point(j, i)).toString()))
                ai[0] *= 3;
        }
        return k;
    }

    public void setRow(String s)
    {
        StringTokenizer stringtokenizer = new StringTokenizer(s);
        Debug.assert(stringtokenizer.countTokens() == 18, "Invalid format for row");
        stringtokenizer.nextToken();
        stringtokenizer.nextToken();
        int j = Integer.parseInt(stringtokenizer.nextToken());
        for(int i = 0; i < 15; i++)
            setTileAt(j, i, stringtokenizer.nextToken());

    }

    public BoardState()
    {
        _squares = new BoardSquare[15][15];
        for(int i = 0; i < 15; i++)
        {
            for(int k = 0; k < 15; k++)
                _squares[i][k] = new BoardSquare();

        }

        for(int j = 0; j < 61; j++)
            _squares[_pi[j]._row][_pi[j]._col]._scoreModifier = _pi[j]._mod;

    }

    public boolean hasAdjacentTiles(int i, int j)
    {
        return letterAt(i + 1, j) != 100 || letterAt(i - 1, j) != 100 || letterAt(i, j + 1) != 100 || letterAt(i, j - 1) != 100;
    }

    public static final int SM_NONE = 0;
    public static final int SM_DL = 1;
    public static final int SM_TL = 2;
    public static final int SM_DW = 3;
    public static final int SM_TW = 4;
    private static final int NUMSQR = 15;
    private BoardSquare _squares[][];
    private static PremiumInfo _pi[];

    static 
    {
        _pi = new PremiumInfo[61];
        _pi[0] = new PremiumInfo(0, 0, 4);
        _pi[1] = new PremiumInfo(0, 7, 4);
        _pi[2] = new PremiumInfo(0, 14, 4);
        _pi[3] = new PremiumInfo(7, 0, 4);
        _pi[4] = new PremiumInfo(7, 14, 4);
        _pi[5] = new PremiumInfo(14, 0, 4);
        _pi[6] = new PremiumInfo(14, 7, 4);
        _pi[7] = new PremiumInfo(14, 14, 4);
        _pi[8] = new PremiumInfo(1, 1, 3);
        _pi[9] = new PremiumInfo(2, 2, 3);
        _pi[10] = new PremiumInfo(3, 3, 3);
        _pi[11] = new PremiumInfo(4, 4, 3);
        _pi[12] = new PremiumInfo(1, 13, 3);
        _pi[13] = new PremiumInfo(2, 12, 3);
        _pi[14] = new PremiumInfo(3, 11, 3);
        _pi[15] = new PremiumInfo(4, 10, 3);
        _pi[16] = new PremiumInfo(13, 1, 3);
        _pi[17] = new PremiumInfo(12, 2, 3);
        _pi[18] = new PremiumInfo(11, 3, 3);
        _pi[19] = new PremiumInfo(10, 4, 3);
        _pi[20] = new PremiumInfo(13, 13, 3);
        _pi[21] = new PremiumInfo(12, 12, 3);
        _pi[22] = new PremiumInfo(11, 11, 3);
        _pi[23] = new PremiumInfo(10, 10, 3);
        _pi[24] = new PremiumInfo(7, 7, 3);
        _pi[25] = new PremiumInfo(0, 3, 1);
        _pi[26] = new PremiumInfo(0, 11, 1);
        _pi[27] = new PremiumInfo(2, 6, 1);
        _pi[28] = new PremiumInfo(2, 8, 1);
        _pi[29] = new PremiumInfo(3, 0, 1);
        _pi[30] = new PremiumInfo(3, 7, 1);
        _pi[31] = new PremiumInfo(3, 14, 1);
        _pi[32] = new PremiumInfo(6, 2, 1);
        _pi[33] = new PremiumInfo(6, 6, 1);
        _pi[34] = new PremiumInfo(6, 8, 1);
        _pi[35] = new PremiumInfo(6, 12, 1);
        _pi[36] = new PremiumInfo(7, 3, 1);
        _pi[37] = new PremiumInfo(7, 11, 1);
        _pi[38] = new PremiumInfo(8, 2, 1);
        _pi[39] = new PremiumInfo(8, 6, 1);
        _pi[40] = new PremiumInfo(8, 8, 1);
        _pi[41] = new PremiumInfo(8, 12, 1);
        _pi[42] = new PremiumInfo(11, 0, 1);
        _pi[43] = new PremiumInfo(11, 7, 1);
        _pi[44] = new PremiumInfo(11, 14, 1);
        _pi[45] = new PremiumInfo(12, 6, 1);
        _pi[46] = new PremiumInfo(12, 8, 1);
        _pi[47] = new PremiumInfo(14, 3, 1);
        _pi[48] = new PremiumInfo(14, 11, 1);
        _pi[49] = new PremiumInfo(1, 5, 2);
        _pi[50] = new PremiumInfo(1, 9, 2);
        _pi[51] = new PremiumInfo(5, 1, 2);
        _pi[52] = new PremiumInfo(5, 5, 2);
        _pi[53] = new PremiumInfo(5, 9, 2);
        _pi[54] = new PremiumInfo(5, 13, 2);
        _pi[55] = new PremiumInfo(9, 1, 2);
        _pi[56] = new PremiumInfo(9, 5, 2);
        _pi[57] = new PremiumInfo(9, 9, 2);
        _pi[58] = new PremiumInfo(9, 13, 2);
        _pi[59] = new PremiumInfo(13, 5, 2);
        _pi[60] = new PremiumInfo(13, 9, 2);
    }
}
