📄 game.java
字号:
package game;
import lib.*;
import javax.microedition.lcdui.*;
import java.io.*;
import java.util.*;
public class Game extends TilesEngine{
public static final int STATE_SWITCHIN=0; //场景切入
public static final int STATE_RUN=1; //运行
public static final int STATE_MENU=2; //菜单
public static final int STATE_WIN=3; //过关
public static final int STATE_LOSE=4; //失败
public static final int STATE_SWITCHOUT=5; //场景切出
//主角
private Player player=new Player();
//关卡
private int level;
//生命
private int life;
//得分
private int score;
//上次加生命得分
private int preScore;
//状态
private int state;
//幕布高度
private int curtainHeight;
private int menuIndex;
private Resource resource=Resource.getResource();
private Menu menu;
private boolean pause;
private Time winTime=new Time(3000);
private Time loseTime=new Time(3000);
private Time gameTime=new Time(600000);
private int[] scoreBuff=new int[7];
public Game(){
setPlayer(player);
}
//设置菜单
public void setMenu(Menu menu){
this.menu=menu;
}
//设置状态
public void setState(int state){
this.state=state;
}
//返回状态
public int getState(){
return state;
}
//新游戏
public void newGame(){
player.setX(0);
player.setY(0);
level=0;
score=preScore=0;
life=3;
loadGame();
}
//继续游戏
public void continueGame(){
//读关卡信息
resource.readData();
level=resource.data[11];
score=preScore=resource.data[12];
life=3;
loadGame();
}
//下一关
private void nextGame(){
player.setPosition(0,0);
level++;
if(level==3){
//写排行榜数据
resource.addHiscoreData(score);
resource.saveData();
resource.releaseLevel2Game();
resource.loadMenu();
getFrameManager().setCurrFrame(menu);
}
else{
loadGame();
}
}
//重新开始这一关
private void restartGame(){
life--;
if(life==0){
//写排行榜数据和关卡信息
resource.setGateData(level,score);
resource.addHiscoreData(score);
resource.saveData();
switch(level){
case 0:
resource.releaseLevel1Game();
break;
case 1:
resource.releaseLevel2Game();
break;
case 2:
resource.releaseLevel3Game();
break;
}
resource.loadMenu();
getFrameManager().setCurrFrame(menu);
}
else{
loadGame();
}
}
//载入游戏
private void loadGame(){
switch(level){
case 0:
resource.releaseLevel1Game();
resource.releaseLevel2Game();
resource.releaseLevel3Game();
resource.loadLevel1Game();
loadMap("/image/map1.png",resource.imgLevel1Tiles,resource.imgLevel1Back);
break;
case 1:
resource.releaseLevel1Game();
resource.releaseLevel2Game();
resource.releaseLevel3Game();
resource.loadLevel2Game();
loadMap("/image/map2.png",resource.imgLevel2Tiles,resource.imgLevel2Back);
break;
case 2:
resource.releaseLevel1Game();
resource.releaseLevel2Game();
resource.releaseLevel3Game();
resource.loadLevel3Game();
loadMap("/image/map3.png",resource.imgLevel3Tiles,resource.imgLevel3Back);
break;
}
curtainHeight=XCanvas.HEIGHT/8+1;
state=STATE_SWITCHIN;
gameTime.restart();
gameTime.update(1);
setReel(REEL_BOTH);
}
//载入幽灵
protected void loadSprites(DataInputStream in) throws Exception{
int count=in.readInt();
for(int i=0;i<count;i++){
switch(in.readInt()){
//小球
case 0:
addSprites(new Ball(in.readInt(),in.readInt()));
break;
//固定猴子
case 1:
addSprites(new FixedMonkey(in.readInt(),in.readInt(),in.readInt()));
break;
//运动猴子
case 2:
addSprites(new UnfixedMonkey(in.readInt(),in.readInt(),in.readInt(),in.readInt()));
break;
//鳄鱼
case 3:
addSprites(new Cayman(in.readInt(),in.readInt(),in.readInt(),in.readInt()));
break;
//老虎
case 4:
addSprites(new Tiger(in.readInt(),in.readInt(),in.readInt()));
break;
//boss
case 100:
switch(in.readInt()){
//固定猴子
case 1:
break;
//运动猴子
case 2:
addBoss(new BossUnfixedMonkey(in.readInt(),in.readInt(),in.readInt(),in.readInt(),in.readInt()));
break;
//鳄鱼
case 3:
addBoss(new BossCayman(in.readInt(),in.readInt(),in.readInt(),in.readInt(),in.readInt()));
break;
//老虎
case 4:
addBoss(new BossTiger(in.readInt(),in.readInt(),in.readInt(),in.readInt()));
break;
}
break;
}
}
}
//更新场景切入
public void updateSwitchIn(int elapsedTime){
curtainHeight--;
//切换到运行状态
if(curtainHeight==0){
state=STATE_RUN;
if(resource.isMIPD2_0){
resource.openMedia.stop();
resource.winMedia.stop();
resource.loseMedia.stop();
resource.backMedia.play();
}
}
}
//更新运行
public void updateRun(int elapsedTime){
//向左走
if(getKeyStates(XCanvas.KEY_LEFT) || getKeyStates(XCanvas.KEY_NUM4)){
player.setVelocityX(-2);
}
//向右走
if(getKeyStates(XCanvas.KEY_RIGHT) || getKeyStates(XCanvas.KEY_NUM6)){
player.setVelocityX(2);
}
//不能向回走
if(player.getX()>(getMapWidth()-XCanvas.WIDTH-50))
setReel(REEL_SINGLE);
//胜利
if(getBossCount()==0){
if(level==1){
for(int i=308;i<=316;i++)
setTile(10,i,(byte)11);
setTile(10,307,(byte)10);
setTile(10,317,(byte)12);
}
removeAllSprites();
state=STATE_WIN;
score+=gameTime.getCurrTime()/1000*100;
score+=life*10000;
if(resource.isMIPD2_0){
resource.backMedia.stop();
resource.winMedia.play();
}
else
if(resource.sound) resource.winSound.play(1);
}
if(gameTime.update(elapsedTime)){
player.setAct(Sprite.ACT_DEAD);
}
}
//更新胜利
public void updateWin(int elapsedTime){
if(winTime.update(elapsedTime)){
state=STATE_SWITCHOUT;
}
}
//更新失败
public void updateLose(int elapsedTime){
if(loseTime.update(elapsedTime)){
state=STATE_SWITCHOUT;
}
}
//场景切出
public void updateSwitchOut(int elapsedTime){
curtainHeight++;
if(curtainHeight==XCanvas.HEIGHT/8+1){
if(player.getAct()==Sprite.ACT_DEAD){
restartGame();
}
else{
nextGame();
}
}
}
//更新
public void update(int elapsedTime){
if(pause || state==STATE_MENU) return;
super.update(elapsedTime);
switch(state){
case STATE_SWITCHIN:
updateSwitchIn(elapsedTime);
break;
case STATE_RUN:
updateRun(elapsedTime);
break;
case STATE_MENU:
break;
case STATE_WIN:
updateWin(elapsedTime);
break;
case STATE_LOSE:
updateLose(elapsedTime);
break;
case STATE_SWITCHOUT:
updateSwitchOut(elapsedTime);
break;
}
}
//加生命
private void addLife(){
// if(score-preScore>=10000){
// preScore+=10000;
// if(life<8) life++;
// }
}
//撞击幽灵
public void playerCollision(Sprite sprite){
if(state!=STATE_RUN)
return;
//撞小球
if(sprite instanceof Ball){
removeSprites(sprite);
score+=100;
addLife();
}
//撞香蕉
else if(sprite instanceof Banana){
player.setAct(sprite.ACT_DEAD);
}
//撞猴子
else if(sprite instanceof FixedMonkey || sprite instanceof UnfixedMonkey){
if(player.getVelocityY()<=0){
player.setAct(Sprite.ACT_DEAD);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -