拼图游戏源代码:拼图游戏程序源代码



某些原因,部分功能尚未实现,在此并贴出来.如果各位朋友有兴趣,可自行完善相应功能.

//------------------------------
//MyGameCanvas.java
//------------------------------

packagesrc;

importjavax.microedition.lcdui.game.*;
importjavax.microedition.lcdui.*;
importjavax.microedition.media.*;//西门子C65不支持,故无法以此思路方法播放声音,在此不插入
importjava.util.*;
importjava.io.*;

publicMyGameCanvasextendsGameCanvasimplementsCommandListener
...{

/***//**代表标题显示状态常量*/
privatefinalSTAGE_TITLE=0;
/***//**代表关卡开始显示状态常量*/
privatefinalSTAGE_START=1;
/***//**代表关卡显示状态常量*/
privatefinalSTAGE_PLAYING=2;
/***//**代表游戏中显示完整图案常量*/
privatefinalSTAGE_PLAYING_SEE_PERFECT_PIC=3;
/***//**代表关卡结束显示状态常数*/
privatefinalSTAGE_OVER=5;
/***//**代表过关显示状态常量*/
privatefinalSTAGE_CLEAR=7;
/***//**代表全关卡过关显示状态常量*/
privatefinalALL_STAGE_CLEAR=9;
/***//**代表游戏结束常量*/
privatefinalGAME_END=10; [Page]
/***//**最大关卡数*/
privatefinalMAX_STAGE=5;
/***//**正常模式常量*/
publicfinalMODE_NORMAL=1;
/***//**极限模式常量*/
publicfinalMODE_UTMOST=2;

/***//**储存现在的显示状态变量*/
privategameState;

/***//**储存游戏模式变量*/
privategameMode;

/***//**储存目前关卡*/
privatestageNum;

/***//**储存已过关关卡*/
privatestagePassedNum;

/***//**储存剩余时间*/
privatelonglastTime;



/***//**储存损耗时间,普通模式用到*/
privatelongusedTime; [Page]

/***//**储存单关通过最短时间*/
privatelongquicklyPassOneStageTime;

/***//**游戏过程暂停状态所用标志*/
privatebooleanisGamePaused;

/***//**储存显示对象*/
privateDisplaydisplay;

/***//**储存音乐对象*/
privatePlayerplayer;//西门子C65不支持

/***//**储存主类对象,方便进行退出的类操作*/
privateCrazyPuzzleMIDletMIDlet;

/***//**层管理*/
privateLayerManagerlm;

/***//**背景*/
privateTiledLayerpuzzlePic;

/***//**建个画图对象*/
privateGraphicsg;

/***//**时间倒计时,类为继承*/
privateTimeCounterTasktimeCounter;

/***//**储存各关卡谜题资讯变量*/
privatefinalPUZZLE_MAP=...{
...{//关卡1谜题
1,5,9,13,
2,6,10,14, [Page]
3,7,11,15,
4,8,12,0
},
...{//关卡2谜题
4,3,2,1,
8,7,6,5,
12,11,10,9,
15,13,14,0
},
...{//关卡3谜题
12,8,4,1,
15,9,5,2,
13,10,6,3,
14,11,7,0
},
...{//关卡4谜题
14,15,12,13,
8,9,10,11,
4,5,6,7,
1,2,3,0


},
...{//关卡5谜题
14,12,15,13,
11,10,9,8, [Page]
7,6,5,4,
3,2,1,0
}
};

//norains:*构造*
publicMyGameCanvas(Displaydisp,CrazyPuzzleMIDletm,mode)
...{
super(false);
this.display=disp;
this.MIDlet=m;
this.gameMode=mode;
stageNum=1;
stagePassedNum=0;
lastTime=0;
usedTime=0;
quicklyPassOneStageTime=0;
isGamePaused=false;
g=this.getGraphics;
gameState=STAGE_TITLE;
this.FullScreenMode(true);//全屏幕
//增加命令
//this.addCommand(Command(\"重新开始\",Command.OK,1));
this.addCommand(Command(\"取消\",Command.BACK,1));
this.addCommand(Command(\"返回列表\",Command.BACK,1));
this.addCommand(Command(\"退出游戏\",Command.EXIT,1));
this.CommandListener(this);
render;
}

publicvoidcommandAction(Commandcommand,Displayablearg1)
...{
//TODOAuto-generatedmethodstub [Page]
Stringcmd=command.getLabel;
(cmd.equals(\"重新开始\"))
...{
//不知为何,下面这段代码无法正常关闭音乐流,无论在模拟器还是在实体机上
//造成后果是两首音乐起播放,以致于系统变慢,无法正常游戏
//估计产生原因是上首歌还没退出来,下首就播放了
//关闭本节声音播放,以方便下关播放新音乐
gameState=STAGE_TITLE;
try
...{
player.stop;
}
catch(Exceptionexp)
...{}



render;

}
(cmd.equals(\"返回列表\"))
...{
(player!=null)


...{
//关闭本节声音播放
try
...{
player.stop; [Page]
}
catch(Exceptionexp)
...{}

}
ListChoiceScreenlcs=ListChoiceScreen(display,MIDlet);
display.Current(lcs);
}
(cmd.equals(\"退出游戏\"))
...{
MIDlet.notyDestroyed;
}
(cmd.equals(\"取消\"))
...{
//什么都不做,返回原画面
}
}

//*主要是用来绘图
publicvoidrender
...{
switch(gameState)
...{
STAGE_TITLE:
doTitlePa;
;
STAGE_START:
doStartPa;
;
STAGE_PLAYING: [Page]
doPlayingPa;
;
STAGE_PLAYING_SEE_PERFECT_PIC:
doPlayingSeePerfectPicPa;
;
STAGE_OVER:
doStageOverPa;
;
STAGE_CLEAR:
doStageClearPa;
;
ALL_STAGE_CLEAR:
doStageAllClearPa;
;
GAME_END:
doGameEndPa;
;


}

}

//*画出关卡画面*
privatevoiddoTitlePa
...{
dispWidth=this.getWidth;
dispHeight=this.getHeight;
g.Color(255,255,255);
g.fillRect(0,0,getWidth,getHeight); [Page]
Imageimg1=creatImage(\"/res/ready.png\");
g.drawImage(img1,(dispWidth-img1.getWidth)/2,(dispHeight-img1.getHeight)/2-4,0);
Imageimg2=creatImage(\"/res/num\"+stageNum+\".png\");
g.drawImage(img2,(dispWidth-img2.getWidth)/2,(dispHeight-img1.getHeight)/2+img1.getHeight-1,0);
this.flushGraphics;
}

//*关卡开始前
booleanfirstStart=true;//是否首次运行标志
musicNum=1;//音乐不够,以此变量做两首歌更换标志
privatevoiddoStartPa
...{
//*关卡
lm=LayerManager;
puzzlePic=creatPuzzlePic;
//*测试用
//puzzlePic=creatTestPuzzlePic;//测试用
lm.append(puzzlePic);


//播放声音
//西门子模拟器不支持下面这段代码,但实体机子完美支持
try
...{
InputStreamin;
//in=getClass.getResourceAsStream(\"/res/music\"+stageNum+\".mid\");这是有5首音乐时候使用
//只有两首歌时候使用
(musicNum1)
...{
in=getClass.getResourceAsStream(\"/res/music1.mid\"); [Page]
musicNum=2;
}

...{
in=getClass.getResourceAsStream(\"/res/music2.mid\");
musicNum=1;
}

player=Manager.createPlayer(in,\"audio/midi\");
player.LoopCount(10);
player.start;
}
catch(IOExceptione)...{}
catch(MediaExceptione)...{}



gameState=STAGE_PLAYING;


//创建并启动计时器
(firstStarttrue||gameModeMODE_NORMAL)
...{
(gameModeMODE_NORMAL)
...{
timeCounter=TimeCounterTask(300);
}
(gameModeMODE_UTMOST)//此段代码只在第次时运行
...{
timeCounter=TimeCounterTask(900); [Page]
}
Timertimer=Timer;
timer.schedule(timeCounter,1000,1000);
firstStart=false;
}

...{
timeCounter=TimeCounterTask(lastTime);
Timertimer=Timer;
timer.schedule(timeCounter,1000,1000);
firstStart=false;
.out.prln(\"first\");
}
//
render;
}

//*游戏进行中
privatevoiddoPlayingPa
...{
//*设置计时器字体
Fontfont;
font=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_SMALL);
g.Color(1,16,57);
g.fillRect(0,0,this.getWidth,this.getHeight);
lm.ViewWindow(0,0,this.getWidth,this.getHeight);
lm.pa(g,(this.getWidth-112)/2,font.getHeight+2);
//*画格子
g.Color(255,255,255); [Page]
x1,y1,x2,y2;
//*横线
y1=y2=font.getHeight+2;
x1=(this.getWidth-112)/2;
x2=((this.getWidth-112)/2)+112;
for(i=0;i<5;i)
...{
g.drawLine(x1,y1,x2,y2);
y1=y2=y2+28;
}

//*直线
x1=x2=(this.getWidth-112)/2;
y1=font.getHeight+2;
y2=font.getHeight+2+112;
for(i=0;i<5;i)
...{
g.drawLine(x1,y1,x2,y2);


x1=x2=x2+28;
}
g.Color(255,255,255);
g.drawString(timeCounter.timeString,(this.getWidth-font.Width(timeCounter.timeString))/2,1,0);

flushGraphics;
}

//*游戏进行中观看全图
privatevoiddoPlayingSeePerfectPicPa
...{
//*在游戏中切换到完整图案
g.Color(1,16,57);
g.fillRect(0,0,this.getWidth,this.getHeight);
Fontfont;
font=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_SMALL); [Page]
Imageimg=creatImage(\"/res/stage\"+stageNum+\".png\");
//*画出计时器
g.Color(255,255,255);
g.drawString(timeCounter.timeString,(this.getWidth-font.Width(timeCounter.timeString))/2,1,0);
g.drawImage(img,(this.getWidth-112)/2,font.getHeight+2,0);
//*画出右下角小缺口
g.Color(1,16,57);
g.fillRect((this.getWidth-112)/2+82,font.getHeight+2+82,30,30);
//*画出图片方框
g.Color(255,255,255);
g.drawRect((this.getWidth-112)/2,font.getHeight+2,111,111);


flushGraphics;
}

//*游戏过
privatevoiddoStageClearPa
...{
g.Color(255,255,255);
g.fillRect(0,0,this.getWidth,this.getHeight);
Imageimg=creatImage(\"/res/clear.png\");
g.drawImage(img,(this.getWidth-img.getWidth)/2,(this.getHeight-img.getHeight)/3,0);
//*描绘字体
g.Color(1,16,57);
Fontfont;
font=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_SMALL);
(gameModeMODE_NORMAL)
...{
StringwriteString=\"最快过关:\"+numToTime(quicklyPassOneStageTime);
g.drawString(writeString,(this.getWidth-font.Width(writeString))/2,(this.getHeight-img.getHeight)/3+img.getHeight+2,0); [Page]
writeString=\"全部耗费:\"+numToTime(usedTime);
g.drawString(writeString,(this.getWidth-font.Width(writeString))/2,(this.getHeight-img.getHeight)/3+img.getHeight+font.getHeight+2,0);
}
(gameModeMODE_UTMOST)
...{
StringwriteString=\"已经通过\"+stagePassedNum+\"关!坚持下去!\";
g.drawString(writeString,(this.getWidth-font.Width(writeString))/2,(this.getHeight-img.getHeight)/3+img.getHeight+2,0);
}



//关闭本节声音播放,以方便下关播放新音乐
try
...{
player.stop;
}
catch(Exceptionexp)
...{}

//重画
flushGraphics;
}
//*游戏全部过关
privatevoiddoStageAllClearPa
...{
g.Color(255,255,255);
g.fillRect(0,0,this.getWidth,this.getHeight);
//Imageimg=creatImage(\"/res/clear.png\");
//g.drawImage(img,(this.getWidth-img.getWidth)/2,(this.getHeight-img.getHeight)/2,0);
g.Color(255,0,0);
Fontfont;
font=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE); [Page]
(gameModeMODE_NORMAL)
...{
StringwriteString=\"顺利过关!\";
g.drawString(writeString,(this.getWidth-font.Width(writeString))/2,this.getHeight/2-font.getHeight-1,0);
writeString=\"最快过关:\"+numToTime(quicklyPassOneStageTime);
g.drawString(writeString,(this.getWidth-font.Width(writeString))/2,this.getHeight/2,0);
writeString=\"全部耗费:\"+numToTime(usedTime);
g.drawString(writeString,(this.getWidth-font.Width(writeString))/2,this.getHeight/2+font.getHeight+1,0);
}
(gameModeMODE_UTMOST)
...{
StringwriteString=\"时间到!\";
g.drawString(writeString,(this.getWidth-font.Width(writeString))/2,this.getHeight/2-font.getHeight-1,0);
writeString=\"总过关数:\"+stageNum;
g.drawString(writeString,(this.getWidth-font.Width(writeString))/2,this.getHeight/2,0);
}
//关闭本节声音播放,以方便下画面播放新音乐
try
...{
player.stop;
}
catch(Exceptionexp)
...{} [Page]
//重画
flushGraphics;

}
//*游戏结束
privatevoiddoStageOverPa
...{
g.Color(255,255,255);
g.fillRect(0,0,this.getWidth,this.getHeight);
Imageimg=creatImage(\"/res/gameover.png\");
g.drawImage(img,(this.getWidth-img.getWidth)/2,(this.getHeight-img.getHeight)/2,0);



flushGraphics;
}

//全部通关
privatevoiddoGameEndPa
...{
//返回选择画面
ListChoiceScreenlcs=ListChoiceScreen(display,MIDlet);
display.Current(lcs);
}
//过关检查
privatevoiddoStageClearCheck
...{
for(i=0,k=1;i<4;i)
for(j=0;j<4;j)
...{
(i!=3||j!=3)
...{
(puzzlePic.getCell(j,i)!=k)
...{
;//直接跳出 [Page]
}
k;
}
}

(gameModeMODE_NORMAL)//普通模式
...{
(stageNumMAX_STAGE)//达到最大关数
...{
gameState=ALL_STAGE_CLEAR;
timeCounter.cancel;//过关,停止计时器
(quicklyPassOneStageTime>(300-lastTime))//判断耗费最少时间
...{
quicklyPassOneStageTime=(300-lastTime);
}
usedTime=usedTime+(300-lastTime);
}
//未达到最大关数
...{
gameState=STAGE_CLEAR;
stageNum;//进入下
timeCounter.cancel;//过关,停止计时器
//如果保存时间至变量 [Page]
(quicklyPassOneStageTime0)
...{
//此为第关,quicklyPassOneStageTime中未存数据


quicklyPassOneStageTime=300-lastTime;//300为普通模式默认时间
usedTime=300-lastTime;//总耗时
}
//不是第关,比较quicklyPassOneStageTime里数字大小
...{
(quicklyPassOneStageTime>(300-lastTime))
...{
quicklyPassOneStageTime=(300-lastTime);
}
usedTime=usedTime+(300-lastTime);
}

}
}

(gameModeMODE_UTMOST)//极限模式 [Page]
...{
(stageNumMAX_STAGE)//达到最大关卡数
...{
gameState=STAGE_CLEAR;
stageNum=1;//重新进入第
timeCounter.cancel;//过关,停止计时器
}
//未到最大关数
...{
gameState=STAGE_CLEAR;
stageNum;//进入下
timeCounter.cancel;//过关,停止计时器
//如果是普通模式则保存时间至变量
}
stagePassedNum;//过关数增加1
}

render;//重新绘画
}
//*创建图片
privateImagecreatImage(StringfileName)
...{
Imageimg=null;
try
...{
img=Image.createImage(fileName);
}
catch(Exceptionexp)
...{ [Page]
.out.prln(\"打开图片出错:\"+fileName);
}
img;

}



//*创建随机背景拼图
privateTiledLayercreatPuzzlePic
...{
Imageimg=null;
try
...{
img=Image.createImage(\"/res/stage\"+stageNum+\".png\");
}
catch(Exceptionexp)
...{}
TiledLayertiledLayer=TiledLayer(4,4,img,28,28);
//*产生随机数选择地图分散方式
Randomrdm=Random;
mapNum=(rdm.nextInt>>>1)%4;

for(i=0;i<PUZZLE_MAP[mapNum].length;i)
...{
column=i%4;
row=(i-column)/4;
tiledLayer.Cell(column,row,PUZZLE_MAP[mapNum][i]);
}
tiledLayer;
}
//*创建简单背景拼图,测试用
privateTiledLayercreatTestPuzzlePic
...{
Imageimg=null;
try
...{
img=Image.createImage(\"/res/stage\"+stageNum+\".png\"); [Page]
}
catch(Exceptionexp)
...{}
TiledLayertiledLayer=TiledLayer(4,4,img,28,28);
//*产生随机数选择地图分散方式
map=
...{
1,2,3,4,
5,6,7,8,
9,10,11,12,
13,14,0,15
};
for(i=0;i<map.length;i)
...{
column=i%4;
row=(i-column)/4;
tiledLayer.Cell(column,row,map[i]);
}
tiledLayer;
}
//*游戏中按下左键
privatevoiddoRight
...{
booleancanChanged=true;
for(i=0;i<4;i)
...{
//*判断最空格是否在最左边
(puzzlePic.getCell(0,i)0)
...{
canChanged=false;
; [Page]


}
}
(canChangedtrue)
...{
//*可以移动方块
spaceColumn,spaceRow,picCell;
spaceColumn=spaceRow=0;
for(i=0;i<puzzlePic.getColumns;i)
for(j=0;j<puzzlePic.getRows;j)
...{
(puzzlePic.getCell(i,j)0)
...{
spaceColumn=i;
spaceRow=j;
;
}
}
//*交换空格位置
picCell=puzzlePic.getCell(spaceColumn-1,spaceRow);
puzzlePic.Cell(spaceColumn,spaceRow,picCell);
puzzlePic.Cell(spaceColumn-1,spaceRow,0); [Page]
//*绘图
render;
doStageClearCheck;
}


}
//*游戏中按下右键
privatevoiddoLeft
...{
booleancanChanged=true;
for(i=0;i<4;i)
...{
//*判断最空格是否在最右边
(puzzlePic.getCell(3,i)0)
...{
canChanged=false;
;
}
}
(canChangedtrue)
...{
//*可以移动方块
spaceColumn,spaceRow,picCell;
spaceColumn=spaceRow=0;
for(i=0;i<puzzlePic.getColumns;i)
for(j=0;j<puzzlePic.getRows;j)
...{


(puzzlePic.getCell(i,j)0) [Page]
...{
spaceColumn=i;
spaceRow=j;
;
}
}
//*交换空格位置
picCell=puzzlePic.getCell(spaceColumn+1,spaceRow);
puzzlePic.Cell(spaceColumn,spaceRow,picCell);
puzzlePic.Cell(spaceColumn+1,spaceRow,0);
//*绘图
render;
doStageClearCheck;
}


}
//*游戏中按下上键
privatevoiddoDown
...{
booleancanChanged=true;
for(i=0;i<4;i)
...{
//*判断最空格是否在最上边
(puzzlePic.getCell(i,0)0)
...{
canChanged=false; [Page]
;
}
}
(canChangedtrue)
...{
//*可以移动方块
spaceColumn,spaceRow,picCell;
spaceColumn=spaceRow=0;
for(i=0;i<puzzlePic.getColumns;i)
for(j=0;j<puzzlePic.getRows;j)
...{
(puzzlePic.getCell(i,j)0)
...{
spaceColumn=i;
spaceRow=j;
;
}
}
//*交换空格位置


picCell=puzzlePic.getCell(spaceColumn,spaceRow-1);
puzzlePic.Cell(spaceColumn,spaceRow,picCell); [Page]
puzzlePic.Cell(spaceColumn,spaceRow-1,0);
//*绘图
render;
doStageClearCheck;
}


}
//*游戏中按下下键
privatevoiddoUp
...{
booleancanChanged=true;
for(i=0;i<4;i)
...{
//*判断最空格是否在最下边
(puzzlePic.getCell(i,3)0)
...{
canChanged=false;
;
}
}
(canChangedtrue)
...{
//*可以移动方块
spaceColumn,spaceRow,picCell;
spaceColumn=spaceRow=0;
for(i=0;i<puzzlePic.getColumns;i)
for(j=0;j<puzzlePic.getRows;j)
...{ [Page]
(puzzlePic.getCell(i,j)0)
...{
spaceColumn=i;
spaceRow=j;
;
}
}
//*交换空格位置
picCell=puzzlePic.getCell(spaceColumn,spaceRow+1);
puzzlePic.Cell(spaceColumn,spaceRow,picCell);
puzzlePic.Cell(spaceColumn,spaceRow+1,0);
//*绘图
render;
doStageClearCheck;
}
}

//*按下键盘时;
protectedvoidkeyPressed(keyCode)
...{

(gameStateSTAGE_TITLE)


...{
gameState=STAGE_START;
render;
}
(gameStateSTAGE_PLAYING&&isGamePaused!=true) [Page]
...{

switch(getGameAction(keyCode))
...{
Canvas.FIRE:
gameState=STAGE_PLAYING_SEE_PERFECT_PIC;
render;
;
Canvas.DOWN:
doDown;
;
Canvas.UP:
doUp;
;
Canvas.LEFT:
doLeft;
;
Canvas.RIGHT:
doRight;
;
} [Page]
}
(gameStateSTAGE_CLEAR)
...{
gameState=STAGE_TITLE;
render;
}
(gameStateALL_STAGE_CLEAR)
...{
gameState=GAME_END;
render;
}

}

//*松开键盘时
protectedvoidkeyReleased(keyCode)
...{
(gameStateSTAGE_PLAYING_SEE_PERFECT_PIC&&isGamePaused!=true&&getGameAction(keyCode)Canvas.FIRE)
...{
gameState=STAGE_PLAYING;
render;
}

}

//*时间转换
privateStringnumToTime(longtimeLong)
...{
hour=()(timeLong/3600);
minute=()((timeLong-(hour*3600))/60);


StringminuteSt=String.valueOf(minute);
minuteSt=(minuteSt.length<2?\"0\"+minuteSt:minuteSt);//加上0变成两位数
sec=()(timeLong-(hour*3600)-(minute*60));
StringsecSt=String.valueOf(sec); [Page]
secSt=(secSt.length<2?\"0\"+secSt:secSt);//加上0变成两位数傞
StringtimeString=String.valueOf(hour)+\":\"+minuteSt+\":\"+secSt;
timeString;
}

//*计时器
publicTimeCounterTaskextendsTimerTask
...{
publicStringtimeString;
privatelongtimeLong;
publicTimeCounterTask(longtime)
...{
timeLong=time;
changeTime;
}
publicvoidrun
...{
changeTime;
render;//重新绘图
}
privatevoidchangeTime
...{
timeLong=timeLong-1;//倒计时
(timeLong0)
...{
gameState=STAGE_OVER;//时间到
}

...{
timeString=numToTime(timeLong); [Page]
//把剩余时间储存到类外面变量(声明在doStartPaing中,在外无法所建立对象)
lastTime=timeLong;
}
}
}
}
//------------------------------
//CrazyPuzzleMIDlet.java
//------------------------------

packagesrc;

importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;

publicCrazyPuzzleMIDletextendsMIDlet...{

privateDisplaydisplay;
publicCrazyPuzzleMIDlet
...{
super;
display=Display.getDisplay(this);
WelcomeCanvaswelcomeCanvas=WelcomeCanvas(display,this);
display.Current(welcomeCanvas);
}
protectedvoidstartAppthrowsMIDletStateChangeException...{
//norains:TODOAuto-generatedmethodstub
}

protectedvoidpauseApp...{
//TODOAuto-generatedmethodstub



}

protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException...{
//TODOAuto-generatedmethodstub

}

}


//------------------------------
//ListChoiceScreen.java
//------------------------------

packagesrc;
importjavax.microedition.lcdui.*;
publicListChoiceScreenextendsListimplementsCommandListener
...{
privateDisplaydisplay;
privateCrazyPuzzleMIDletMIDlet;
//传入TestLatencyMIDlet主要是为了能进行退出操作. [Page]
publicListChoiceScreen(Displaydisplay,CrazyPuzzleMIDletm)
...{
super(\"疯狂拼图\",Choice.IMPLICIT);
MIDlet=m;
this.display=display;
Imageimg1,img2,img3,img4;
img1=img2=img3=img4=null;
try
...{
img1=Image.createImage(\"/res/lis1.png\");
img2=Image.createImage(\"/res/lis2.png\");
img3=Image.createImage(\"/res/lis3.png\");
img4=Image.createImage(\"/res/lis4.png\");
}
catch(Exceptionerro)
...{}
this.append(\"普通模式\",img1);
this.append(\"极限模式\",img2);
//this.append(\"高手排行\",img2);
this.append(\"游戏介绍说明\",img3);
this.append(\"退出游戏\",img4);
this.CommandListener(this);
}

publicvoidcommandAction(Commandc,Displayables)
...{
(cList.SELECT_COMMAND)
...{
Listtmp=(List)s;
selected=tmp.getSelectedIndex;
Stringlist=tmp.getString(selected);
(list.equals(\"普通模式\")) [Page]
...{
MyGameCanvasmyGameCanvas=MyGameCanvas(display,MIDlet,MyGameCanvas.MODE_NORMAL);
display.Current(myGameCanvas);
}
(list.equals(\"极限模式\"))
...{
MyGameCanvasmyGameCanvas=MyGameCanvas(display,MIDlet,MyGameCanvas.MODE_UTMOST);
display.Current(myGameCanvas);
}
(list.equals(\"高手排行\"))
...{

}
(list.equals(\"游戏介绍说明\"))
...{


InfoScreeninfoScreen=InfoScreen(display,this);
display.Current(infoScreen);
}
(list.equals(\"退出游戏\"))
...{
MIDlet.notyDestroyed;
}
}
}
}



//------------------------------
//RecordScreen.java
//------------------------------

packagesrc;

publicRecordScreen...{ [Page]

}



//------------------------------
//InfoScreen.java
//------------------------------

packagesrc;
importjavax.microedition.lcdui.*;

publicInfoScreenextendsFormimplementsCommandListener
...{
DisplayablenextDisp;
Displaydisplay;
publicInfoScreen(Displaydisplay,DisplayablenextDisp)
...{
super(\"\");
this.nextDisp=nextDisp;
this.display=display;
this.append(\"游戏:疯狂拼图\"+\"版本:1.0\"+\"型号:泡泡堂\"+\"作者:norains\"+\"联系:[email protected]\"
+\"介绍说明:游戏有两种模式选择,普通模式每关都重新计时,极限模式计算时间完毕前通过关数.在游戏中按住5键可以切换到完整图案.\");
this.addCommand(Command(\"返回\",Command.BACK,0));
this.CommandListener(this);
}
publicvoidcommandAction(Commandc,Displayables)
...{
Stringcmd=c.getLabel;
(cmd.equalsIgnoreCase(\"返回\"))
...{
display.Current(nextDisp);
}
}
}



//------------------------------
//RMSUtil.java
//------------------------------

packagesrc;
importjavax.microedition.rms.*;
//数据库操作公共类
publicRMSUtil
...{
publicRecordStoreopenRSAnyway(Stringrsname)
...{
RecordStorers=null;
(rsname.length>32)
...{
null; [Page]
}

...{
try
...{
rs=RecordStore.openRecordStore(rsname,true);
rs;
}
catch(Exceptionerro)
...{
null;
}
}
}


publicRecordStoreopenRSExisted(Stringrsname)


...{
RecordStorers=null;
(rsname.length>32)
...{
null;
}

...{
try
...{
rs=RecordStore.openRecordStore(rsname,false);
rs;
}
catch(Exceptionerro)
...{
null; [Page]
}
}
}


publicbooleandeletRS(Stringrsname)
...{
(rsname.length>32)
...{
false;
}

...{
try
...{
RecordStore.deleteRecordStore(rsname);
true;
}
catch(Exceptionerro)
...{
false;
}
}
}


}





//------------------------------
//WelcomeCanvas.java
//------------------------------

packagesrc;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.Timer;
importjava.util.TimerTask;
importjavax.microedition.media.*;

importjavax.microedition.lcdui.game.*;
importjavax.microedition.lcdui.*;
importjavax.microedition.media.Manager;
importjavax.microedition.media.MediaException;
publicWelcomeCanvasextendsCanvas
...{
privateDisplaydisplay;
privateCrazyPuzzleMIDletMIDlet;
privateImageimg;
privatedispWidth;
privatedispHeight;
privateimgState; [Page]
privatePlayerplayer;

//**构造
publicWelcomeCanvas(Displaydisp,CrazyPuzzleMIDletmidlet)
...{
this.display=disp;
this.MIDlet=midlet;
this.FullScreenMode(true);
dispWidth=this.getWidth;
dispHeight=this.getHeight;
imgState=1;

//播放开头音乐
try
...{
InputStreamin;


in=getClass.getResourceAsStream(\"/res/welcome.mid\");
player=Manager.createPlayer(in,\"audio/midi\");
player.LoopCount(1);
player.start;
}
catch(IOExceptione)...{}
catch(MediaExceptione)...{}

}


//**角色创建,以整张图
privateImagecreatImage(StringfileName)
...{
Imageimg=null;
try
...{
img=Image.createImage(fileName);
}
catch(Exceptionexp)
...{
.out.prln(exp); [Page]
}
img;
}

//**绘图
publicvoidpa(Graphicsg)
...{

switch(imgState)
...{
1:
img=creatImage(\"/res/flash1.png\");
g.Color(1,16,57);
;
2:
img=creatImage(\"/res/flash2.png\");
;
3:
img=creatImage(\"/res/flash3.png\");
g.Color(255,255,255);
;
}

g.fillRect(0,0,dispWidth,dispHeight);
g.drawImage(img,(dispWidth-img.getWidth)/2,(dispHeight-img.getHeight)/2,0);
}


protectedvoidkeyPressed(keycode)
...{
//conti=false;
(imgState!=3)
...{
imgState;
repa;
} [Page]

...{
ListChoiceScreenlistChoiceScreen=ListChoiceScreen(display,MIDlet);
display.Current(listChoiceScreen);
//停止播放音乐
try
...{
(player!=null)
...{


player.stop;
}
}
catch(Exceptionerro)
...{}

}

}
}
Tags:  拼图游戏 java拼图游戏源代码 拼图游戏源代码

延伸阅读

最新评论

  1. 有没有对于图片和音乐

发表评论