Package jbrickbreaker.view

Source Code of jbrickbreaker.view.InfoView

package jbrickbreaker.view;

import java.awt.*;
import java.awt.font.TextLayout;
import java.awt.geom.Rectangle2D;
import java.text.MessageFormat;
import java.util.Locale;

import javax.swing.JComponent;

import jbrickbreaker.JBrickBreaker;
import jbrickbreaker.model.Game;

/**
* This view displays some information such as the current player score and the
* number of lives he has left.
*
* Date: 12 Dec 2010
* Time: 15:58:55
* @author Thomas Michel
*/
public class InfoView extends JComponent implements IScore, ILives, ILanguage {
    private Game game;
    private String scoreStr, livesStr, playerStr;

    private JBrickBreaker brickbreacker;

    /**
     *
     * @author Thomas Michel
     */
    public InfoView(Game g, JBrickBreaker brickbreacker) {
        super();
        this.brickbreacker = brickbreacker;
        game = g;
        setSize(500, 25);
        setMinimumSize(new Dimension(JBrickBreaker.GAME_WIDTH, 25));
        setPreferredSize(new Dimension(JBrickBreaker.GAME_WIDTH, 25));
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        final int baseMargin = 5;
        final int spaceMargin = 2;
        final int yOffset = 20;
        Graphics2D g2d = (Graphics2D) g.create();
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

        Font bigger = g2d.getFont().deriveFont(18f);
        drawScore(g2d, bigger, yOffset, baseMargin, spaceMargin);
        drawLives(g2d, bigger, yOffset);
        drawPlayer(g2d, bigger, yOffset);

    }

    private void drawPlayer(Graphics2D g2d, Font bigger, int yOffset) {
        g2d.setFont(bigger);
        g2d.setColor(Color.BLACK);
        TextLayout tl = new TextLayout(playerStr, g2d.getFont(),
                g2d.getFontRenderContext());
        Rectangle2D r = tl.getBounds();
        tl.draw(g2d, (float) (getWidth() - r.getWidth()) / 2, yOffset);
    }

    private void drawLives(Graphics2D g2d, Font bigger, int yOffset) {
        int lives = game.getLives();
        g2d.setFont(bigger);
        g2d.setColor(Color.BLACK);
        TextLayout tl = new TextLayout(livesStr, g2d.getFont(),
                g2d.getFontRenderContext());
        Rectangle2D r = tl.getBounds();
        Rectangle life = new Rectangle(20, 10);
        int margin = 12;
        if (lives > 3) {
            String s = "x " + lives; //$NON-NLS-1$
            TextLayout tl2 = new TextLayout(s, g2d.getFont(),
                    g2d.getFontRenderContext());
            Rectangle2D r2 = tl2.getBounds();
            tl.draw(g2d,
                    (float) (getWidth() - r.getWidth() - life.width
                            - r2.getWidth() - margin), yOffset);
            g2d.setColor(Color.RED);
            g2d.fillRect(getWidth() - (int) r2.getWidth() - life.width - margin
                    / 2, yOffset - life.height, life.width, life.height);
            g2d.setColor(Color.BLACK);
            g2d.drawRect(getWidth() - (int) r2.getWidth() - life.width - margin
                    / 2, yOffset - life.height, life.width, life.height);
            tl2.draw(g2d, (float) (getWidth() - r2.getWidth()), yOffset);
        } else {
            int livesMargin = 5;
            int maxMargin = 3 * (life.width + livesMargin);
            tl.draw(g2d,
                    (float) (getWidth() - r.getWidth() - life.width - maxMargin),
                    yOffset);
            for (int i = 1; i <= lives; i++) {
                g2d.setColor(Color.RED);
                g2d.fillRect(getWidth() - i * (life.width + livesMargin),
                        yOffset - life.height, life.width, life.height);
                g2d.setColor(Color.BLACK);
                g2d.drawRect(getWidth() - i * (life.width + livesMargin),
                        yOffset - life.height, life.width, life.height);
            }
        }
    }

    private void drawScore(Graphics2D g2d, Font bigger, float yOffset,
            float baseMargin, float spaceMargin) {
        String s = String.valueOf(game.getScore());
        g2d.setFont(bigger);

        TextLayout tl = new TextLayout(scoreStr, g2d.getFont(),
                g2d.getFontRenderContext());
        tl.draw(g2d, baseMargin, yOffset);

        g2d.setColor(Color.LIGHT_GRAY.darker());
        TextLayout tl2 = new TextLayout(s, g2d.getFont(),
                g2d.getFontRenderContext());
        Rectangle2D r = tl.getBounds();
        tl2.draw(g2d, (float) (r.getWidth() + r.getX()) + baseMargin
                + spaceMargin, yOffset);

    }

    @Override
    public void updateLives(int lives) {
        repaint();
    }

    @Override
    public void updateScore(int score) {
        repaint();
    }

    @Override
    public void updateLanguage(Locale lang) {
        scoreStr = brickbreacker.getString("InfoView.0"); //$NON-NLS-1$
        livesStr = brickbreacker.getString("InfoView.1"); //$NON-NLS-1$
        playerStr = MessageFormat
                .format(brickbreacker.getString("InfoView.2"), game.getPlayer().getName()); //$NON-NLS-1$
        repaint();
    }
}
TOP

Related Classes of jbrickbreaker.view.InfoView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.