📄 splashscreen.java
字号:
import java.awt.*;
import java.util.Random;
//游戏初始屏幕
public class SplashScreen extends GameScreen
{
//保存模式切换信息
private final static String[] MODE_DESC = {"normal mode", "colorblind mode"};
//保存声音切换信息
private final static String[] SOUND_DESC = {"sound enabled", "sound disabled"};
//切换信息显示初始值
private final int MODE_TIMING = 200;
//切换信息文字精灵
private TextSprite modeMessage;
//切换信息显示延时时间
private int modeTiming;
//开始游戏信息精灵
private TextSprite[] flashingMessage;
//开始游戏信息精灵闪烁的计数器
private int flashDelay;
//企鹅眼睛图片精灵
private ImageSprite penguinEyes;
//企鹅眼睛图片精灵显示延时时间
private int eyesClosed;
//产生随机数对象
private Random rand;
//保存整个游戏屏幕图片
private Image fullBackground;
//保存游戏开始图片
private Image splashBackground;
//保存模式切换和声音切换信息
private boolean modeKeyPressed, soundKeyPressed;
//保存游戏是否已初始化
private boolean gameInitialized;
//保存游戏字体对象
private GameFont font;
//构造函数
public SplashScreen(GameApplet gameApplet)
{
super(gameApplet);
//得到游戏媒体加载器对象
GameMedia media = gameApplet.getGameMedia();
//加载背景图片
fullBackground = media.loadImage("background.jpg");
splashBackground = media.loadImage("splash.jpg");
//得到游戏字体对象
font = (GameFont)gameApplet.getGameContext().getObject("bubbleFont");
//初始化开始游戏信息精灵
flashingMessage = new TextSprite[3];
flashingMessage[0] = new TextSprite(new Rectangle(289, 383, 100, 22), font, "PRESS");
flashingMessage[1] = new TextSprite(new Rectangle(300, 407, 100, 22), font, "FIRE");
flashingMessage[2] = new TextSprite(new Rectangle(276, 430, 100, 22), font, "TO START");
for (int i=0 ; i<3 ; i++)
{
this.addSprite(flashingMessage[i]);
}
//初始化企鹅眼睛图片精灵
penguinEyes = new ImageSprite(new Rectangle(370, 280, 19, 9), media.loadImage("close_eyes.gif"));
//初始化滚动文字信息精灵
String message = "| FROZEN BUBBLE 1UP V 0.9.5 - JAVA RELEASE 2 { DESIGN & PROGRAMMING - Guillaume Cottenceau";
message += " } GRAPHICS - Alexis Younes (AYO73) [ GRAPHICS (BUBBLES) - Amaury Amblard-Ladurantie";
message += " ] SOUND & MUSIC - Matthias Le Bidan (Matths) ? JAVA 1.1+ VERSION - Glenn sanson ";
message += " \\ SPECIAL THANKS to Benoit dien for his help & to my wife for her patience";
message += " ? PLEASE VISIT THE FROZEN BUBBLE OFFICIAL WEB SITE AT HTTP://WWW.FROZEN-BUBBLE.ORG ?";
ScrollingTextSprite scrollingMessage = new ScrollingTextSprite(new Rectangle(168, 9, 300, 22), font, message, 1);
this.addSprite(scrollingMessage);
//初始化产生随机数对象
rand = new Random(System.currentTimeMillis());
//重置高分管理器对象
((HighscoreManager)this.getGameApplet().getGameContext().getObject("highscoreManager")).reset();
//重置游戏生命周期管理器
((LifeManager)gameApplet.getGameContext().getObject("lifeManager")).restart();
modeTiming = -1;
}
//初始化背景图片
public void initBackground()
{
addToBackground(fullBackground, new Point(0, 0));
addToBackground(splashBackground, new Point(116, 0));
}
//处理事件
public void play(int[] keyCodes, Point mouseCoord, boolean leftButton, boolean rightButton)
{
boolean newModeKeyState = false;
boolean newSoundKeyState = false;
//游戏初始化已完成
if (gameInitialized)
{
//解析用户的按键事件
for (int i=0 ; i<keyCodes.length ; i++)
{
int current = keyCodes[i];
if (current == FrozenGame.KEY_M) //有模式切换事件
{
newModeKeyState = true;
}
if (current == FrozenGame.KEY_S) //有声音切换事件
{
newSoundKeyState = true;
}
//当有向上键或shift键时,开始进入游戏
if (current == FrozenGame.KEY_UP || current == FrozenGame.KEY_SHIFT)
{
//设置游戏为初级
((LevelManager)getGameApplet().getGameContext().getObject("levelManager")).goToFirstLevel();
gameInitialized = false;
//切换游戏屏幕
getGameApplet().setCurrentScreen(new FrozenGame(getGameApplet()));
}
}
}
else
{
//当无用户按键时,标志游戏已作好准备
if (keyCodes.length == 0)
{
gameInitialized = true;
}
}
//当用户按下模式切换键时,显示模式信息
if (newModeKeyState != modeKeyPressed)
{
if (newModeKeyState)
{
FrozenBubble.switchMode();
//删除原有的切换信息
if (modeTiming != -1)
{
this.removeSprite(modeMessage);
}
//增加新的切换信息
modeMessage = new TextSprite(new Rectangle((640-getTextSize(MODE_DESC[FrozenBubble.getMode()], font)>>1), 80, 400, 100), font, MODE_DESC[FrozenBubble.getMode()]);
this.addSprite(modeMessage);
modeTiming = MODE_TIMING;
}
modeKeyPressed = newModeKeyState;
}
//当用户按下声音切换键时,显示声音信息
if (newSoundKeyState != soundKeyPressed)
{
if (newSoundKeyState)
{
SoundManager sm = (SoundManager)this.getGameApplet().getGameContext().getObject("soundManager");
sm.setSoundState(!sm.getSoundState());
//删除原有的切换信息
if (modeTiming != -1)
{
this.removeSprite(modeMessage);
}
//增加新的切换信息
if (sm.getSoundState())
{
modeMessage = new TextSprite(new Rectangle((640-getTextSize(SOUND_DESC[0], font)>>1), 80, 400, 100), font, SOUND_DESC[0]);
}
else
{
modeMessage = new TextSprite(new Rectangle((640-getTextSize(SOUND_DESC[1], font)>>1), 80, 400, 100), font, SOUND_DESC[1]);
}
this.addSprite(modeMessage);
modeTiming = MODE_TIMING;
}
soundKeyPressed = newSoundKeyState;
}
//处理切换信息
if (modeTiming != -1)
{
//当切换信息计数器为0时,删除切换信息
if (modeTiming == 0)
{
this.removeSprite(modeMessage);
modeMessage = null;
}
modeTiming--;
}
//实现开始信息的闪动
flashDelay++;
if (flashDelay == 30)
{
for (int i=0 ; i<3 ; i++)
{
this.removeSprite(flashingMessage[i]);
}
}
else if (flashDelay == 50)
{
for (int i=0 ; i<3 ; i++)
{
this.addSprite(flashingMessage[i]);
}
flashDelay = 0;
}
if (rand.nextInt() % 100 == 0 && eyesClosed == 0)
{
eyesClosed = 20;
this.addSprite(penguinEyes);
}
else if (eyesClosed != 0)
{
eyesClosed--;
if (eyesClosed == 10)
{
this.removeSprite(penguinEyes);
}
}
}
private int getTextSize(String text, GameFont font)
{
int size = 0;
for (int i=0 ; i<text.length() ; i++)
{
size += font.charSize(text.charAt(i));
size += font.SEPARATOR_WIDTH;
}
return size - font.SEPARATOR_WIDTH;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -