Android Open Source - AndroSol Game Board Metrics






From Project

Back to project page AndroSol.

License

The source code is released under:

MIT License

If you think the Android project AndroSol listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package lib.cards.views;
//w  w w.  j a  va  2  s  .  c  o  m
import lib.cards.models.CardStack;
import lib.cards.models.Foundation;
import lib.cards.models.FreeCell;
import lib.cards.models.GameProperties;
import lib.cards.models.Stock;
import lib.cards.models.Tableau;
import lib.cards.models.Waste;
import lib.cards.utilities.Point;
import lib.cards.utilities.Size;

public abstract class GameBoardMetrics {
    protected GameBoardMetrics() {
    }

    public abstract DeckMetrics getDeckMetrics();

    public abstract GameProperties getGameProperties();

    public Size getBoardSize() {
        double widthPlusMargin = getDeckMetrics().getCardSize().width
                + getDeckMetrics().getMargin().width;
        double heightPlusMargin = getDeckMetrics().getCardSize().height
                + getDeckMetrics().getMargin().height;

        // Board size length includes space for the stock, the waste and the
        // tableaus plus a right margin.
        // Board size height includes space for the foundations 13 overlapped
        // cards in a tableau plus a right margin
        return new Size(
                (Math.max(getGameProperties().getNumberOfTableauPiles(), 2
                        + getGameProperties().getNumberOfFreeCells()
                        + getGameProperties().getNumberOfFoundations()) * (widthPlusMargin))
                        + getDeckMetrics().getMargin().width,
                (heightPlusMargin)
                        + (13 + getGameProperties()
                                .getNumberOfCardsPerTableau())
                        * getDeckMetrics().getCardOverlap().height
                        + getDeckMetrics().getMargin().width);

    }

    public boolean usesStock() {
        // If all cards are dealt, no need for stock.
        return getGameProperties().getNumberOfCardsPerTableau()
                * getGameProperties().getNumberOfTableauPiles() < getGameProperties()
                .getNumberOfCards();
    }

    public boolean usesWaste() {
        return usesStock();
    }

    public Point getStockPosition() {
        if (usesStock()) {
            return new Point(20, 20);
        }

        return new Point(20 - getDeckMetrics().getCardSize().width
                - getDeckMetrics().getMargin().width, 20);
    }

    public Point getWastePosition() {
        if (usesWaste()) {
            return new Point(getStockPosition().x
                    + getDeckMetrics().getCardSize().width
                    + getDeckMetrics().getMargin().width, getStockPosition().y);
        }
        return getStockPosition();
    }

    public Point getTableauPosition(int tableau, int cardIndex) {
        Point basePosition;
        if (usesStock()) {
            basePosition = new Point(getStockPosition().x
                    + (tableau)
                    * (getDeckMetrics().getCardSize().width + getDeckMetrics()
                            .getMargin().width), getStockPosition().y
                    + (getDeckMetrics().getCardSize().height + getDeckMetrics()
                            .getMargin().height));
        } else {
            basePosition = new Point(getFreeCellPosition(0).x
                    + (tableau)
                    * (getDeckMetrics().getCardSize().width + getDeckMetrics()
                            .getMargin().width), getStockPosition().y
                    + (getDeckMetrics().getCardSize().height + getDeckMetrics()
                            .getMargin().height));
        }
        return new Point(basePosition.x, basePosition.y + cardIndex
                * (getDeckMetrics().getCardOverlap().height));
    }

    public Point getFreeCellPosition(int index) {
        return new Point(getWastePosition().x
                + (index + 1)
                * (getDeckMetrics().getCardSize().width + getDeckMetrics()
                        .getMargin().width), getStockPosition().y);
    }

    public Point getFoundationPosition(int index) {
        return new Point(getFreeCellPosition(getGameProperties()
                .getNumberOfFreeCells() - 1).x
                + (index + 1)
                * (getDeckMetrics().getCardSize().width + getDeckMetrics()
                        .getMargin().width), getStockPosition().y);
    }

    public Point CardPosition(CardStack stack, int cardIndex) {
        if (stack.getClass() == Stock.class) {
            return getStockPosition();
        }
        if (stack.getClass() == Waste.class) {
            return getWastePosition();
        }
        if (stack.getClass() == Foundation.class) {
            return getFoundationPosition(stack.getIndex());
        }
        if (stack.getClass() == FreeCell.class) {
            return getFreeCellPosition(stack.getIndex());
        }
        if (stack.getClass() == Tableau.class) {
            return getTableauPosition(stack.getIndex(), cardIndex);
        }
        return new Point(0, 0);
    }
}




Java Source Code List

com.example.androsol.AndroidDeck.java
com.example.androsol.AndroidGameBoard.java
com.example.androsol.CardSpriteImpl.java
com.example.androsol.DeckTheme.java
com.example.androsol.DisplayMessageActivity.java
com.example.androsol.GameSurface.java
com.example.androsol.MainActivity.java
com.example.androsol.SpriteImpl.java
com.example.androsol.StackSpriteImpl.java
com.example.androsol.StandardDeck.java
lib.cards.controllers.Actions.java
lib.cards.controllers.DealAction.java
lib.cards.controllers.GameActionState.java
lib.cards.controllers.GameAction.java
lib.cards.controllers.GameController.java
lib.cards.controllers.NewGameActionState.java
lib.cards.controllers.NewGameAction.java
lib.cards.controllers.StackMoveAction.java
lib.cards.controllers.StackMoveState.java
lib.cards.models.CardColor.java
lib.cards.models.CardStackId.java
lib.cards.models.CardStack.java
lib.cards.models.CardState.java
lib.cards.models.CardSuit.java
lib.cards.models.CardValue.java
lib.cards.models.Card.java
lib.cards.models.CardsMovedEventHandler.java
lib.cards.models.CardsMovedEventObject.java
lib.cards.models.EmptyTableauPileFilledBy.java
lib.cards.models.EventHandler.java
lib.cards.models.FoundationBaseCard.java
lib.cards.models.FoundationSequence.java
lib.cards.models.Foundation.java
lib.cards.models.FreeCell.java
lib.cards.models.GameEventObject.java
lib.cards.models.GameOverEventHandler.java
lib.cards.models.GameOverEventObject.java
lib.cards.models.GameProperties.java
lib.cards.models.GameState.java
lib.cards.models.Game.java
lib.cards.models.MoveGroupsOfCardsAsAUnit.java
lib.cards.models.NewGameEventHandler.java
lib.cards.models.NumberOfCardsDealtFromStock.java
lib.cards.models.RedealsAllowed.java
lib.cards.models.RestoreGameEventHandler.java
lib.cards.models.ScoreChangedEventHandler.java
lib.cards.models.ScoreChangedEventObject.java
lib.cards.models.StackType.java
lib.cards.models.Stock.java
lib.cards.models.SubStackMovedEventHandler.java
lib.cards.models.SubStackMovedEventObject.java
lib.cards.models.SubStack.java
lib.cards.models.TableauSequence.java
lib.cards.models.TableauType.java
lib.cards.models.Tableau.java
lib.cards.models.Waste.java
lib.cards.utilities.CollectionUtils.java
lib.cards.utilities.CommandImpl.java
lib.cards.utilities.Command.java
lib.cards.utilities.Point.java
lib.cards.utilities.Rect.java
lib.cards.utilities.Size.java
lib.cards.utilities.UndoStack.java
lib.cards.views.CardSprite.java
lib.cards.views.DeckMetrics.java
lib.cards.views.Deck.java
lib.cards.views.GameBoardImpl.java
lib.cards.views.GameBoardMetrics.java
lib.cards.views.GameBoard.java
lib.cards.views.SpriteAddedEventHandler.java
lib.cards.views.SpriteDefaultActionEventHandler.java
lib.cards.views.SpriteEventObject.java
lib.cards.views.SpriteRemovedEventHandler.java
lib.cards.views.SpriteSelectedEventHandler.java
lib.cards.views.Sprite.java
lib.cards.views.StackSprite.java