// 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:   BrickBoard.java

import java.applet.Applet;
import java.awt.*;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.util.Vector;

class BrickBoard extends Canvas
{

    BrickBoard(int i, int j, int k, int l, int ai[][], GameControl gamecontrol)
    {
        aktX = -1;
        activeX = -1;
        maxX = i;
        maxY = j;
        w = 1 + i * 26;
        h = 1 + j * 26;
        fieldType = ai;
        fieldBrick = new Brick[j][i];
        gcontrol = gamecontrol;
        moveOn = false;
        bricks = new Vector();
        reshape(k, l, 1 + 26 * i, 1 + 26 * j);
    }

    void acceptBricks()
    {
        int i = bricks.size();
        for(int j = 0; j < i; j++)
        {
            Brick brick = brickAt(j);
            brick.moveable = false;
            redrawBrick(brick.x, brick.y);
        }

        bricks.removeAllElements();
    }

    Brick brickAt(int i)
    {
        return (Brick)bricks.elementAt(i);
    }

    int bricksContained()
    {
        return bricks.size();
    }

    int countHWordValue(int i, int j)
    {
        int k = 0;
        int l = 1;
        int i1 = i;
        int j1 = i;
        for(; getFieldBrick(i1 - 1, j) != null; i1--);
        for(; getFieldBrick(j1 + 1, j) != null; j1++);
        if(i1 == j1)
            return 0;
        for(int k1 = i1; k1 <= j1; k1++)
        {
            Brick brick = getFieldBrick(k1, j);
            int l1 = brick.value;
            if(brick.moveable)
            {
                l1 *= getBonusLetter(k1, j);
                l *= getBonusWord(k1, j);
            }
            k += l1;
        }

        return k * l;
    }

    int countVWordValue(int i, int j)
    {
        int k = 0;
        int l = 1;
        int i1 = j;
        int j1 = j;
        for(; getFieldBrick(i, i1 - 1) != null; i1--);
        for(; getFieldBrick(i, j1 + 1) != null; j1++);
        if(i1 == j1)
            return 0;
        for(int k1 = i1; k1 <= j1; k1++)
        {
            Brick brick = getFieldBrick(i, k1);
            int l1 = brick.value;
            if(brick.moveable)
            {
                l1 *= getBonusLetter(i, k1);
                l *= getBonusWord(i, k1);
            }
            k += l1;
        }

        return k * l;
    }

    int getBonusLetter(int i, int j)
    {
        if(fieldType[j][i] < letterBonus.length)
            return letterBonus[fieldType[j][i]];
        else
            return 1;
    }

    int getBonusWord(int i, int j)
    {
        if(fieldType[j][i] < wordBonus.length)
            return wordBonus[fieldType[j][i]];
        else
            return 1;
    }

    Brick getFieldBrick(int i, int j)
    {
        if(i < 0 || i >= maxX || j < 0 || j >= maxY)
            return null;
        else
            return fieldBrick[j][i];
    }

    public boolean mouseDown(Event event, int i, int j)
    {
        if(offg == null)
            offg = getGraphics();
        if(moveOn)
        {
            i /= 26;
            if(i > maxX - 1)
                i = maxX - 1;
            j /= 26;
            if(j > maxY - 1)
                j = maxY - 1;
            gcontrol.brickBoardClick(this, i, j);
        }
        return true;
    }

    public boolean mouseExit(Event event, int i, int j)
    {
        if(offg == null)
            offg = getGraphics();
        int k = aktX;
        int l = aktY;
        aktX = -1;
        redrawBrick(k, l);
        return true;
    }

    public boolean mouseMove(Event event, int i, int j)
    {
        if(offg == null)
            offg = getGraphics();
        if(moveOn)
        {
            i /= 26;
            if(i > maxX - 1)
                i = maxX - 1;
            j /= 26;
            if(j > maxY - 1)
                j = maxY - 1;
            if(aktX != i || aktY != j)
            {
                int k = aktX;
                int l = aktY;
                aktX = i;
                aktY = j;
                redrawBrick(k, l);
                redrawBrick(aktX, aktY);
            }
        }
        return true;
    }

    public void paint(Graphics g)
    {
        if(offg == null)
            offg = getGraphics();
        g.setColor(c);
        g.drawLine(0, 0, size().width, 0);
        g.drawLine(0, 0, 0, size().height);
        for(int i = 0; i < maxY; i++)
        {
            for(int j = 0; j < maxX; j++)
                redrawBrick(j, i);

        }

    }

    void putBrick(Brick brick, int i, int j)
    {
        fieldBrick[j][i] = brick;
        bricks.addElement(brick);
        brick.x = i;
        brick.y = j;
        redrawBrick(i, j);
    }

    void redrawBrick(int i, int j)
    {
        if(offg == null || i == -1)
            return;
        Brick brick = fieldBrick[j][i];
        if(brick != null)
        {
            if(brick.moveable)
            {
                if(i == activeX && j == activeY)
                    offg.drawImage(fieldImage[9], 1 + i * 26, 1 + j * 26, this);
                else
                    offg.drawImage(fieldImage[8], 1 + i * 26, 1 + j * 26, this);
            } else
            {
                offg.drawImage(fieldImage[7], 1 + i * 26, 1 + j * 26, this);
            }
            offg.drawImage(brick.getImage(), 1 + i * 26, j * 26, this);
        } else
        {
            offg.drawImage(fieldImage[fieldType[j][i]], 1 + i * 26, 1 + j * 26, this);
        }
        if(aktX == i && aktY == j)
            offg.drawImage(fieldImage[6], 1 + i * 26, 1 + j * 26, this);
    }

    void rejectBricks()
    {
        int i = bricks.size();
        for(int j = 0; j < i; j++)
        {
            Brick brick = (Brick)bricks.elementAt(0);
            removeBrick(brick.x, brick.y);
        }

    }

    void removeBrick(int i, int j)
    {
        bricks.removeElement(fieldBrick[j][i]);
        fieldBrick[j][i] = null;
        redrawBrick(i, j);
    }

    void setActiveBrick(int i, int j)
    {
        activeX = i;
        activeY = j;
        redrawBrick(i, j);
    }

    void setInactiveBrick(int i, int j)
    {
        activeX = -1;
        redrawBrick(i, j);
    }

    void setMoveOn(boolean flag)
    {
        moveOn = flag;
    }

    static void staticInit(Applet applet)
    {
        fieldImage = new Image[fieldName.length];
        for(int i = 0; i < fieldName.length; i++)
            fieldImage[i] = Const.getImage(fieldName[i] + ".gif");

        Image image = Const.getImage("letter.gif");
        char c1 = '\u011E';
        char c2 = '\u011E';
        int ai[] = new int[c1 * c2];
        PixelGrabber pixelgrabber = new PixelGrabber(image, 0, 0, c1, c2, ai, 0, c1);
        try
        {
            pixelgrabber.grabPixels();
        }
        catch(Exception _ex) { }
        int j = 0;
        for(int l = 0; l < _German.numbers.length; l++)
            j += _German.numbers[l];

        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Image aimage[] = new Image[j];
        int k = 0;
        for(int i1 = 0; i1 < _German.numbers.length; i1++)
        {
            for(int j1 = 0; j1 < _German.numbers[i1]; j1++)
            {
                Image image1 = toolkit.createImage(new MemoryImageSource(26, 26, ai, i1 * 26 + j1 * 26 * c1, c1));
                aimage[k] = image1;
                k++;
            }

        }

        ai = null;
        pixelgrabber = null;
        toolkit = null;
        Brick.staticInit(aimage);
    }

    public void update(Graphics g)
    {
        paint(g);
    }

    static final String fieldName[] = {
        "empty", "star", "blue1", "blue2", "red1", "red2", "selector", "blank1", "blank2", "blank3"
    };
    static final int letterBonus[] = {
        1, 1, 2, 3
    };
    static final int wordBonus[] = {
        1, 2, 1, 1, 2, 3
    };
    static final Color c = new Color(230, 230, 230);
    static Image fieldImage[];
    Graphics offg;
    GameControl gcontrol;
    boolean moveOn;
    int fieldType[][];
    Brick fieldBrick[][];
    Vector bricks;
    int maxX;
    int maxY;
    int w;
    int h;
    int aktX;
    int aktY;
    int activeX;
    int activeY;

}
