public void init(final Controller c) { super.init(c); // make the displayer display = new Display2D(448, 560, this) { public void createConsoleMenu() {} public void quit() { super.quit(); ((SimpleController) c).doClose(); } }; display.setBackdrop(Color.black); displayFrame = display.createFrame(); displayFrame.setTitle("MASON Pac Man"); c.registerFrame(displayFrame); // register the frame so it appears in the "Display" list displayFrame.setVisible(true); // Notice the order: first the background, then the dots, then the agents, then the overlay display.attach(mazePortrayal, "Maze"); // display.attach( background, "Background"); display.attach(dotPortrayal, "Dots", 8, 8, true); display.attach(agentPortrayal, "Agents", 8, 8, true); display.attach(new Overlay(this), "Overlay"); // Some stuff to make this feel less like MASON // delete the header display.remove(display.header); // delete all listeners display.removeListeners(); // delete the scroll bars display.display.setVerticalScrollBarPolicy(display.display.VERTICAL_SCROLLBAR_NEVER); display.display.setHorizontalScrollBarPolicy(display.display.HORIZONTAL_SCROLLBAR_NEVER); // when we close the window, the application quits displayFrame.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE); // can't resize displayFrame.setResizable(false); // add antialiasing and interpolation display.insideDisplay.setupHints(true, false, false); // the window won't be the right size now -- modify it. displayFrame.pack(); // Now we add in the listeners we want addListeners(display); }
public void setupPortrayals() { PacMan pacman = (PacMan) state; // Create the agent portrayal agentPortrayal.setField(pacman.agents); // The Pac. Note that you can have multiple pacs, each with different tags, and set it up like // below to display them with different colors. For now we've got it set to one pac. agentPortrayal.setPortrayalForClass( Pac.class, new PacPortrayal(pacman, Color.yellow) { public void draw(Object object, Graphics2D graphics, DrawInfo2D info) { if (((Pac) object).tag == 0) color = Color.yellow; else color = Color.green; super.draw(object, graphics, info); } }); // Blinky is a red ghos unless he's scared, then he's a blue ghost. agentPortrayal.setPortrayalForClass( Blinky.class, new FacetedPortrayal2D( new SimplePortrayal2D[] { new ImagePortrayal2D(this.getClass(), "images/blinkyu.png", 2), new ImagePortrayal2D(this.getClass(), "images/blinkyl.png", 2), new ImagePortrayal2D(this.getClass(), "images/blinkyd.png", 2), new ImagePortrayal2D(this.getClass(), "images/blinkyr.png", 2), new ImagePortrayal2D(this.getClass(), "images/frightened.png", 2), new ImagePortrayal2D(this.getClass(), "images/frightened2.png", 2), })); // Pinky is a pink ghost unless he's scared, then he's a blue ghost. agentPortrayal.setPortrayalForClass( Pinky.class, new FacetedPortrayal2D( new SimplePortrayal2D[] { new ImagePortrayal2D(this.getClass(), "images/pinkyu.png", 2), new ImagePortrayal2D(this.getClass(), "images/pinkyl.png", 2), new ImagePortrayal2D(this.getClass(), "images/pinkyd.png", 2), new ImagePortrayal2D(this.getClass(), "images/pinkyr.png", 2), new ImagePortrayal2D(this.getClass(), "images/frightened.png", 2), new ImagePortrayal2D(this.getClass(), "images/frightened2.png", 2), })); // Inky is a cyan ghost unless he's scared, then he's a blue ghost. agentPortrayal.setPortrayalForClass( Inky.class, new FacetedPortrayal2D( new SimplePortrayal2D[] { new ImagePortrayal2D(this.getClass(), "images/inkyu.png", 2), new ImagePortrayal2D(this.getClass(), "images/inkyl.png", 2), new ImagePortrayal2D(this.getClass(), "images/inkyd.png", 2), new ImagePortrayal2D(this.getClass(), "images/inkyr.png", 2), new ImagePortrayal2D(this.getClass(), "images/frightened.png", 2), new ImagePortrayal2D(this.getClass(), "images/frightened2.png", 2), })); // Clyde is a orange ghost unless he's scared, then he's a ghost rectangle. agentPortrayal.setPortrayalForClass( Clyde.class, new FacetedPortrayal2D( new SimplePortrayal2D[] { new ImagePortrayal2D(this.getClass(), "images/clydeu.png", 2), new ImagePortrayal2D(this.getClass(), "images/clydel.png", 2), new ImagePortrayal2D(this.getClass(), "images/clyded.png", 2), new ImagePortrayal2D(this.getClass(), "images/clyder.png", 2), new ImagePortrayal2D(this.getClass(), "images/frightened.png", 2), new ImagePortrayal2D(this.getClass(), "images/frightened2.png", 2), })); // Create the dot portrayal (also the energizers) dotPortrayal.setField(pacman.dots); // Energizers are big dotPortrayal.setPortrayalForClass(Energizer.class, new OvalPortrayal2D(Color.white, 1)); // dots are small dotPortrayal.setPortrayalForClass(Dot.class, new OvalPortrayal2D(Color.white, 0.4)); // set up the maze portrayal mazePortrayal.setPortrayalForAll(new MazeCellPortrayal(pacman.maze)); mazePortrayal.setField(pacman.maze); // add the RateAdjuster scheduleRepeatingImmediatelyAfter(new RateAdjuster(FRAMES_PER_SECOND)); // reschedule the displayer display.reset(); // redraw the display display.repaint(); }
/** Creates key listeners which issue requests to the simulation. */ public void addListeners(final Display2D display) { final PacMan pacman = (PacMan) state; final SimpleController cont = (SimpleController) controller; // Make us able to take focus -- this is by default true usually anyway display.setFocusable(true); // Make us request focus whenever our window comes up displayFrame.addWindowListener( new WindowAdapter() { public void windowActivated(WindowEvent e) { display.requestFocusInWindow(); } }); // the display frame has just been set visible so we need to request focus once display.requestFocusInWindow(); display.addKeyListener( new KeyAdapter() { public void keyPressed(KeyEvent e) { int c = e.getKeyCode(); switch (c) { case KeyEvent.VK_UP: pacman.actions[0] = Pac.N; break; case KeyEvent.VK_DOWN: pacman.actions[0] = Pac.S; break; case KeyEvent.VK_LEFT: pacman.actions[0] = Pac.W; break; case KeyEvent.VK_RIGHT: pacman.actions[0] = Pac.E; break; case KeyEvent.VK_W: pacman.actions[1] = Pac.N; break; case KeyEvent.VK_S: pacman.actions[1] = Pac.S; break; case KeyEvent.VK_A: pacman.actions[1] = Pac.W; break; case KeyEvent.VK_D: pacman.actions[1] = Pac.E; break; case KeyEvent .VK_R: // Reset the board. Easiest way: stop and play, which calls start() cont.pressStop(); cont.pressPlay(); break; case KeyEvent.VK_P: // Pause or unpause the game cont.pressPause(); break; case KeyEvent.VK_M: // Call forth MASON's new simulation window if (cont.getPlayState() != cont.PS_PAUSED) // pause it! cont.pressPause(); cont.doNew(); // the MASON window belongs to our frame, so Java stupidly doesn't send // us a window activated event when the MASON window is closed and our // frame comes to the fore again. So we have to manually do request // focus again here. display.requestFocusInWindow(); break; default: // do nothing break; } } }); }