📄 game.java
字号:
1, 1, 1, 1, 40, 0, 0, 9, 0, 0, 34, 35, 34, 35, 51, 52, 0, 0, 0, 9, 0,
0, 0,
40, 1, 1, 1,1,
1, 1, 1, 1, 40, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
40,
1, 1, 1,1,
1, 1, 1, 1, 40, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0,
40,
1, 1, 1,1,
1, 1, 1, 1, 40, 0, 0, 0, 11, 0, 49, 50, 0, 0, 0, 49, 50, 0, 12, 0, 0,
0, 0,
40, 1, 1, 1,1,
1,1, 1, 1, 40, 0, 0, 0, 0, 11, 51, 52, 0, 0, 0, 51, 52, 12, 0, 0, 0,
0, 0,
40, 1, 1, 1,1,
1,1, 1, 1, 40, 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, 49, 50, 0, 0, 0, 49,
50, 0,
40, 1, 1, 1,1,
1,1, 1, 1, 40, 0, 16, 17, 0, 0, 51, 52, 0, 0, 0, 51, 52, 0, 0, 0, 51,
52,
0, 40, 1, 1, 1,1,
1, 1, 1, 1, 40, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50,
0,
40, 1, 1, 1,1,
1,1, 1, 1, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, 0,
40,
1, 1, 1,1,
1, 1, 1, 1, 40, 0, 0, 0, 16, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40,
1, 1, 1,1,
1,1, 1, 1, 3, 4, 0, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
4,
1, 1, 1,1,
1,1, 1, 1, 5, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
39,
39, 39, 5, 38, 1, 1, 1,1,
1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1,
1, 1,1,
1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1,
1, 1,1,
1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1,
1, 1,1,
1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1,
1, 1,1};
for (int i = 0; i < landMap4.length; i++) {
int column = i % 28;
int row = (i - column) / 28;
landLayer.setCell(column, row, landMap4[i]);
}
break;
}
// 初始化怪物
try {
int sequence2[] = {
0, 0, 1, 1}; //动画帧的序列
int sequence4[] = {
0, 1, 2, 3}; //动画帧的序列
playerSprite = new Sprite(Image.createImage("/Hero.png"), 13, 18);
playerSprite.setFrameSequence(sequence2);
GoodsSprite = new Sprite(Image.createImage("/Goods.png"), 15, 15);
placeSprite(GoodsSprite, landLayer);
BreadSprite = new Sprite(Image.createImage("/Bread.png"), 14, 14);
placeSprite(BreadSprite, landLayer);
explosionSprite = new Sprite(Image.createImage("/explosion.png"), 21, 21); //爆炸
explosionSprite.setFrameSequence(sequence4);
ringSprite = new Sprite(Image.createImage("/ring.png"), 20, 20); //绝对防御
for (int i = 0; i < amount; i++) {
//地雷
mineSprite[i] = new Sprite(Image.createImage("/mine.png"), 15, 15);
placeSprite(mineSprite[i], landLayer);
//怪
monster2Sprite[i] = new MonsterSprite(Image.createImage(
"/xiaoguai1.png"), 19, 13, amount, landLayer, playerSprite, 3);
monster2Sprite[i].setFrameSequence(sequence2);
placeSprite(monster2Sprite[i], landLayer);
//怪
monster1Sprite[i] = new MonsterSprite(Image.createImage("/xiaoguai.png"),
14, 18, 2, landLayer,
playerSprite, 1);
monster1Sprite[i].setFrameSequence(sequence2);
placeSprite(monster1Sprite[i], landLayer);
}
//boss
bossSprite = new MonsterSprite(Image.createImage("/boss.png"),
25, 25, dif + 1, landLayer, playerSprite,
10);
bossSprite.setFrameSequence(sequence2);
placeSprite(bossSprite, landLayer);
}
catch (IOException e) {
System.err.println("Failed loading images!228");
}
// 怪物和图层添加到图层管理器中
layers = new LayerManager();
layers.append(ringSprite);
layers.append(playerSprite);
layers.append(bossSprite);
layers.append(GoodsSprite);
layers.append(BreadSprite);
layers.append(explosionSprite);
for (int i = 0; i < amount; i++) {
layers.append(mineSprite[i]);
layers.append(monster2Sprite[i]);
layers.append(monster1Sprite[i]);
}
layers.append(landLayer);
layers.append(floorLayer);
gameOver = false;
//获取上次游戏变量
if (Navigator.resume) {
int[] loadGame = new int[N];
readRecord(loadGame);
score = loadGame[0];
energy = loadGame[1];
playerX = loadGame[2];
playerY = loadGame[3];
goodsSaved = loadGame[4];
dif = loadGame[5];
time = loadGame[6];
xView = loadGame[8];
yView = loadGame[9];
playerSprite.setPosition(playerX, playerY);
playerSprite.setVisible(true); // 显示玩家精灵
}
// 初始化游戏变量
else {
if (pass == 0) {
score = 0; //分数初始化
}
energy = 50;
goodsSaved = 0;
time = 60000 - pass * 5000; //设置游戏时间
// 随机放置玩家并调整视图窗口
placeSprite(playerSprite, landLayer);
playerX = randX;
playerY = randY;
playerSprite.setVisible(true); // 显示玩家精灵
xView = playerSprite.getX() -
( (SCREEN_WIDTH - playerSprite.getWidth()) / 2);
yView = playerSprite.getY() -
( (SCREEN_HEIGHT - playerSprite.getHeight()) / 2);
}
ring = 0; //绝对防御条件
ring1 = 1;
explosionSprite.setVisible(false); //设置爆炸动画为不可见
ringSprite.setVisible(false); //设置防御为不可见
explosionSprite.setFrame(0);
layers.setViewWindow(xView, yView, SCREEN_WIDTH,
SCREEN_HEIGHT - infoBar.getHeight());
// 开始音乐(在开始处)
try {
musicPlayer.setMediaTime(0);
if (volume) {
musicPlayer.start(); }
}
catch (MediaException me) {
}
}
public void stop() {
sleeping = true; // 关闭线程
// 关闭游戏音乐播放
if (volume) {
try {
musicPlayer.close();
rescuePlayer.close();
minePlayer.close();
gameoverPlayer.close();
winPlayer.close();
}
catch (Exception fdf) {}
}
writeHiScores(); //写入最高分数
gameOver = true;
}
public void run() {
Graphics g = getGraphics();
// 游戏循环
while (!sleeping) {
update();
draw(g);
try {
Thread.sleep(frameDelay);
time = time - frameDelay;
}
catch (InterruptedException ie) {}
}
}
private void update() {
// 检测游戏结束
if (!pause) {
if (gameOver) {
int keyState = getKeyStates();
if ( (keyState & FIRE_PRESSED) != 0) {
newGame(); // 开始新游戏
}
return; //否则返回
}
// 按键相应
int keyState = getKeyStates();
int xMove = 0, yMove = 0;
if ( (keyState & LEFT_PRESSED) != 0) {
if (ring == 3) {
xMove = -8;
}
else {
xMove = -6;
}
}
else if ( (keyState & RIGHT_PRESSED) != 0) {
if (ring == 3) {
xMove = 8;
}
else {
xMove = 6;
}
}
if ( (keyState & UP_PRESSED) != 0) {
if (ring == 3) {
yMove = -8;
}
else {
yMove = -6;
}
}
else if ( (keyState & DOWN_PRESSED) != 0) {
if (ring == 3) {
yMove = 8;
}
else {
yMove = 6;
}
}
if (xMove != 0 || yMove != 0) {
layers.setViewWindow(xView + xMove, yView + yMove, SCREEN_WIDTH,
SCREEN_HEIGHT - infoBar.getHeight());
playerSprite.move(xMove, yMove);
ringSprite.move(xMove, yMove);
playerSprite.nextFrame();
}
//绝对防御设置
if (ring == 2) {
ring1 = 2; //绝对防御条件
ring = 3;
ringSprite.setPosition(playerSprite.getRefPixelX(),
playerSprite.getRefPixelY());
ringSprite.setVisible(true); //防御可见
}
if (ring1 == 0) {
ring = 0;
}
if (ring == 0) {
ringSprite.setVisible(false);
ring1 = 1;
}
//检查玩家精灵和陆地图层之间的冲突
if (playerSprite.collidesWith(landLayer, true)) {
// 恢复视图窗口和玩家最初的位置
layers.setViewWindow(xView, yView, SCREEN_WIDTH,
SCREEN_HEIGHT - infoBar.getHeight());
playerSprite.move( -xMove, -yMove);
ringSprite.move( -xMove, -yMove);
}
else { // 如果没有冲突,
playerX += xMove; //更新玩家位置
playerY += yMove;
//提交对视图窗口位置的改变
xView += xMove;
yView += yMove;
}
// 检测玩家与物品之间的冲突
if (playerSprite.collidesWith(GoodsSprite, true)) {
// 播放声音表示获得物品
try {
if (volume) {
rescuePlayer.start();
}
}
catch (MediaException me) {
}
goodsSaved = goodsSaved + 1; ; // 增加营获得的物品的数目
score = score + 10 + 5 * dif + time / 1000; //增加玩家积分
placeSprite(GoodsSprite, landLayer); // 随机把物品放在一个新的位置
}
//检测玩家与面包之间的冲突
if (playerSprite.collidesWith(BreadSprite, true)) {
// 播放音乐表示从面包获得能量
if (volume) {
try {
Manager.playTone(ToneControl.C4 + 12, 250, 100);
}
catch (MediaException me) {
}
}
if (energy == 50 || ring1 == 0) {
ring = Math.min(ring + 1, 4); //绝对防御条件
}
energy = Math.min(energy + 15, 50); // 增加玩家的能量
placeSprite(BreadSprite, landLayer); // 随机的把面包放在一个新的位置
}
for (int i = 0; i < amount; i++) {
// 更新怪物
monster2Sprite[i].update();
monster1Sprite[i].update();
// 检测玩家与地雷之间的冲突
if (playerSprite.collidesWith(mineSprite[i], true)) {
explosionSprite.setPosition(playerSprite.getRefPixelX() -
ringSprite.getWidth() / 2,
playerSprite.getRefPixelY() -
ringSprite.getHeight() / 2);
explosionSprite.setVisible(true); //爆炸精灵可见
explosionSprite.setFrame(explosionCnt);
// 播放撞到地雷的声音
try {
if (volume) {
minePlayer.start();
}
}
catch (MediaException me) {
}
if (ring == 3) {
ring1--;
}
else {
energy -= 20; // 减少玩家的能量
}
// 随机的把雷放在一个新的位置
placeSprite(mineSprite[i], landLayer);
}
explosionCnt = explosionSprite.getFrame();
explosionSprite.nextFrame();
if (explosionCnt == 3) {
explosionSprite.setVisible(false);
explosionCnt = 0;
}
// 检测玩家与怪之间的冲突
if (playerSprite.collidesWith(monster2Sprite[i], true)) {
// 播放一个乐音表示撞到怪
if (volume) {
try {
Manager.playTone(ToneControl.C4, 250, 100);
}
catch (MediaException me) {
}
}
if (ring == 3) {
ring1--;
}
else {
energy -= 6;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -