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

package Scrabble;

import KennethTam.Debug;
import java.util.Vector;

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

public class ServerRackState
{

    public ServerRackState(TileBag tilebag)
    {
        Debug.assert(tilebag != null, "NULL tilebag arg");
        _vecTiles = new Vector(7);
        drawFrom(tilebag);
    }

    public int numTiles()
    {
        return _vecTiles.size();
    }

    public void drawFrom(TileBag tilebag)
    {
        Debug.assert(numTiles() >= 0 && numTiles() <= 7, "Invalid rack size!");
        Debug.assert(tilebag != null, "NULL tilebag arg");
        int j = 7 - numTiles();
        for(int i = 0; i < j; i++)
        {
            Tile tile = tilebag.drawTile();
            if(tile != null)
                _vecTiles.addElement(tile);
        }

    }

    public void exchangeAllTiles(TileBag tilebag)
    {
        Debug.assert(tilebag != null, "NULL tilebag arg");
        if(tilebag.numTiles() < 7)
            return;
        for(int i = 0; i < 7; i++)
            tilebag.putBackTile((Tile)_vecTiles.elementAt(i));

        _vecTiles.removeAllElements();
        for(int j = 0; j < 7; j++)
        {
            Tile tile = tilebag.drawTile();
            if(tile != null)
                _vecTiles.addElement(tile);
        }

        Debug.assert(numTiles() == 7, "Rack not full after exchange!");
    }

    public Tile playTile(int i)
    {
        Object obj = null;
        int k = numTiles();
        for(int j = 0; j < k; j++)
        {
            Tile tile = (Tile)_vecTiles.elementAt(j);
            if(tile.letter() == i)
            {
                _vecTiles.removeElementAt(j);
                return tile;
            }
        }

        return null;
    }

    public void returnTile(Tile tile)
    {
        Debug.assert(tile != null, "Tried to return a NULL tile");
        Debug.assert(numTiles() < 7, "Tried to return a tile to a full rack!");
        _vecTiles.addElement(tile);
    }

    public int letterAt(int i)
    {
        if(i >= 0 && i < numTiles())
        {
            Tile tile = (Tile)_vecTiles.elementAt(i);
            Debug.assert(tile != null, "Invalid tile stored in rack");
            return tile.letter();
        } else
        {
            return 100;
        }
    }

    public String toString()
    {
        String s = new String("");
        for(int i = 0; i < numTiles(); i++)
        {
            Tile tile = (Tile)_vecTiles.elementAt(i);
            Debug.assert(tile != null, "Invalid tile stored in rack");
            s = s + tile.letter() + " ";
        }

        return s;
    }

    public int rackScore()
    {
        Object obj = null;
        int j = numTiles();
        int k = 0;
        for(int i = 0; i < j; i++)
        {
            Tile tile = (Tile)_vecTiles.elementAt(i);
            k += tile.score();
        }

        return k;
    }

    private static final int RACKSIZE = 7;
    private Vector _vecTiles;
}

