您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 连连看J2ME源代码
连连看J2ME源代码2008-12-30作者:编辑:齐瑞瑞点击进入论坛关键词:连连看J2MEJ2ME连连看源代码(含详细注释)//界面类代码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;rowmap.length;row++){for(intcol=0;colmap[row].length;col++){map[row][col]=row+1;}}//循环打乱10次inttempRow;inttempCol;inttemp;for(inti=0;i10;i++){for(introw=0;rowmap.length;row++){for(intcol=0;colmap[row].length;col++){//随机行号tempRow=Math.abs(ran.nextInt()%10);//随机列号tempCol=Math.abs(ran.nextInt()%10);//如果不是同一个单元格,则交换数据if(!((tempRow==row)&&(tempCol==col))){temp=map[row][col];map[row][col]=map[tempRow][tempCol];map[tempRow][tempCol]=temp;}}}}}/***绘制地图数据*@paramg画笔*/publicvoidpaintMap(Graphicsg){for(introw=0;rowmap.length;row++){for(intcol=0;colmap[row].length;col++){//如果没有数据,则跳过if(map[row][col]==0){continue;}else{//绘制方块//绘制方框g.drawRect(LEFTX+col*TILE_WIDTH,LEFTY+row*TILE_HEIGHT,TILE_WIDTH,TILE_HEIGHT);//绘制数字g.drawString(String.valueOf(map[row][col]),LEFTX+col*TILE_WIDTH+5,LEFTY+row*TILE_HEIGHT+4,Graphics.TOP|Graphics.LEFT);}}}}/***绘制选择框*@paramg画笔*/publicvoidpaintSelectArea(Graphicsg){//绘制当前选择框g.setColor(0xff00);g.drawRect(LEFTX+cCol*TILE_WIDTH,LEFTY+cRow*TILE_HEIGHT,TILE_WIDTH,TILE_HEIGHT);g.setColor(0);//绘制选中项switch(selectTileNum){case1://选择一个g.setColor(0xff0000);g.drawRect(LEFTX+firstCol*TILE_WIDTH,LEFTY+firstRow*TILE_HEIGHT,TILE_WIDTH,TILE_HEIGHT);g.setColor(0);break;case2://选中两个g.setColor(0xff0000);g.drawRect(LEFTX+firstCol*TILE_WIDTH,LEFTY+firstRow*TILE_HEIGHT,TILE_WIDTH,TILE_HEIGHT);g.drawRect(LEFTX+secondCol*TILE_WIDTH,LEFTY+secondRow*TILE_HEIGHT,TILE_WIDTH,TILE_HEIGHT);g.setColor(0);break;}}/***绘制方块连线*@paramg画笔*/publicvoidpaintLinkLine(Graphicsg){//如果无连线,则直接返回if(linkType==NO_LINK){return;}//根据连线类型实现绘制//绘制到方块的中心点switch(linkType){caseH_LINK://水平caseV_LINK://垂直paintLine(g,firstRow,firstCol,secondRow,secondCol);break;caseONE_CORNER_FIRSTX://一个拐弯,先移动X//水平线paintLine(g,firstRow,firstCol,firstRow,secondCol);//垂直线paintLine(g,firstRow,secondCol,secondRow,secondCol);break;caseONE_CORNER_FIRSTY://一个拐弯,先移动Y//水平线paintLine(g,firstRow,firstCol,secondRow,firstCol);//垂直线paintLine(g,secondRow,firstCol,secondRow,secondCol);break;caseTWO_CORNER://块1到第一个拐点的连线paintLine(g,firstRow,firstCol,p[0],p[1]);//两个拐点之间的连线paintLine(g,p[0],p[1],p[2],p[3]);//第二个拐点到块2的连线paintLine(g,p[2],p[3],secondRow,secondCol);break;}//逻辑代码,清除连接类型linkType=NO_LINK;}/***绘制两个方块中心点的连线*@paramg画笔*@paramr1方块1的行号*@paramc1方块1的列号*@paramr2方块2的行号*@paramc2方块2的列号*/privatevoidpaintLine(Graphicsg,intr1,intc1,intr2,intc2){g.drawLine(LEFTX+c1*TILE_WIDTH+TILE_WIDTH/2,LEFTY+r1*TILE_HEIGHT+TILE_HEIGHT/2,LEFTX+c2*TILE_WIDTH+TILE_WIDTH/2,LEFTY+r2*TILE_HEIGHT+TILE_HEIGHT/2);}/***向左移动选择框*/publicvoidmoveLeft(){if(cCol0){cCol--;}}/***向右移动选择框*/publicvoidmoveRight(){if(cColMAX_COL-1){cCol++;}}/***向上移动选择框*/publicvoidmoveUP(){if(cRow0){cRow--;}}/***向下移动选择框*/publicvoidmoveDown(){if(cRowMAX_ROW-1){cRow++;}}/***确定键逻辑处理*/publicvoidfire(){//如果选择的块为空,则直接返回if(map[cRow][cCol]==0){return;}//选中的块的数量增加1selectTileNum++;//判别存储位置switch(selectTileNum){case1://第一次选择firstRow=cRow;firs
本文标题:连连看J2ME源代码
链接地址:https://www.777doc.com/doc-5238090 .html