📄 frozengame.java
字号:
import java.awt.*;
import java.awt.image.*;
import java.util.Vector;
import java.util.Random;
import java.applet.*;
import java.net.*;
//此类为游戏主界面类
public class FrozenGame extends GameScreen
{
//定义一些常用的常量
public final static int HORIZONTAL_MOVE = 0;
public final static int FIRE = 1;
public final static int KEY_UP = 38;
public final static int KEY_LEFT = 37;
public final static int KEY_RIGHT = 39;
public final static int KEY_SHIFT = 16;
public static String PARAMETER_PLAYER = "player";
public static String PARAMETER_OFFLINE = "offline";
public final static int KEY_M = 77;
public final static int KEY_S = 83;
boolean modeKeyPressed, soundKeyPressed;
Image background;
Image[] bubbles;
Image[] bubblesBlind;
Image[] frozenBubbles;
Image[] targetedBubbles;
Random random;
LaunchBubbleSprite launchBubble;
int launchBubblePosition;
PenguinSprite penguin;
Compressor compressor;
ImageSprite nextBubble;
int currentColor, nextColor;
BubbleSprite movingBubble;
BubbleManager bubbleManager;
LevelManager levelManager;
LifeManager lifeManager;
HighscoreManager highscoreManager;
Vector jumping;
Vector falling;
BubbleSprite[][] bubblePlay;
int fixedBubbles;
double moveDown;
Image gameWon, gameLost;
int nbBubbles;
Image bubbleBlink;
int blinkDelay;
ImageSprite hurrySprite;
int hurryTime;
SoundManager soundManager;
boolean readyToFire;
boolean endOfGame;
boolean frozenify;
int frozenifyX, frozenifyY;
public FrozenGame(GameApplet gameApplet)
{
super(gameApplet);
GameMedia media = gameApplet.getGameMedia();
random = new Random(System.currentTimeMillis());
background = media.loadImage("background.jpg");
bubbles = new Image[8];
bubblesBlind = new Image[8];
frozenBubbles = new Image[8];
for (int i=0 ; i<8 ; i++)
{
bubbles[i] = media.loadImage("bubble-"+Integer.toString(i+1)+".gif");
bubblesBlind[i] = media.loadImage("bubble-colourblind-"+Integer.toString(i+1)+".gif");
frozenBubbles[i] = media.loadImage("frozen-"+Integer.toString(i+1)+".gif");
}
targetedBubbles = new Image[6];
for (int i=0 ; i<6 ; i++)
{
targetedBubbles[i] = media.loadImage("fixed-"+Integer.toString(i+1)+".gif");
}
bubbleBlink = media.loadImage("bubble-blink.gif");
gameWon = media.loadImage("win_panel.jpg");
gameLost = media.loadImage("lose_panel.jpg");
soundManager = (SoundManager)gameApplet.getGameContext().getObject("soundManager");
launchBubblePosition = 20;
penguin = new PenguinSprite(media.loadImage("penguins.jpg"), random);
this.addSprite(penguin);
compressor = new Compressor(media, this);
hurrySprite = new ImageSprite(new Rectangle(203, 265, 240, 90), media.loadImage("hurry.gif"));
jumping = new Vector();
falling = new Vector();
bubblePlay = new BubbleSprite[8][13];//8列13行
bubbleManager = new BubbleManager(bubbles);
levelManager = (LevelManager)gameApplet.getGameContext().getObject("levelManager");
byte[][] currentLevel = levelManager.getCurrentLevel();
if (currentLevel == null)
{
System.err.println("Level not available");
return;
}
for (int j=0 ; j<12 ; j++)
{
for (int i=j%2 ; i<8 ; i++)
{
if (currentLevel[i][j] != -1)
{
BubbleSprite newOne = new BubbleSprite(new Rectangle(190+i*32-(j%2)*16, 44+j*28, 32, 32),
bubbles[currentLevel[i][j]], bubblesBlind[currentLevel[i][j]], frozenBubbles[currentLevel[i][j]],
bubbleBlink, bubbleManager, soundManager, this);
bubblePlay[i][j] = newOne;
this.addSprite(newOne);
}
}
}
currentColor = bubbleManager.nextBubbleIndex(random);
nextColor = bubbleManager.nextBubbleIndex(random);
if (FrozenBubble.getMode() == FrozenBubble.GAME_NORMAL)
{
nextBubble = new ImageSprite(new Rectangle(302, 440, 32, 32), bubbles[nextColor]);
}
else
{
nextBubble = new ImageSprite(new Rectangle(302, 440, 32, 32), bubblesBlind[nextColor]);
}
this.addSprite(nextBubble);
launchBubble = new LaunchBubbleSprite(gameApplet, currentColor, launchBubblePosition);
this.spriteToBack(launchBubble);
BubbleFont bubbleFont = (BubbleFont)gameApplet.getGameContext().getObject("bubbleFont");
TextSprite levelNumber = null;
if (levelManager.getLevelIndex() < 10)
{
levelNumber = new TextSprite(new Rectangle(175, 433, 21, 22), bubbleFont, String.valueOf(levelManager.getLevelIndex()));
}
else if (levelManager.getLevelIndex() < 100)
{
levelNumber = new TextSprite(new Rectangle(168, 433, 43, 22), bubbleFont, String.valueOf(levelManager.getLevelIndex()));
}
else
{
levelNumber = new TextSprite(new Rectangle(163, 433, 65, 22), bubbleFont, String.valueOf(levelManager.getLevelIndex()));
}
this.spriteToBack(levelNumber);
lifeManager = (LifeManager)gameApplet.getGameContext().getObject("lifeManager");
this.spriteToBack(lifeManager);
highscoreManager = (HighscoreManager)gameApplet.getGameContext().getObject("highscoreManager");
nbBubbles = 0;
}
private void initFrozenify()
{
ImageSprite freezeLaunchBubble = new ImageSprite(new Rectangle(301, 389, 34, 42), frozenBubbles[currentColor]);
ImageSprite freezeNextBubble = new ImageSprite(new Rectangle(301, 439, 34, 42), frozenBubbles[nextColor]);
this.addSprite(freezeLaunchBubble);
this.addSprite(freezeNextBubble);
frozenifyX = 7;
frozenifyY = 12;
frozenify = true;
}
private void frozenify()
{
frozenifyX--;
if (frozenifyX < 0)
{
frozenifyX = 7;
frozenifyY--;
if (frozenifyY<0)
{
frozenify = false;
this.addSprite(new ImageSprite(new Rectangle(152, 190, 337, 116), gameLost));
lifeManager.decrease();
soundManager.playSound(FrozenBubble.SOUND_NOH);
return;
}
}
while (bubblePlay[frozenifyX][frozenifyY] == null && frozenifyY >=0)
{
frozenifyX--;
if (frozenifyX < 0)
{
frozenifyX = 7;
frozenifyY--;
if (frozenifyY<0)
{
frozenify = false;
this.addSprite(new ImageSprite(new Rectangle(152, 190, 337, 116), gameLost));
lifeManager.decrease();
soundManager.playSound(FrozenBubble.SOUND_NOH);
return;
}
}
}
this.spriteToBack(bubblePlay[frozenifyX][frozenifyY]);
bubblePlay[frozenifyX][frozenifyY].frozenify();
this.spriteToBack(launchBubble);
}
public BubbleSprite[][] getGrid()
{
return bubblePlay;
}
public void addFallingBubble(BubbleSprite sprite)
{
spriteToFront(sprite);
falling.addElement(sprite);
}
public void deleteFallingBubble(BubbleSprite sprite)
{
removeSprite(sprite);
falling.removeElement(sprite);
}
public void addJumpingBubble(BubbleSprite sprite)
{
spriteToFront(sprite);
jumping.addElement(sprite);
}
public void deleteJumpingBubble(BubbleSprite sprite)
{
removeSprite(sprite);
jumping.removeElement(sprite);
}
public Random getRandom()
{
return random;
}
public double getMoveDown()
{
return moveDown;
}
private int nextColor()
{
int nextColor = random.nextInt() % 8;
if (nextColor<0)
{
return -nextColor;
}
return nextColor;
}
//整体向下压
private void sendBubblesDown()
{
soundManager.playSound(FrozenBubble.SOUND_NEWROOT);
for (int i=0 ; i<8 ; i++)
{
for (int j=0 ; j<12 ; j++)
{
if (bubblePlay[i][j] != null)
{
bubblePlay[i][j].moveDown();
if (bubblePlay[i][j].getSpritePosition().y>=380)
{
penguin.updateState(PenguinSprite.STATE_GAME_LOST);
endOfGame = true;
initFrozenify();
soundManager.playSound(FrozenBubble.SOUND_LOST);
}
}
}
}
moveDown += 28.;
compressor.moveDown();
}
//
private void blinkLine(int number)
{
int move = number % 2;
int column = (number+1) >> 1;
for (int i=move ; i<13 ; i++)
{
if (bubblePlay[column][i] != null)
{
bubblePlay[column][i].blink();
}
}
}
public void initBackground()
{
if (lifeManager.isDead())
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -