All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sim.app.pacman.Overlay Maven / Gradle / Ivy

Go to download

MASON is a fast discrete-event multiagent simulation library core in Java, designed to be the foundation for large custom-purpose Java simulations, and also to provide more than enough functionality for many lightweight simulation needs. MASON contains both a model library and an optional suite of visualization tools in 2D and 3D.

The newest version!
/*
  Copyright 2009  by Sean Luke and Vittorio Zipparo
  Licensed under the Academic Free License version 3.0
  See the file "LICENSE" for more information
*/

package sim.app.pacman;
import sim.portrayal.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.font.*;
import sim.display.*;

/** A FieldPortrayal2D which has no field, but rather draws some text on the screen.  We use
    this to draw score information etc. */

public class Overlay extends FieldPortrayal2D
    {
    private static final long serialVersionUID = 1;

    PacManWithUI ui;
    public static final int GUTTER = 32;
    public static final int BORDER = 8;
    Font font = new Font("SansSerif", Font.BOLD, 18);
    Color color = new Color(33, 33, 222);

    public Overlay(PacManWithUI ui) { this.ui = ui; }
        
    int firstTimeScoreY = 0;  // surprisingly, the bounds height doesn't stay the same, so we store it here

    public void draw(Object object, Graphics2D graphics, DrawInfo2D info)
        {
        PacMan pacman = (PacMan)(ui.state);
        graphics.setFont(font);
        graphics.setColor(Color.white);
                
        // first figure out the Y location for the scores etc.  This is done ONCE and stored away because
        // the font numbers sometimes don't have the same bounding box vertically, causing the text to jump about.
        Rectangle2D bounds = new TextLayout("" + pacman.score, font,  graphics.getFontRenderContext()).getBounds();
        if (firstTimeScoreY == 0)
            firstTimeScoreY = (int)((GUTTER + bounds.getHeight()) / 2);
                
        // if we're paused, say so
        if (((SimpleController)(ui.controller)).getPlayState() == SimpleController.PS_PAUSED)
            {
            bounds = new TextLayout("Paused", font,  graphics.getFontRenderContext()).getBounds();
            graphics.drawString("Paused", (int)((info.clip.width - bounds.getWidth()) / 2), firstTimeScoreY);
            }
        else    // otherwise, show the scores
            {
            graphics.drawString("Deaths: " + pacman.deaths, BORDER, firstTimeScoreY);
            graphics.drawString("Level: " + pacman.level, (int)((info.clip.width - BORDER * 2) * 1 / 3 + BORDER), firstTimeScoreY);
            graphics.drawString("Score: " + pacman.score, (int)((info.clip.width - BORDER * 2) * 2 / 3 + BORDER), firstTimeScoreY);
            }
                
        // show the text at bottom
        String text = "M: MASON   P: Pause   R: Reset   adws / \u2190\u2192\u2191\u2193";
        bounds = new TextLayout(text, font,  graphics.getFontRenderContext()).getBounds();
        graphics.drawString(text, (int)((info.clip.width - bounds.getWidth()) / 2), 
            (int)((info.clip.height - GUTTER + firstTimeScoreY)));
        }
    }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy