<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FGame%2FGame_Animation</id>
		<title>Java/Game/Game Animation - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FGame%2FGame_Animation"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Game/Game_Animation&amp;action=history"/>
		<updated>2026-04-06T22:51:00Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Game/Game_Animation&amp;diff=8547&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Game/Game_Animation&amp;diff=8547&amp;oldid=prev"/>
				<updated>2010-06-01T07:07:37Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 07:07, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Game/Game_Animation&amp;diff=8546&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Game/Game_Animation&amp;diff=8546&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:46Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Animation Test 1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
       /*&lt;br /&gt;
DEVELOPING GAME IN JAVA &lt;br /&gt;
Caracteristiques&lt;br /&gt;
Editeur : NEW RIDERS &lt;br /&gt;
Auteur : BRACKEEN &lt;br /&gt;
Parution : 09 2003 &lt;br /&gt;
Pages : 972 &lt;br /&gt;
Isbn : 1-59273-005-1 &lt;br /&gt;
Reliure : Paperback &lt;br /&gt;
Disponibilite : Disponible a la librairie &lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
import java.awt.DisplayMode;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.GraphicsDevice;&lt;br /&gt;
import java.awt.GraphicsEnvironment;&lt;br /&gt;
import java.awt.Image;&lt;br /&gt;
import java.awt.Window;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class AnimationTest1 {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    DisplayMode displayMode;&lt;br /&gt;
    if (args.length == 3) {&lt;br /&gt;
      displayMode = new DisplayMode(Integer.parseInt(args[0]), Integer&lt;br /&gt;
          .parseInt(args[1]), Integer.parseInt(args[2]),&lt;br /&gt;
          DisplayMode.REFRESH_RATE_UNKNOWN);&lt;br /&gt;
    } else {&lt;br /&gt;
      displayMode = new DisplayMode(800, 600, 16,&lt;br /&gt;
          DisplayMode.REFRESH_RATE_UNKNOWN);&lt;br /&gt;
    }&lt;br /&gt;
    AnimationTest1 test = new AnimationTest1();&lt;br /&gt;
    test.run(displayMode);&lt;br /&gt;
  }&lt;br /&gt;
  private static final long DEMO_TIME = 5000;&lt;br /&gt;
  private SimpleScreenManager screen;&lt;br /&gt;
  private Image bgImage;&lt;br /&gt;
  private Animation anim;&lt;br /&gt;
  public void loadImages() {&lt;br /&gt;
    // load images&lt;br /&gt;
    bgImage = loadImage(&amp;quot;images/background.jpg&amp;quot;);&lt;br /&gt;
    Image player1 = loadImage(&amp;quot;images/player1.png&amp;quot;);&lt;br /&gt;
    Image player2 = loadImage(&amp;quot;images/player2.png&amp;quot;);&lt;br /&gt;
    Image player3 = loadImage(&amp;quot;images/player3.png&amp;quot;);&lt;br /&gt;
    // create animation&lt;br /&gt;
    anim = new Animation();&lt;br /&gt;
    anim.addFrame(player1, 250);&lt;br /&gt;
    anim.addFrame(player2, 150);&lt;br /&gt;
    anim.addFrame(player1, 150);&lt;br /&gt;
    anim.addFrame(player2, 150);&lt;br /&gt;
    anim.addFrame(player3, 200);&lt;br /&gt;
    anim.addFrame(player2, 150);&lt;br /&gt;
  }&lt;br /&gt;
  private Image loadImage(String fileName) {&lt;br /&gt;
    return new ImageIcon(fileName).getImage();&lt;br /&gt;
  }&lt;br /&gt;
  public void run(DisplayMode displayMode) {&lt;br /&gt;
    screen = new SimpleScreenManager();&lt;br /&gt;
    try {&lt;br /&gt;
      screen.setFullScreen(displayMode, new JFrame());&lt;br /&gt;
      loadImages();&lt;br /&gt;
      animationLoop();&lt;br /&gt;
    } finally {&lt;br /&gt;
      screen.restoreScreen();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void animationLoop() {&lt;br /&gt;
    long startTime = System.currentTimeMillis();&lt;br /&gt;
    long currTime = startTime;&lt;br /&gt;
    while (currTime - startTime &amp;lt; DEMO_TIME) {&lt;br /&gt;
      long elapsedTime = System.currentTimeMillis() - currTime;&lt;br /&gt;
      currTime += elapsedTime;&lt;br /&gt;
      // update animation&lt;br /&gt;
      anim.update(elapsedTime);&lt;br /&gt;
      // draw to screen&lt;br /&gt;
      Graphics g = screen.getFullScreenWindow().getGraphics();&lt;br /&gt;
      draw(g);&lt;br /&gt;
      g.dispose();&lt;br /&gt;
      // take a nap&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep(20);&lt;br /&gt;
      } catch (InterruptedException ex) {&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void draw(Graphics g) {&lt;br /&gt;
    // draw background&lt;br /&gt;
    g.drawImage(bgImage, 0, 0, null);&lt;br /&gt;
    // draw image&lt;br /&gt;
    g.drawImage(anim.getImage(), 0, 0, null);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * The Animation class manages a series of images (frames) and the amount of&lt;br /&gt;
 * time to display each frame.&lt;br /&gt;
 */&lt;br /&gt;
class Animation {&lt;br /&gt;
  private ArrayList frames;&lt;br /&gt;
  private int currFrameIndex;&lt;br /&gt;
  private long animTime;&lt;br /&gt;
  private long totalDuration;&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates a new, empty Animation.&lt;br /&gt;
   */&lt;br /&gt;
  public Animation() {&lt;br /&gt;
    frames = new ArrayList();&lt;br /&gt;
    totalDuration = 0;&lt;br /&gt;
    start();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Adds an image to the animation with the specified duration (time to&lt;br /&gt;
   * display the image).&lt;br /&gt;
   */&lt;br /&gt;
  public synchronized void addFrame(Image image, long duration) {&lt;br /&gt;
    totalDuration += duration;&lt;br /&gt;
    frames.add(new AnimFrame(image, totalDuration));&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Starts this animation over from the beginning.&lt;br /&gt;
   */&lt;br /&gt;
  public synchronized void start() {&lt;br /&gt;
    animTime = 0;&lt;br /&gt;
    currFrameIndex = 0;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Updates this animation&amp;quot;s current image (frame), if neccesary.&lt;br /&gt;
   */&lt;br /&gt;
  public synchronized void update(long elapsedTime) {&lt;br /&gt;
    if (frames.size() &amp;gt; 1) {&lt;br /&gt;
      animTime += elapsedTime;&lt;br /&gt;
      if (animTime &amp;gt;= totalDuration) {&lt;br /&gt;
        animTime = animTime % totalDuration;&lt;br /&gt;
        currFrameIndex = 0;&lt;br /&gt;
      }&lt;br /&gt;
      while (animTime &amp;gt; getFrame(currFrameIndex).endTime) {&lt;br /&gt;
        currFrameIndex++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Gets this Animation&amp;quot;s current image. Returns null if this animation has&lt;br /&gt;
   * no images.&lt;br /&gt;
   */&lt;br /&gt;
  public synchronized Image getImage() {&lt;br /&gt;
    if (frames.size() == 0) {&lt;br /&gt;
      return null;&lt;br /&gt;
    } else {&lt;br /&gt;
      return getFrame(currFrameIndex).image;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private AnimFrame getFrame(int i) {&lt;br /&gt;
    return (AnimFrame) frames.get(i);&lt;br /&gt;
  }&lt;br /&gt;
  private class AnimFrame {&lt;br /&gt;
    Image image;&lt;br /&gt;
    long endTime;&lt;br /&gt;
    public AnimFrame(Image image, long endTime) {&lt;br /&gt;
      this.image = image;&lt;br /&gt;
      this.endTime = endTime;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * The SimpleScreenManager class manages initializing and displaying full screen&lt;br /&gt;
 * graphics modes.&lt;br /&gt;
 */&lt;br /&gt;
class SimpleScreenManager {&lt;br /&gt;
  private GraphicsDevice device;&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates a new SimpleScreenManager object.&lt;br /&gt;
   */&lt;br /&gt;
  public SimpleScreenManager() {&lt;br /&gt;
    GraphicsEnvironment environment = GraphicsEnvironment&lt;br /&gt;
        .getLocalGraphicsEnvironment();&lt;br /&gt;
    device = environment.getDefaultScreenDevice();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Enters full screen mode and changes the display mode.&lt;br /&gt;
   */&lt;br /&gt;
  public void setFullScreen(DisplayMode displayMode, JFrame window) {&lt;br /&gt;
    window.setUndecorated(true);&lt;br /&gt;
    window.setResizable(false);&lt;br /&gt;
    device.setFullScreenWindow(window);&lt;br /&gt;
    if (displayMode != null &amp;amp;&amp;amp; device.isDisplayChangeSupported()) {&lt;br /&gt;
      try {&lt;br /&gt;
        device.setDisplayMode(displayMode);&lt;br /&gt;
      } catch (IllegalArgumentException ex) {&lt;br /&gt;
        // ignore - illegal mode for this device&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the window currently used in full screen mode.&lt;br /&gt;
   */&lt;br /&gt;
  public Window getFullScreenWindow() {&lt;br /&gt;
    return device.getFullScreenWindow();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Restores the screen&amp;quot;s display mode.&lt;br /&gt;
   */&lt;br /&gt;
  public void restoreScreen() {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      window.dispose();&lt;br /&gt;
    }&lt;br /&gt;
    device.setFullScreenWindow(null);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Animation Test 2 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
       /*&lt;br /&gt;
DEVELOPING GAME IN JAVA &lt;br /&gt;
Caracteristiques&lt;br /&gt;
Editeur : NEW RIDERS &lt;br /&gt;
Auteur : BRACKEEN &lt;br /&gt;
Parution : 09 2003 &lt;br /&gt;
Pages : 972 &lt;br /&gt;
Isbn : 1-59273-005-1 &lt;br /&gt;
Reliure : Paperback &lt;br /&gt;
Disponibilite : Disponible a la librairie &lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
import java.awt.DisplayMode;&lt;br /&gt;
import java.awt.EventQueue;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.GraphicsConfiguration;&lt;br /&gt;
import java.awt.GraphicsDevice;&lt;br /&gt;
import java.awt.GraphicsEnvironment;&lt;br /&gt;
import java.awt.Image;&lt;br /&gt;
import java.awt.Toolkit;&lt;br /&gt;
import java.awt.Window;&lt;br /&gt;
import java.awt.image.BufferStrategy;&lt;br /&gt;
import java.awt.image.BufferedImage;&lt;br /&gt;
import java.lang.reflect.InvocationTargetException;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class AnimationTest2 {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    AnimationTest2 test = new AnimationTest2();&lt;br /&gt;
    test.run();&lt;br /&gt;
  }&lt;br /&gt;
  private static final DisplayMode POSSIBLE_MODES[] = {&lt;br /&gt;
      new DisplayMode(800, 600, 32, 0), new DisplayMode(800, 600, 24, 0),&lt;br /&gt;
      new DisplayMode(800, 600, 16, 0), new DisplayMode(640, 480, 32, 0),&lt;br /&gt;
      new DisplayMode(640, 480, 24, 0), new DisplayMode(640, 480, 16, 0) };&lt;br /&gt;
  private static final long DEMO_TIME = 10000;&lt;br /&gt;
  private ScreenManager screen;&lt;br /&gt;
  private Image bgImage;&lt;br /&gt;
  private Animation anim;&lt;br /&gt;
  public void loadImages() {&lt;br /&gt;
    // load images&lt;br /&gt;
    bgImage = loadImage(&amp;quot;images/background.jpg&amp;quot;);&lt;br /&gt;
    Image player1 = loadImage(&amp;quot;images/player1.png&amp;quot;);&lt;br /&gt;
    Image player2 = loadImage(&amp;quot;images/player2.png&amp;quot;);&lt;br /&gt;
    Image player3 = loadImage(&amp;quot;images/player3.png&amp;quot;);&lt;br /&gt;
    // create animation&lt;br /&gt;
    anim = new Animation();&lt;br /&gt;
    anim.addFrame(player1, 250);&lt;br /&gt;
    anim.addFrame(player2, 150);&lt;br /&gt;
    anim.addFrame(player1, 150);&lt;br /&gt;
    anim.addFrame(player2, 150);&lt;br /&gt;
    anim.addFrame(player3, 200);&lt;br /&gt;
    anim.addFrame(player2, 150);&lt;br /&gt;
  }&lt;br /&gt;
  private Image loadImage(String fileName) {&lt;br /&gt;
    return new ImageIcon(fileName).getImage();&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    screen = new ScreenManager();&lt;br /&gt;
    try {&lt;br /&gt;
      DisplayMode displayMode = screen&lt;br /&gt;
          .findFirstCompatibleMode(POSSIBLE_MODES);&lt;br /&gt;
      screen.setFullScreen(displayMode);&lt;br /&gt;
      loadImages();&lt;br /&gt;
      animationLoop();&lt;br /&gt;
    } finally {&lt;br /&gt;
      screen.restoreScreen();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void animationLoop() {&lt;br /&gt;
    long startTime = System.currentTimeMillis();&lt;br /&gt;
    long currTime = startTime;&lt;br /&gt;
    while (currTime - startTime &amp;lt; DEMO_TIME) {&lt;br /&gt;
      long elapsedTime = System.currentTimeMillis() - currTime;&lt;br /&gt;
      currTime += elapsedTime;&lt;br /&gt;
      // update animation&lt;br /&gt;
      anim.update(elapsedTime);&lt;br /&gt;
      // draw and update screen&lt;br /&gt;
      Graphics2D g = screen.getGraphics();&lt;br /&gt;
      draw(g);&lt;br /&gt;
      g.dispose();&lt;br /&gt;
      screen.update();&lt;br /&gt;
      // take a nap&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep(20);&lt;br /&gt;
      } catch (InterruptedException ex) {&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void draw(Graphics g) {&lt;br /&gt;
    // draw background&lt;br /&gt;
    g.drawImage(bgImage, 0, 0, null);&lt;br /&gt;
    // draw image&lt;br /&gt;
    g.drawImage(anim.getImage(), 0, 0, null);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * The ScreenManager class manages initializing and displaying full screen&lt;br /&gt;
 * graphics modes.&lt;br /&gt;
 */&lt;br /&gt;
class ScreenManager {&lt;br /&gt;
  private GraphicsDevice device;&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates a new ScreenManager object.&lt;br /&gt;
   */&lt;br /&gt;
  public ScreenManager() {&lt;br /&gt;
    GraphicsEnvironment environment = GraphicsEnvironment&lt;br /&gt;
        .getLocalGraphicsEnvironment();&lt;br /&gt;
    device = environment.getDefaultScreenDevice();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns a list of compatible display modes for the default device on the&lt;br /&gt;
   * system.&lt;br /&gt;
   */&lt;br /&gt;
  public DisplayMode[] getCompatibleDisplayModes() {&lt;br /&gt;
    return device.getDisplayModes();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the first compatible mode in a list of modes. Returns null if no&lt;br /&gt;
   * modes are compatible.&lt;br /&gt;
   */&lt;br /&gt;
  public DisplayMode findFirstCompatibleMode(DisplayMode modes[]) {&lt;br /&gt;
    DisplayMode goodModes[] = device.getDisplayModes();&lt;br /&gt;
    for (int i = 0; i &amp;lt; modes.length; i++) {&lt;br /&gt;
      for (int j = 0; j &amp;lt; goodModes.length; j++) {&lt;br /&gt;
        if (displayModesMatch(modes[i], goodModes[j])) {&lt;br /&gt;
          return modes[i];&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the current display mode.&lt;br /&gt;
   */&lt;br /&gt;
  public DisplayMode getCurrentDisplayMode() {&lt;br /&gt;
    return device.getDisplayMode();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Determines if two display modes &amp;quot;match&amp;quot;. Two display modes match if they&lt;br /&gt;
   * have the same resolution, bit depth, and refresh rate. The bit depth is&lt;br /&gt;
   * ignored if one of the modes has a bit depth of&lt;br /&gt;
   * DisplayMode.BIT_DEPTH_MULTI. Likewise, the refresh rate is ignored if one&lt;br /&gt;
   * of the modes has a refresh rate of DisplayMode.REFRESH_RATE_UNKNOWN.&lt;br /&gt;
   */&lt;br /&gt;
  public boolean displayModesMatch(DisplayMode mode1, DisplayMode mode2)&lt;br /&gt;
  {&lt;br /&gt;
    if (mode1.getWidth() != mode2.getWidth()&lt;br /&gt;
        || mode1.getHeight() != mode2.getHeight()) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (mode1.getBitDepth() != DisplayMode.BIT_DEPTH_MULTI&lt;br /&gt;
        &amp;amp;&amp;amp; mode2.getBitDepth() != DisplayMode.BIT_DEPTH_MULTI&lt;br /&gt;
        &amp;amp;&amp;amp; mode1.getBitDepth() != mode2.getBitDepth()) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (mode1.getRefreshRate() != DisplayMode.REFRESH_RATE_UNKNOWN&lt;br /&gt;
        &amp;amp;&amp;amp; mode2.getRefreshRate() != DisplayMode.REFRESH_RATE_UNKNOWN&lt;br /&gt;
        &amp;amp;&amp;amp; mode1.getRefreshRate() != mode2.getRefreshRate()) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Enters full screen mode and changes the display mode. If the specified&lt;br /&gt;
   * display mode is null or not compatible with this device, or if the&lt;br /&gt;
   * display mode cannot be changed on this system, the current display mode&lt;br /&gt;
   * is used.&lt;br /&gt;
   * &amp;lt;p&amp;gt;&lt;br /&gt;
   * The display uses a BufferStrategy with 2 buffers.&lt;br /&gt;
   */&lt;br /&gt;
  public void setFullScreen(DisplayMode displayMode) {&lt;br /&gt;
    final JFrame frame = new JFrame();&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.setUndecorated(true);&lt;br /&gt;
    frame.setIgnoreRepaint(true);&lt;br /&gt;
    frame.setResizable(false);&lt;br /&gt;
    device.setFullScreenWindow(frame);&lt;br /&gt;
    if (displayMode != null &amp;amp;&amp;amp; device.isDisplayChangeSupported()) {&lt;br /&gt;
      try {&lt;br /&gt;
        device.setDisplayMode(displayMode);&lt;br /&gt;
      } catch (IllegalArgumentException ex) {&lt;br /&gt;
      }&lt;br /&gt;
      // fix for mac os x&lt;br /&gt;
      frame.setSize(displayMode.getWidth(), displayMode.getHeight());&lt;br /&gt;
    }&lt;br /&gt;
    // avoid potential deadlock in 1.4.1_02&lt;br /&gt;
    try {&lt;br /&gt;
      EventQueue.invokeAndWait(new Runnable() {&lt;br /&gt;
        public void run() {&lt;br /&gt;
          frame.createBufferStrategy(2);&lt;br /&gt;
        }&lt;br /&gt;
      });&lt;br /&gt;
    } catch (InterruptedException ex) {&lt;br /&gt;
      // ignore&lt;br /&gt;
    } catch (InvocationTargetException ex) {&lt;br /&gt;
      // ignore&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Gets the graphics context for the display. The ScreenManager uses double&lt;br /&gt;
   * buffering, so applications must call update() to show any graphics drawn.&lt;br /&gt;
   * &amp;lt;p&amp;gt;&lt;br /&gt;
   * The application must dispose of the graphics object.&lt;br /&gt;
   */&lt;br /&gt;
  public Graphics2D getGraphics() {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      BufferStrategy strategy = window.getBufferStrategy();&lt;br /&gt;
      return (Graphics2D) strategy.getDrawGraphics();&lt;br /&gt;
    } else {&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Updates the display.&lt;br /&gt;
   */&lt;br /&gt;
  public void update() {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      BufferStrategy strategy = window.getBufferStrategy();&lt;br /&gt;
      if (!strategy.contentsLost()) {&lt;br /&gt;
        strategy.show();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Sync the display on some systems.&lt;br /&gt;
    // (on Linux, this fixes event queue problems)&lt;br /&gt;
    Toolkit.getDefaultToolkit().sync();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the window currently used in full screen mode. Returns null if&lt;br /&gt;
   * the device is not in full screen mode.&lt;br /&gt;
   */&lt;br /&gt;
  public JFrame getFullScreenWindow() {&lt;br /&gt;
    return (JFrame) device.getFullScreenWindow();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the width of the window currently used in full screen mode.&lt;br /&gt;
   * Returns 0 if the device is not in full screen mode.&lt;br /&gt;
   */&lt;br /&gt;
  public int getWidth() {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      return window.getWidth();&lt;br /&gt;
    } else {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the height of the window currently used in full screen mode.&lt;br /&gt;
   * Returns 0 if the device is not in full screen mode.&lt;br /&gt;
   */&lt;br /&gt;
  public int getHeight() {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      return window.getHeight();&lt;br /&gt;
    } else {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Restores the screen&amp;quot;s display mode.&lt;br /&gt;
   */&lt;br /&gt;
  public void restoreScreen() {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      window.dispose();&lt;br /&gt;
    }&lt;br /&gt;
    device.setFullScreenWindow(null);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates an image compatible with the current display.&lt;br /&gt;
   */&lt;br /&gt;
  public BufferedImage createCompatibleImage(int w, int h, int transparancy) {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      GraphicsConfiguration gc = window.getGraphicsConfiguration();&lt;br /&gt;
      return gc.createCompatibleImage(w, h, transparancy);&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * The Animation class manages a series of images (frames) and the amount of&lt;br /&gt;
 * time to display each frame.&lt;br /&gt;
 */&lt;br /&gt;
class Animation {&lt;br /&gt;
  private ArrayList frames;&lt;br /&gt;
  private int currFrameIndex;&lt;br /&gt;
  private long animTime;&lt;br /&gt;
  private long totalDuration;&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates a new, empty Animation.&lt;br /&gt;
   */&lt;br /&gt;
  public Animation() {&lt;br /&gt;
    frames = new ArrayList();&lt;br /&gt;
    totalDuration = 0;&lt;br /&gt;
    start();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Adds an image to the animation with the specified duration (time to&lt;br /&gt;
   * display the image).&lt;br /&gt;
   */&lt;br /&gt;
  public synchronized void addFrame(Image image, long duration) {&lt;br /&gt;
    totalDuration += duration;&lt;br /&gt;
    frames.add(new AnimFrame(image, totalDuration));&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Starts this animation over from the beginning.&lt;br /&gt;
   */&lt;br /&gt;
  public synchronized void start() {&lt;br /&gt;
    animTime = 0;&lt;br /&gt;
    currFrameIndex = 0;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Updates this animation&amp;quot;s current image (frame), if neccesary.&lt;br /&gt;
   */&lt;br /&gt;
  public synchronized void update(long elapsedTime) {&lt;br /&gt;
    if (frames.size() &amp;gt; 1) {&lt;br /&gt;
      animTime += elapsedTime;&lt;br /&gt;
      if (animTime &amp;gt;= totalDuration) {&lt;br /&gt;
        animTime = animTime % totalDuration;&lt;br /&gt;
        currFrameIndex = 0;&lt;br /&gt;
      }&lt;br /&gt;
      while (animTime &amp;gt; getFrame(currFrameIndex).endTime) {&lt;br /&gt;
        currFrameIndex++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Gets this Animation&amp;quot;s current image. Returns null if this animation has&lt;br /&gt;
   * no images.&lt;br /&gt;
   */&lt;br /&gt;
  public synchronized Image getImage() {&lt;br /&gt;
    if (frames.size() == 0) {&lt;br /&gt;
      return null;&lt;br /&gt;
    } else {&lt;br /&gt;
      return getFrame(currFrameIndex).image;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private AnimFrame getFrame(int i) {&lt;br /&gt;
    return (AnimFrame) frames.get(i);&lt;br /&gt;
  }&lt;br /&gt;
  private class AnimFrame {&lt;br /&gt;
    Image image;&lt;br /&gt;
    long endTime;&lt;br /&gt;
    public AnimFrame(Image image, long endTime) {&lt;br /&gt;
      this.image = image;&lt;br /&gt;
      this.endTime = endTime;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mouse look Test ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
       /*&lt;br /&gt;
DEVELOPING GAME IN JAVA &lt;br /&gt;
Caracteristiques&lt;br /&gt;
Editeur : NEW RIDERS &lt;br /&gt;
Auteur : BRACKEEN &lt;br /&gt;
Parution : 09 2003 &lt;br /&gt;
Pages : 972 &lt;br /&gt;
Isbn : 1-59273-005-1 &lt;br /&gt;
Reliure : Paperback &lt;br /&gt;
Disponibilite : Disponible a la librairie &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import java.awt.AWTException;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.DisplayMode;&lt;br /&gt;
import java.awt.EventQueue;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.GraphicsConfiguration;&lt;br /&gt;
import java.awt.GraphicsDevice;&lt;br /&gt;
import java.awt.GraphicsEnvironment;&lt;br /&gt;
import java.awt.Image;&lt;br /&gt;
import java.awt.Point;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.Robot;&lt;br /&gt;
import java.awt.Toolkit;&lt;br /&gt;
import java.awt.Window;&lt;br /&gt;
import java.awt.event.KeyEvent;&lt;br /&gt;
import java.awt.event.KeyListener;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.awt.event.MouseMotionListener;&lt;br /&gt;
import java.awt.image.BufferStrategy;&lt;br /&gt;
import java.awt.image.BufferedImage;&lt;br /&gt;
import java.lang.reflect.InvocationTargetException;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.SwingUtilities;&lt;br /&gt;
/**&lt;br /&gt;
 * A simple mouselook test. Using mouselook, the user can virtually move the&lt;br /&gt;
 * mouse in any direction indefinitly. Without mouselook, the mouse stops when&lt;br /&gt;
 * it hits the edge of the screen.&lt;br /&gt;
 * &amp;lt;p&amp;gt;&lt;br /&gt;
 * Mouselook works by recentering the mouse whenever it is moved, so it can&lt;br /&gt;
 * always measure the relative mouse movement, and the mouse never hits the edge&lt;br /&gt;
 * of the screen.&lt;br /&gt;
 */&lt;br /&gt;
public class MouselookTest extends GameCore implements MouseMotionListener,&lt;br /&gt;
    KeyListener {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new MouselookTest().run();&lt;br /&gt;
  }&lt;br /&gt;
  private Image bgImage;&lt;br /&gt;
  private Robot robot;&lt;br /&gt;
  private Point mouseLocation;&lt;br /&gt;
  private Point centerLocation;&lt;br /&gt;
  private Point imageLocation;&lt;br /&gt;
  private boolean relativeMouseMode;&lt;br /&gt;
  private boolean isRecentering;&lt;br /&gt;
  public void init() {&lt;br /&gt;
    super.init();&lt;br /&gt;
    mouseLocation = new Point();&lt;br /&gt;
    centerLocation = new Point();&lt;br /&gt;
    imageLocation = new Point();&lt;br /&gt;
    relativeMouseMode = true;&lt;br /&gt;
    isRecentering = false;&lt;br /&gt;
    try {&lt;br /&gt;
      robot = new Robot();&lt;br /&gt;
      recenterMouse();&lt;br /&gt;
      mouseLocation.x = centerLocation.x;&lt;br /&gt;
      mouseLocation.y = centerLocation.y;&lt;br /&gt;
    } catch (AWTException ex) {&lt;br /&gt;
      System.out.println(&amp;quot;Couldn&amp;quot;t create Robot!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    Window window = screen.getFullScreenWindow();&lt;br /&gt;
    window.addMouseMotionListener(this);&lt;br /&gt;
    window.addKeyListener(this);&lt;br /&gt;
    bgImage = loadImage(&amp;quot;../images/background.jpg&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public synchronized void draw(Graphics2D g) {&lt;br /&gt;
    int w = screen.getWidth();&lt;br /&gt;
    int h = screen.getHeight();&lt;br /&gt;
    // make sure position is correct&lt;br /&gt;
    imageLocation.x %= w;&lt;br /&gt;
    imageLocation.y %= screen.getHeight();&lt;br /&gt;
    if (imageLocation.x &amp;lt; 0) {&lt;br /&gt;
      imageLocation.x += w;&lt;br /&gt;
    }&lt;br /&gt;
    if (imageLocation.y &amp;lt; 0) {&lt;br /&gt;
      imageLocation.y += screen.getHeight();&lt;br /&gt;
    }&lt;br /&gt;
    // draw the image in four places to cover the screen&lt;br /&gt;
    int x = imageLocation.x;&lt;br /&gt;
    int y = imageLocation.y;&lt;br /&gt;
    g.drawImage(bgImage, x, y, null);&lt;br /&gt;
    g.drawImage(bgImage, x - w, y, null);&lt;br /&gt;
    g.drawImage(bgImage, x, y - h, null);&lt;br /&gt;
    g.drawImage(bgImage, x - w, y - h, null);&lt;br /&gt;
    // draw instructions&lt;br /&gt;
    g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,&lt;br /&gt;
        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);&lt;br /&gt;
    g.drawString(&amp;quot;Press Space to change mouse modes.&amp;quot;, 5, FONT_SIZE);&lt;br /&gt;
    g.drawString(&amp;quot;Press Escape to exit.&amp;quot;, 5, FONT_SIZE * 2);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Uses the Robot class to try to postion the mouse in the center of the&lt;br /&gt;
   * screen.&lt;br /&gt;
   * &amp;lt;p&amp;gt;&lt;br /&gt;
   * Note that use of the Robot class may not be available on all platforms.&lt;br /&gt;
   */&lt;br /&gt;
  private synchronized void recenterMouse() {&lt;br /&gt;
    Window window = screen.getFullScreenWindow();&lt;br /&gt;
    if (robot != null &amp;amp;&amp;amp; window.isShowing()) {&lt;br /&gt;
      centerLocation.x = window.getWidth() / 2;&lt;br /&gt;
      centerLocation.y = window.getHeight() / 2;&lt;br /&gt;
      SwingUtilities.convertPointToScreen(centerLocation, window);&lt;br /&gt;
      isRecentering = true;&lt;br /&gt;
      robot.mouseMove(centerLocation.x, centerLocation.y);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // from the MouseMotionListener interface&lt;br /&gt;
  public void mouseDragged(MouseEvent e) {&lt;br /&gt;
    mouseMoved(e);&lt;br /&gt;
  }&lt;br /&gt;
  // from the MouseMotionListener interface&lt;br /&gt;
  public synchronized void mouseMoved(MouseEvent e) {&lt;br /&gt;
    // this event is from re-centering the mouse - ignore it&lt;br /&gt;
    if (isRecentering &amp;amp;&amp;amp; centerLocation.x == e.getX()&lt;br /&gt;
        &amp;amp;&amp;amp; centerLocation.y == e.getY()) {&lt;br /&gt;
      isRecentering = false;&lt;br /&gt;
    } else {&lt;br /&gt;
      int dx = e.getX() - mouseLocation.x;&lt;br /&gt;
      int dy = e.getY() - mouseLocation.y;&lt;br /&gt;
      imageLocation.x += dx;&lt;br /&gt;
      imageLocation.y += dy;&lt;br /&gt;
      // recenter the mouse&lt;br /&gt;
      if (relativeMouseMode) {&lt;br /&gt;
        recenterMouse();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    mouseLocation.x = e.getX();&lt;br /&gt;
    mouseLocation.y = e.getY();&lt;br /&gt;
  }&lt;br /&gt;
  // from the KeyListener interface&lt;br /&gt;
  public void keyPressed(KeyEvent e) {&lt;br /&gt;
    if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {&lt;br /&gt;
      // exit the program&lt;br /&gt;
      stop();&lt;br /&gt;
    } else if (e.getKeyCode() == KeyEvent.VK_SPACE) {&lt;br /&gt;
      // change relative mouse mode&lt;br /&gt;
      relativeMouseMode = !relativeMouseMode;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // from the KeyListener interface&lt;br /&gt;
  public void keyReleased(KeyEvent e) {&lt;br /&gt;
    // do nothing&lt;br /&gt;
  }&lt;br /&gt;
  // from the KeyListener interface&lt;br /&gt;
  public void keyTyped(KeyEvent e) {&lt;br /&gt;
    // do nothing&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * Simple abstract class used for testing. Subclasses should implement the&lt;br /&gt;
 * draw() method.&lt;br /&gt;
 */&lt;br /&gt;
abstract class GameCore {&lt;br /&gt;
  protected static final int FONT_SIZE = 24;&lt;br /&gt;
  private static final DisplayMode POSSIBLE_MODES[] = {&lt;br /&gt;
      new DisplayMode(800, 600, 32, 0), new DisplayMode(800, 600, 24, 0),&lt;br /&gt;
      new DisplayMode(800, 600, 16, 0), new DisplayMode(640, 480, 32, 0),&lt;br /&gt;
      new DisplayMode(640, 480, 24, 0), new DisplayMode(640, 480, 16, 0) };&lt;br /&gt;
  private boolean isRunning;&lt;br /&gt;
  protected ScreenManager screen;&lt;br /&gt;
  /**&lt;br /&gt;
   * Signals the game loop that it&amp;quot;s time to quit&lt;br /&gt;
   */&lt;br /&gt;
  public void stop() {&lt;br /&gt;
    isRunning = false;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Calls init() and gameLoop()&lt;br /&gt;
   */&lt;br /&gt;
  public void run() {&lt;br /&gt;
    try {&lt;br /&gt;
      init();&lt;br /&gt;
      gameLoop();&lt;br /&gt;
    } finally {&lt;br /&gt;
      screen.restoreScreen();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Sets full screen mode and initiates and objects.&lt;br /&gt;
   */&lt;br /&gt;
  public void init() {&lt;br /&gt;
    screen = new ScreenManager();&lt;br /&gt;
    DisplayMode displayMode = screen&lt;br /&gt;
        .findFirstCompatibleMode(POSSIBLE_MODES);&lt;br /&gt;
    screen.setFullScreen(displayMode);&lt;br /&gt;
    Window window = screen.getFullScreenWindow();&lt;br /&gt;
    window.setFont(new Font(&amp;quot;Dialog&amp;quot;, Font.PLAIN, FONT_SIZE));&lt;br /&gt;
    window.setBackground(Color.blue);&lt;br /&gt;
    window.setForeground(Color.white);&lt;br /&gt;
    isRunning = true;&lt;br /&gt;
  }&lt;br /&gt;
  public Image loadImage(String fileName) {&lt;br /&gt;
    return new ImageIcon(fileName).getImage();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Runs through the game loop until stop() is called.&lt;br /&gt;
   */&lt;br /&gt;
  public void gameLoop() {&lt;br /&gt;
    long startTime = System.currentTimeMillis();&lt;br /&gt;
    long currTime = startTime;&lt;br /&gt;
    while (isRunning) {&lt;br /&gt;
      long elapsedTime = System.currentTimeMillis() - currTime;&lt;br /&gt;
      currTime += elapsedTime;&lt;br /&gt;
      // update&lt;br /&gt;
      update(elapsedTime);&lt;br /&gt;
      // draw the screen&lt;br /&gt;
      Graphics2D g = screen.getGraphics();&lt;br /&gt;
      draw(g);&lt;br /&gt;
      g.dispose();&lt;br /&gt;
      screen.update();&lt;br /&gt;
      // take a nap&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep(20);&lt;br /&gt;
      } catch (InterruptedException ex) {&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Updates the state of the game/animation based on the amount of elapsed&lt;br /&gt;
   * time that has passed.&lt;br /&gt;
   */&lt;br /&gt;
  public void update(long elapsedTime) {&lt;br /&gt;
    // do nothing&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Draws to the screen. Subclasses must override this method.&lt;br /&gt;
   */&lt;br /&gt;
  public abstract void draw(Graphics2D g);&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * The ScreenManager class manages initializing and displaying full screen&lt;br /&gt;
 * graphics modes.&lt;br /&gt;
 */&lt;br /&gt;
class ScreenManager {&lt;br /&gt;
  private GraphicsDevice device;&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates a new ScreenManager object.&lt;br /&gt;
   */&lt;br /&gt;
  public ScreenManager() {&lt;br /&gt;
    GraphicsEnvironment environment = GraphicsEnvironment&lt;br /&gt;
        .getLocalGraphicsEnvironment();&lt;br /&gt;
    device = environment.getDefaultScreenDevice();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns a list of compatible display modes for the default device on the&lt;br /&gt;
   * system.&lt;br /&gt;
   */&lt;br /&gt;
  public DisplayMode[] getCompatibleDisplayModes() {&lt;br /&gt;
    return device.getDisplayModes();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the first compatible mode in a list of modes. Returns null if no&lt;br /&gt;
   * modes are compatible.&lt;br /&gt;
   */&lt;br /&gt;
  public DisplayMode findFirstCompatibleMode(DisplayMode modes[]) {&lt;br /&gt;
    DisplayMode goodModes[] = device.getDisplayModes();&lt;br /&gt;
    for (int i = 0; i &amp;lt; modes.length; i++) {&lt;br /&gt;
      for (int j = 0; j &amp;lt; goodModes.length; j++) {&lt;br /&gt;
        if (displayModesMatch(modes[i], goodModes[j])) {&lt;br /&gt;
          return modes[i];&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the current display mode.&lt;br /&gt;
   */&lt;br /&gt;
  public DisplayMode getCurrentDisplayMode() {&lt;br /&gt;
    return device.getDisplayMode();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Determines if two display modes &amp;quot;match&amp;quot;. Two display modes match if they&lt;br /&gt;
   * have the same resolution, bit depth, and refresh rate. The bit depth is&lt;br /&gt;
   * ignored if one of the modes has a bit depth of&lt;br /&gt;
   * DisplayMode.BIT_DEPTH_MULTI. Likewise, the refresh rate is ignored if one&lt;br /&gt;
   * of the modes has a refresh rate of DisplayMode.REFRESH_RATE_UNKNOWN.&lt;br /&gt;
   */&lt;br /&gt;
  public boolean displayModesMatch(DisplayMode mode1, DisplayMode mode2)&lt;br /&gt;
  {&lt;br /&gt;
    if (mode1.getWidth() != mode2.getWidth()&lt;br /&gt;
        || mode1.getHeight() != mode2.getHeight()) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (mode1.getBitDepth() != DisplayMode.BIT_DEPTH_MULTI&lt;br /&gt;
        &amp;amp;&amp;amp; mode2.getBitDepth() != DisplayMode.BIT_DEPTH_MULTI&lt;br /&gt;
        &amp;amp;&amp;amp; mode1.getBitDepth() != mode2.getBitDepth()) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    if (mode1.getRefreshRate() != DisplayMode.REFRESH_RATE_UNKNOWN&lt;br /&gt;
        &amp;amp;&amp;amp; mode2.getRefreshRate() != DisplayMode.REFRESH_RATE_UNKNOWN&lt;br /&gt;
        &amp;amp;&amp;amp; mode1.getRefreshRate() != mode2.getRefreshRate()) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Enters full screen mode and changes the display mode. If the specified&lt;br /&gt;
   * display mode is null or not compatible with this device, or if the&lt;br /&gt;
   * display mode cannot be changed on this system, the current display mode&lt;br /&gt;
   * is used.&lt;br /&gt;
   * &amp;lt;p&amp;gt;&lt;br /&gt;
   * The display uses a BufferStrategy with 2 buffers.&lt;br /&gt;
   */&lt;br /&gt;
  public void setFullScreen(DisplayMode displayMode) {&lt;br /&gt;
    final JFrame frame = new JFrame();&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.setUndecorated(true);&lt;br /&gt;
    frame.setIgnoreRepaint(true);&lt;br /&gt;
    frame.setResizable(false);&lt;br /&gt;
    device.setFullScreenWindow(frame);&lt;br /&gt;
    if (displayMode != null &amp;amp;&amp;amp; device.isDisplayChangeSupported()) {&lt;br /&gt;
      try {&lt;br /&gt;
        device.setDisplayMode(displayMode);&lt;br /&gt;
      } catch (IllegalArgumentException ex) {&lt;br /&gt;
      }&lt;br /&gt;
      // fix for mac os x&lt;br /&gt;
      frame.setSize(displayMode.getWidth(), displayMode.getHeight());&lt;br /&gt;
    }&lt;br /&gt;
    // avoid potential deadlock in 1.4.1_02&lt;br /&gt;
    try {&lt;br /&gt;
      EventQueue.invokeAndWait(new Runnable() {&lt;br /&gt;
        public void run() {&lt;br /&gt;
          frame.createBufferStrategy(2);&lt;br /&gt;
        }&lt;br /&gt;
      });&lt;br /&gt;
    } catch (InterruptedException ex) {&lt;br /&gt;
      // ignore&lt;br /&gt;
    } catch (InvocationTargetException ex) {&lt;br /&gt;
      // ignore&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Gets the graphics context for the display. The ScreenManager uses double&lt;br /&gt;
   * buffering, so applications must call update() to show any graphics drawn.&lt;br /&gt;
   * &amp;lt;p&amp;gt;&lt;br /&gt;
   * The application must dispose of the graphics object.&lt;br /&gt;
   */&lt;br /&gt;
  public Graphics2D getGraphics() {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      BufferStrategy strategy = window.getBufferStrategy();&lt;br /&gt;
      return (Graphics2D) strategy.getDrawGraphics();&lt;br /&gt;
    } else {&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Updates the display.&lt;br /&gt;
   */&lt;br /&gt;
  public void update() {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      BufferStrategy strategy = window.getBufferStrategy();&lt;br /&gt;
      if (!strategy.contentsLost()) {&lt;br /&gt;
        strategy.show();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Sync the display on some systems.&lt;br /&gt;
    // (on Linux, this fixes event queue problems)&lt;br /&gt;
    Toolkit.getDefaultToolkit().sync();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the window currently used in full screen mode. Returns null if&lt;br /&gt;
   * the device is not in full screen mode.&lt;br /&gt;
   */&lt;br /&gt;
  public JFrame getFullScreenWindow() {&lt;br /&gt;
    return (JFrame) device.getFullScreenWindow();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the width of the window currently used in full screen mode.&lt;br /&gt;
   * Returns 0 if the device is not in full screen mode.&lt;br /&gt;
   */&lt;br /&gt;
  public int getWidth() {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      return window.getWidth();&lt;br /&gt;
    } else {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the height of the window currently used in full screen mode.&lt;br /&gt;
   * Returns 0 if the device is not in full screen mode.&lt;br /&gt;
   */&lt;br /&gt;
  public int getHeight() {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      return window.getHeight();&lt;br /&gt;
    } else {&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Restores the screen&amp;quot;s display mode.&lt;br /&gt;
   */&lt;br /&gt;
  public void restoreScreen() {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      window.dispose();&lt;br /&gt;
    }&lt;br /&gt;
    device.setFullScreenWindow(null);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates an image compatible with the current display.&lt;br /&gt;
   */&lt;br /&gt;
  public BufferedImage createCompatibleImage(int w, int h, int transparancy) {&lt;br /&gt;
    Window window = device.getFullScreenWindow();&lt;br /&gt;
    if (window != null) {&lt;br /&gt;
      GraphicsConfiguration gc = window.getGraphicsConfiguration();&lt;br /&gt;
      return gc.createCompatibleImage(w, h, transparancy);&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>