📄 dodger.java
字号:
package com.croftsoft.apps.dodger;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.io.*;
import java.net.URL;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import com.croftsoft.core.CroftSoftConstants; import com.croftsoft.core.animation.AnimatedComponent; import com.croftsoft.core.animation.ComponentAnimator; import com.croftsoft.core.animation.Sprite; import com.croftsoft.core.animation.animator.TileAnimator; import com.croftsoft.core.animation.clock.SystemClock; import com.croftsoft.core.animation.sprite.IconSprite; import com.croftsoft.core.animation.sprite.TextSprite; import com.croftsoft.core.applet.AppletLib;
import com.croftsoft.core.awt.image.ImageLib; import com.croftsoft.core.gui.LifecycleWindowListener;
import com.croftsoft.core.io.SerializableLib;
import com.croftsoft.core.jnlp.JnlpLib;
import com.croftsoft.core.lang.ClassLib;
import com.croftsoft.core.lang.lifecycle.Lifecycle;
/*********************************************************************
* Main Dodger class.
*
* @version
* 2003-09-29 * @since
* 2002-03-18
* @author
* <a href="http://www.croftsoft.com/">David Wallace Croft</a>
*********************************************************************/
public final class Dodger
extends JApplet
implements ComponentAnimator, Lifecycle
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
{
//////////////////////////////////////////////////////////////////////
// Applet constants
//////////////////////////////////////////////////////////////////////
private static final String VERSION
= "2003-09-29";
private static final String TITLE
= "CroftSoft Dodger";
private static final String INFO
= "\n" + TITLE + "\n" + CroftSoftConstants.COPYRIGHT + "\n" + CroftSoftConstants.HOME_PAGE + "\n"
+ "Version " + VERSION + "\n";
//////////////////////////////////////////////////////////////////////
// Frame constants
//////////////////////////////////////////////////////////////////////
private static final String FRAME_TITLE
= TITLE;
private static final String FRAME_ICON_FILENAME
= "/images/croftsoft.png";
private static final Dimension FRAME_SIZE
= null;
private static final String SHUTDOWN_CONFIRMATION_PROMPT
= "Close " + TITLE + "?";
//////////////////////////////////////////////////////////////////////
// animation constants
//////////////////////////////////////////////////////////////////////
/** frames per second */
private static final double FRAME_RATE = 60.0;
/** pixels per second */
private static final double FLOW_RATE = 100.0;
private static final int PIXELS_PER_FRAME
= ( int ) Math.round ( FLOW_RATE / FRAME_RATE );
private static final int MAX_OBSTACLES = 200;
private static final double OBSTACLE_DENSITY
= 1 / ( 5.0 * 32 * 32 );
private static final String MEDIA_DIR = "media/dodger/";
private static final String DODGER_GREEN_IMAGE_FILENAME
= MEDIA_DIR + "dodger_green.png";
private static final String DODGER_YELLOW_IMAGE_FILENAME
= MEDIA_DIR + "dodger_yellow.png";
private static final String DODGER_RED_IMAGE_FILENAME
= MEDIA_DIR + "dodger_red.png";
private static final String DODGER_BANG_IMAGE_FILENAME
= MEDIA_DIR + "dodger_bang.png";
private static final String DODGER_BOOM_IMAGE_FILENAME
= MEDIA_DIR + "dodger_boom.png";
private static final String BANG_AUDIO_FILENAME
= MEDIA_DIR + "bang.wav";
private static final String OBSTACLE_EXPLODE_AUDIO_FILENAME
= MEDIA_DIR + "explode.wav";
private static final Color BACKGROUND_COLOR
= Color.WHITE;
//////////////////////////////////////////////////////////////////////
// persistence constants
//////////////////////////////////////////////////////////////////////
private static final String FILE_CONTENTS_SPEC = "DodgerData";
private static final String LATEST_DATA_FILENAME = ".croftsoft" + File.separator + "dodger" + File.separator + "dodger01.dat";
private static final String BACKUP_DATA_FILENAME = ".croftsoft" + File.separator + "dodger" + File.separator + "dodger02.dat";
private static final String PERSISTENCE_KEY = FILE_CONTENTS_SPEC;
//////////////////////////////////////////////////////////////////////
// instance variables
//////////////////////////////////////////////////////////////////////
private AnimatedComponent animatedComponent;
private Rectangle bounds;
private DodgerSprite dodgerSprite;
private ObstacleSprite [ ] obstacleSprites;
private Rectangle dodgerBounds;
private long highScore;
private TextSprite scoreTextSprite;
private Random random;
private AudioClip obstacleExplodeAudioClip;
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public static void main ( String [ ] args )
//////////////////////////////////////////////////////////////////////
{
JFrame jFrame = new JFrame ( FRAME_TITLE );
try
{
jFrame.setIconImage ( ClassLib.getResourceAsImage (
Dodger.class, FRAME_ICON_FILENAME ) );
}
catch ( Exception ex )
{
}
Dodger dodger = new Dodger ( );
jFrame.setContentPane ( dodger );
LifecycleWindowListener.launchFrameAsDesktopApp (
jFrame,
new Lifecycle [ ] { dodger },
FRAME_SIZE,
SHUTDOWN_CONFIRMATION_PROMPT );
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public String getAppletInfo ( )
//////////////////////////////////////////////////////////////////////
{
return INFO;
}
//////////////////////////////////////////////////////////////////////
// interface Lifecycle methods
//////////////////////////////////////////////////////////////////////
public void init ( )
//////////////////////////////////////////////////////////////////////
{
System.out.println ( INFO );
animatedComponent = new AnimatedComponent ( this, FRAME_RATE );
animatedComponent.addComponentListener (
new ComponentAdapter ( )
{
public void componentResized ( ComponentEvent componentEvent )
{
resetBounds ( );
}
} );
Container contentPane = getContentPane ( );
contentPane.setLayout ( new BorderLayout ( ) );
contentPane.add ( animatedComponent, BorderLayout.CENTER );
animatedComponent.setCursor (
new Cursor ( Cursor.CROSSHAIR_CURSOR ) );
animatedComponent.init ( );
bounds = animatedComponent.getBounds ( ); try { Icon dodgerGreenIcon = new ImageIcon ( loadAutomaticImage (
DODGER_GREEN_IMAGE_FILENAME, Transparency.BITMASK ) );
Icon dodgerYellowIcon = new ImageIcon ( loadAutomaticImage (
DODGER_YELLOW_IMAGE_FILENAME, Transparency.BITMASK ) );
Icon dodgerRedIcon = new ImageIcon ( loadAutomaticImage (
DODGER_RED_IMAGE_FILENAME, Transparency.BITMASK ) );
Icon dodgerBangIcon = new ImageIcon ( loadAutomaticImage (
DODGER_BANG_IMAGE_FILENAME, Transparency.BITMASK ) );
Icon dodgerBoomIcon = new ImageIcon ( loadAutomaticImage (
DODGER_BOOM_IMAGE_FILENAME, Transparency.BITMASK ) );
URL bangAudioURL = getClass ( ).getClassLoader ( )
.getResource ( BANG_AUDIO_FILENAME );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -