J2ME连连看基础功能源代码.docx
《J2ME连连看基础功能源代码.docx》由会员分享,可在线阅读,更多相关《J2ME连连看基础功能源代码.docx(18页珍藏版)》请在冰豆网上搜索。
J2ME连连看基础功能源代码
窗体顶端
//界面类代码
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Graphics;
/**
*连连看游戏界面
*/
publicclassLinkCanvasextendsCanvasimplementsRunnable{
/**游戏逻辑类*/
GameEngineengine;
/**屏幕宽度*/
intwidth;
/**屏幕高度*/
intheight;
publicLinkCanvas(){
//创建对象
engine=newGameEngine();
//获得屏幕的高度和宽度
width=getWidth();
height=getHeight();
//启动线程
Threadt=newThread(this);
t.start();
}
/**
*绘制方法
*/
protectedvoidpaint(Graphicsg){
//清屏
clearScreen(g);
//绘制地图
engine.paintMap(g);
//绘制选择框
engine.paintSelectArea(g);
//绘制连线
engine.paintLinkLine(g);
}
/**
*清屏方法
*@paramg画笔
*/
privatevoidclearScreen(Graphicsg){
g.setColor(0xffffff);
g.fillRect(0,0,width,height);
g.setColor(0);
}
publicvoidkeyPressed(intkeyCode){
intaction=getGameAction(keyCode);
switch(action){
caseUP:
engine.moveUP();
break;
caseDOWN:
engine.moveDown();
break;
caseLEFT:
engine.moveLeft();
break;
caseRIGHT:
engine.moveRight();
break;
caseFIRE:
engine.fire();//选择块
break;
}
}
publicvoidrun(){
try{
while(true){
//延时
Thread.sleep(100);
//每次判断逻辑
engine.action();
repaint();
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
//逻辑类源代码
importjava.util.*;
importjavax.microedition.lcdui.*;
/**
*游戏数据和逻辑类
*/
publicclassGameEngine{
/**选中块的个数*/
privateintselectTileNum=0;
//第一个选择块的行号和列号
/**行号*/
privateintfirstRow;
/**列号*/
privateintfirstCol;
//第二个选择块的行号和列号
/**行号*/
privateintsecondRow;
/**列号*/
privateintsecondCol;
//当前选择框,默认在左上角
/**当前选择框的行号*/
privateintcRow;
/**当前选择框的列号*/
privateintcCol;
/**最大行数*/
privatefinalintMAX_ROW=10;
/**最大列数*/
privatefinalintMAX_COL=10;
/**地图数据,0代表空,数据1-10分别代表十种不同的结构*/
privateint[][]map=newint[MAX_ROW][MAX_COL];
/**随机数对象*/
privateRandomran=newRandom();
//地图区域左上角的坐标
privatefinalintLEFTX=20;
privatefinalintLEFTY=50;
/**每个单元格的宽度*/
privatefinalintTILE_WIDTH=20;
/**每个单元格的高度*/
privatefinalintTILE_HEIGHT=20;
/**连线类型*/
privateintlinkType;
/**无法连线*/
privatefinalintNO_LINK=0;
/**水平连线*/
privatefinalintH_LINK=1;
/**垂直联系*/
privatefinalintV_LINK=2;
/**一个拐点,先移动x*/
privatefinalintONE_CORNER_FIRSTX=3;
/**一个拐点,先移动y*/
privatefinalintONE_CORNER_FIRSTY=4;
/**两个拐点,待完善*/
privatefinalintTWO_CORNER=5;
/**
*两次拐弯的行号和列号
*数据格式为:
* 第一个拐点的行号,第一个拐点的列号,第二个拐点的行号,第二个拐点的列号
*/
int[]p=newint[4];
publicGameEngine(){
//初始化地图数据
initMap();
}
/**
*初始化地图数据
*/
privatevoidinitMap(){
for(introw=0;row for(intcol=0;col