消灭星星山寨版-我代表星星消灭你
2015-12-29 13:41
369 查看
前言
消灭星星这个游戏很经典,开始之前,请参考一下以下文章及算法。感谢作者。
参考地址
PopStar(消灭星星)游戏源代码下载、分析及跨平台移植—第一篇(界面)关于用到的资源
用到的资源我是直接在网上找的。。。不是我p出来的。仅作学习使用。在线演示
在线演示运行界面
核心源代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"/> <meta name="apple-mobile-web-app-capable" content="yes"/> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta content="telephone=no,email=no" name="format-detection"> <meta name="full-screen" content="true"/> <meta name="screen-orientation" content="portrait"/> <meta name="x5-fullscreen" content="true"/> <meta name="360-fullscreen" content="true"/> <style> body{ padding: 0; margin: 0; } </style> <script type="text/javascript"> window.onerror =function(errorMessage, scriptURI, lineNumber) { var erorMsg={ message: errorMessage, script: scriptURI, line: lineNumber }; //alert(errorMessage); }; </script> <title>我代表星星消灭你</title> <script type="text/javascript" src="/static/lib/jquery-1.11.0.min.js"></script> <script type="text/javascript" src="/static/lib/jquery-migrate-1.2.1.min.js"></script> <script type="text/javascript" src="/static/game/lufylegend/lufylegend-1.9.11.min.js"></script> </head> <body> <div id="game" style=""></div> <script type="text/javascript"> var GameSettings={ limitTime:25 //游戏设定,这是当前游戏的限制时间,以秒为单位。 ,rows:10 ,max_rows_in_screen:8 //整个屏幕需要大多行填充。 ,show_rows_num:5 //通常显示多少行。必然少于max_rows_in_screen ,columns:10 ,cellWidth:48 ,cellHeight:48 ,cellShakeTime:150 //单元格摇头动画单独一次的执行时间。 ,cellShakeDistance:5 //单元格摇头的相对距离。 ,cellFadeOutTime:150 //单元格消失时间。 ,cellMoveTime:200//单元格移动耗时。 }; var GameOptions={ width:480 ,height:800 }; var GameData={ score:0 ,beginTime:0 ,endTime:0 ,currentRowIndex:0 //游戏当前的行数是。。。以0开始。 ,userWantsStart:false ,playing:false ,busy:false //当前是否忙 ,showAnimation:false //是否正在执行动画。 ,timeOver:false //是否游戏结束 }; var innerTools={ timeFormat:function(seconds){ var _seconds=parseInt(seconds); var _s=_seconds%60; var _m=parseInt((_seconds-_s)/60)%60; var _str=""; if(_m<=9){ _str="0"+""+_m; } else{ _str=""+_m; } if(_s<=9){ _str=_str+":0"+_s; } else{ _str=_str+":"+_s; } return _str; } }; </script> <script type="text/javascript"> //--这是需要加载的各种资源。 var resources=[]; //--加载完成后得到的数据。, var resourceList={}; function _addResource(name,path){ resources.push({ name:name ,path:path }); } (function(){ //--加载图片素材。 _addResource("bg_main","Resources/bg_mainscene.jpg"); _addResource("bg_menu","Resources/bg_menuscene.jpg"); _addResource("blue","Resources/blue.png"); _addResource("blue_heart","Resources/blue_heart.png"); _addResource("Cancel","Resources/Cancel.png"); _addResource("click_1","Resources/click_1.png"); _addResource("click_2","Resources/click_2.png"); _addResource("CloseNormal","Resources/CloseNormal.png"); _addResource("CloseSelected","Resources/CloseSelected.png"); _addResource("coin_add","Resources/coin_add.png"); _addResource("combo_1","Resources/combo_1.png"); _addResource("combo_2","Resources/combo_2.png"); _addResource("combo_3","Resources/combo_3.png"); _addResource("Dialog_bg","Resources/Dialog_bg.png"); _addResource("Dialog_bg2","Resources/Dialog_bg2.png"); _addResource("Dialog_Item","Resources/Dialog_Item.png"); _addResource("Dialog_Item2","Resources/Dialog_Item2.png"); _addResource("Dialog_Title","Resources/Dialog_Title.png"); _addResource("diamond","Resources/diamond.png"); _addResource("fireworks","Resources/fireworks.png"); _addResource("GameOver","Resources/GameOver.png"); _addResource("green","Resources/green.png"); _addResource("green_heart","Resources/green_heart.png"); _addResource("HelloWorld","Resources/HelloWorld.png"); _addResource("Help_1","Resources/Help_1.png"); _addResource("Help_2","Resources/Help_2.png"); _addResource("Item_pause","Resources/Item_pause.png"); _addResource("menu_about","Resources/menu_about.png"); _addResource("menu_CDKEY","Resources/menu_CDKEY.png"); _addResource("menu_continue","Resources/menu_continue.png"); _addResource("menu_continue2","Resources/menu_continue2.png"); _addResource("menu_continuegame","Resources/menu_continuegame.png"); _addResource("menu_help","Resources/menu_help.png"); _addResource("menu_lingjiang","Resources/menu_lingjiang.png"); _addResource("menu_lingqu","Resources/menu_lingqu.png"); _addResource("menu_money","Resources/menu_money.png"); _addResource("menu_sound_on","Resources/menu_sound_on.png"); _addResource("menu_sound_off","Resources/menu_sound_off.png"); _addResource("menu_start","Resources/menu_start.png"); _addResource("menu_Text","Resources/menu_Text.png"); _addResource("menu_top","Resources/menu_top.png"); _addResource("MrDu","Resources/MrDu.png"); _addResource("MrDu_choujiang1","Resources/MrDu_choujiang1.png"); _addResource("MrDu_choujiang2","Resources/MrDu_choujiang2.png"); _addResource("new","Resources/new.png"); _addResource("orange","Resources/orange.png"); _addResource("orange_heart","Resources/orange_heart.png"); _addResource("paint_arrow","Resources/paint_arrow.png"); _addResource("paint_back","Resources/paint_back.png"); _addResource("paint_bg","Resources/paint_bg.png"); _addResource("Pause","Resources/Pause.png"); _addResource("Props_Bomb","Resources/Props_Bomb.png"); _addResource("Props_Paint","Resources/Props_Paint.png"); _addResource("Props_Rainbow","Resources/Props_Rainbow.png"); _addResource("purple","Resources/purple.png"); _addResource("purple_heart","Resources/purple_heart.png"); _addResource("red","Resources/red.png"); _addResource("red_heart","Resources/red_heart.png"); _addResource("Shop_Onece","Resources/Shop_Onece.png"); _addResource("sound_on","Resources/sound_on.png"); _addResource("stage_clear","Resources/stage_clear.png"); _addResource("star","Resources/star.png"); _addResource("Title_CDKEY","Resources/Title_CDKEY.png"); _addResource("Title_choujiang","Resources/Title_choujiang.png"); _addResource("Title_Help","Resources/Title_Help.png"); _addResource("Title_OneceShop","Resources/Title_OneceShop.png"); _addResource("Title_Pause","Resources/Title_Pause.png"); _addResource("Title_QuickShop","Resources/Title_QuickShop.png"); _addResource("Title_shop","Resources/Title_shop.png"); _addResource("zengsong","Resources/zengsong.png"); _addResource("coin","Resources/coin.png"); _addResource("clock_yellow","Resources/clock-yellow.png"); //--音效。。 _addResource("music","Resources/music.ogg"); _addResource("audio_beep","Resources/Music/beep.ogg"); _addResource("audio_clear","Resources/Music/clear.ogg"); _addResource("audio_coin","Resources/Music/coin.ogg"); _addResource("audio_coinsin","Resources/Music/coinsin.ogg"); _addResource("audio_combo_1","Resources/Music/combo_1.ogg"); _addResource("audio_combo_2","Resources/Music/combo_2.ogg"); _addResource("audio_combo_3","Resources/Music/combo_3.ogg"); _addResource("audio_pop","Resources/Music/pop.ogg"); _addResource("audio_landing","Resources/Music/landing.ogg"); _addResource("audio_NextGameRound","Resources/Music/NextGameRound.ogg"); _addResource("audio_music","Resources/Music/music.ogg"); _addResource("audio_Props_Bomb","Resources/Music/Props_Bomb.ogg"); _addResource("audio_Props_Paint","Resources/Music/Props_Paint.ogg"); _addResource("audio_Props_Rainbow","Resources/Music/Props_Rainbow.ogg"); _addResource("audio_readygo","Resources/Music/readygo.ogg"); _addResource("audio_select","Resources/Music/select.ogg"); _addResource("audio_fireworks_01","Resources/Music/fireworks_01.wav"); _addResource("audio_fireworks_02","Resources/Music/fireworks_02.wav"); _addResource("audio_fireworks_03","Resources/Music/fireworks_03.wav"); })(); </script> <script type="text/javascript"> //--这是游戏的主要方法。 function game_main(){ console.log("游戏运行中..."); game_screen_setting();//游戏设置 game_preLoad();//游戏预加载。 } //--游戏加载层。。 var _loadingLayer={}; //游戏预加载。 function game_preLoad(){ _loadingLayer = new LoadingSample3(); LGlobal.stage.addChild(_loadingLayer); //--这里开始要加载资源了。 LLoadManage.load(resources,function(progress){ _loadingLayer.setProgress(progress); } ,game_init ); } function game_init(_resource_loaded_object){ resourceList=_resource_loaded_object; LGlobal.stage.removeChild(_loadingLayer); _PopStar.init(); console.log("加载完成,现在要开始渲染游戏了。"); } //--设置屏幕为全屏或者其他。 function game_screen_setting(){ LGlobal.align = LStageAlign.BOTTOM_MIDDLE; //LGlobal.stageScale = LStageScaleMode.SHOW_ALL; LGlobal.stageScale = LStageScaleMode.EXACT_FIT; LSystem.screen(LStage.FULL_SCREEN); } init(30,"game",GameOptions.width,GameOptions.height,game_main); </script> <script type="text/javascript"> //--这里是游戏主体逻辑界面什么的。 //--这是游戏的各种界面句柄管理。 var Layers={ Layer_Menu:{} ,Layer_Main:{} ,Layer_Clear:{} }; //--menu菜单对象。 function LayerGameMenu(__opts){ //--显示游戏菜单选项。 var innerOpts={ onStartButtonClick:function(){ console.log("点击开始按钮做什么。。"); } }; $.extend(innerOpts,__opts); var _root_sprite=new LSprite(); // var loader = new LLoader(); // loader.addEventListener(LEvent.COMPLETE, loadBitmapdata); // loader.load("Resources/bg_menuscene.jpg","bitmapData"); var bitmapData_bg = new LBitmapData(resourceList["bg_menu"]); var bitmap_bg = new LBitmap(bitmapData_bg); _root_sprite.addChild(bitmap_bg); //--创建开始按钮及对应事件。 var bitmapData_menu_start=new LBitmapData(resourceList["menu_start"]); var bitmap_menu_start=new LBitmap(bitmapData_menu_start); var btn_start = new LButton(bitmap_menu_start,bitmap_menu_start); //testButton.y = 50; //layer.addChild(testButton); btn_start.addEventListener(LMouseEvent.MOUSE_DOWN,function(){ innerOpts.onStartButtonClick(); }); window.theBtn=btn_start; _root_sprite.addChild(btn_start); //--布局及位置。 btn_start.x=(GameOptions.width)/2-268/2; btn_start.y=(GameOptions.height)/2-71/2; //addChild(bitmap_bg); //return bitmap_bg; var returnObj={ getRoot:function(){ return _root_sprite; } }; return returnObj; } //--main layer function LayerGameMain(__opts){ var _i_settings={ onInit:function(){} }; $.extend(_i_settings,__opts); var _root_sprite=new LSprite(); var bitmapData_bg = new LBitmapData(resourceList["bg_main"]); var bitmap_bg = new LBitmap(bitmapData_bg); _root_sprite.addChild(bitmap_bg); var topBarGroup=new LSprite(); var scoreGroup=new LSprite(); var timeGroup=new LSprite(); var _score_gold_coin_logo={}; var _score_text={}; var _time_tips={}; var _time_logo={}; //--下面是头顶栏目。 var gameTopBar={ init:function(){ scoreGroup=new LSprite(); _score_gold_coin_logo=new LBitmap(new LBitmapData(resourceList["coin"])); //_score_gold_coin_logo.anchor.setTo(0.5,0.5); _score_text=new LTextField(); window.scoreGroup=scoreGroup; scoreGroup.x=20; scoreGroup.y=20; window.scoreText=_score_text; _time_logo=new LBitmap(new LBitmapData(resourceList["clock_yellow"])); _time_tips=new LTextField(); //game.add.bitmapText(_time_logo.width+10, 8, 'flappy_font', innerTools.timeFormat(GameSettings.limitTime), 20); //当前分数 //--位置。 scoreGroup.x=20; scoreGroup.y=20; _score_gold_coin_logo.x=0; _score_gold_coin_logo.y=0; _score_text.x=30; _score_text.y=5; timeGroup.x=GameOptions.width-125; timeGroup.y=20; _time_logo.x=0; _time_logo.y=0; _time_tips.x=35; _time_tips.y=5; window.scoreLogo=_score_gold_coin_logo; _score_gold_coin_logo.scaleX=0.5; _score_gold_coin_logo.scaleY=0.5; _score_text.text="0"; _time_tips.text="0"; //_time_tips.setType(LTextFieldType.INPUT); //_score_text.setType(LTextFieldType.INPUT); _score_text.size = 14; _score_text.color = "#ffffff"; _time_tips.size=14; _time_tips.color="#ffffff"; scoreGroup.addChild(_score_text); scoreGroup.addChild(_score_gold_coin_logo); timeGroup.addChild(_time_logo); timeGroup.addChild(_time_tips); topBarGroup.addChild(scoreGroup); topBarGroup.addChild(timeGroup); _root_sprite.addChild(topBarGroup); } ,setTimeTips:function(nowTimeCount){ _time_tips.text=innerTools.timeFormat(nowTimeCount); } ,setScore:function(scoreText){ _score_text.text=scoreText; } ,getGroupRoot:function(){ return topBarGroup; } }; gameTopBar.init(); _root_sprite.addChild(topBarGroup); //--下面主要那些游戏界面。。就是星星列表。 //--生成随机五中颜色随机的砖块。分别有:blue,green,orange,purple,red,宽度与高度都是48x48 var _matrix_stars=[]; function createRandomStar(rowIndex,columnIndex,_opts){ var _i_settings={ onClick:function(sprite,pointer,_obj){ console.log("您点击星星我了。"); } ,onAnimateEnd:function(){ console.log("动画停止。"); } }; $.extend(_i_settings,_opts); var _style=["blue","green","orange","purple","red"]; var _random_int=parseInt(Math.random()*1000)%5; var _i_data={ style:"" ,aminating:false ,uid:"cell-"+rowIndex+"-"+columnIndex //唯一编码,这是一开始就给定的编码,不会变的。 ,x:0 ,y:0 }; _i_data.style=_style[_random_int]; var __sprite={}; var _s_w=GameSettings.cellWidth; var _s_h=GameSettings.cellHeight; var i_app={ init:function(){ var me=this; me.addSprite(); me.initEvents(); } ,addSprite:function(){ //--计算位置。 var _x=_s_w*columnIndex; var _y=GameOptions.height-(rowIndex+1)*_s_h; var tmpBitMap=new LBitmap(new LBitmapData(resourceList[_i_data.style])); __sprite=new LButton(tmpBitMap); __sprite.width=GameSettings.cellWidth; __sprite.height=GameOptions.cellHeight; _StarsGroup.addChild(__sprite); __sprite.x=_x; __sprite.y=_y; _i_data.x=_x; _i_data.y=_y; console.log("x,y",_x,_y); //game.add.sprite(_x,_y,_i_data.style); //--初始化点击事件。 } ,initEvents:function(){ __sprite.addEventListener(LMouseEvent.MOUSE_DOWN,function(evt1){ window.evet1=evt1; var sprite=evt1.target; var _offsets={ x:evt1.offsetX ,y:evt1.offsetY }; var _obj={ deny:function(){ _i_data.aminating=true; var _sep_time=GameSettings.cellShakeTime; var _sep_distance=GameSettings.cellShakeDistance; var _new_x1=sprite.x-_sep_distance; var _new_x2=sprite.x+_sep_distance; var _originX=sprite.x; _i_data.aminating=false; _i_settings.onAnimateEnd(); } //--检测当前的位置。。。返回行号及列号。 ,getXY:function(){ return { x:_i_data.x ,y:_i_data.y } } ,setXY:function(x,y){ _i_data.x=x; _i_data.y=y; } ,getMatrixLocation:function(){ //console.log(sprite.x,sprite.y); //console.log(pointer); var _xx=_i_data.x+15; var __yy=_i_data.y-15; //--判断位置。 var _columnIndex=parseInt((_xx-_xx%_s_w)/_s_w); var _rowIndex=parseInt(((GameOptions.height-__yy)-(GameOptions.height-__yy)%_s_h)/_s_h)-1; var _ro={ column:_columnIndex ,row:_rowIndex }; return _ro; } ,getUID:function(){ return _i_data.uid; } ,getStyle:function(){ return _i_data.style; } }; _i_settings.onClick(sprite,_obj.getXY(),_obj); }); } }; i_app.init(); var returnObj={ getSprite:function(){ return __sprite; } ,getStyle:function(){ return _i_data.style; } ,getMatrixLocation:function(){ //console.log(sprite.x,sprite.y); //console.log(pointer); var sprite=__sprite; var _xx=_i_data.x+15; var __yy=_i_data.y-15; //--判断位置。 var _columnIndex=parseInt((_xx-_xx%_s_w)/_s_w); var _rowIndex=parseInt(((GameOptions.height-__yy)-(GameOptions.height-__yy)%_s_h)/_s_h)-1; var _ro={ column:_columnIndex ,row:_rowIndex }; return _ro; } ,getUID:function(){ return _i_data.uid; } ,getSprite:function(){ return __sprite; } ,getXY:function(){ return { x:_i_data.x ,y:_i_data.y } } ,setXY:function(x,y){ _i_data.x=x; _i_data.y=y; } ,kill:function(){ var self = this; var tween = LTweenLite.to(__sprite,0.5,{alpha:0,ease:Bounce.easeIn,onComplete:function(){ console.log("已经消失了。"); }}); } ,move2XY:function(x,y,callback){ var self = this; var tween = LTweenLite.to(__sprite,GameSettings.cellMoveTime/1000,{x:x,y:y,ease:Bounce.easeIn,onComplete:function(){ console.log("已经消失了。"); _i_data.x=x; _i_data.y=y; if(callback){ callback(); } }}); } }; return returnObj; } //--相关算法及计算。 var SwapMgr={ //--判断这个星星上下左右是否有相同颜色的星星、 checkOneStarFourSide : function (_row,_column,_color) { var _thisCell=_matrix_stars[_row][_column]; if(_thisCell==null||_thisCell==undefined){ console.log("该单元格无效!"); return null; } // cc.log("checkOneStarFourSide"); var fourSideSpriteList = []; var color = _color; var col = _column; var row = _row; //up if (row < 9) { var upSprite = _matrix_stars[row+1][col];// this.starTable[col][row + 1]; if (upSprite != null && upSprite.getStyle() == color) { fourSideSpriteList.push(upSprite); } } //down if (row > 0) { var downSprite = _matrix_stars[_row-1][_column]; if (downSprite != null && downSprite.getStyle() == color) { fourSideSpriteList.push(downSprite); } } //left if (col > 0) { var leftSprite = _matrix_stars[_row][_column-1]; if (leftSprite != null && leftSprite.getStyle() == color) { fourSideSpriteList.push(leftSprite); } } //right if (col < 9) { var rightSprite = _matrix_stars[_row][_column+1]; if (rightSprite != null && rightSprite.getStyle() == color) { fourSideSpriteList.push(rightSprite); } } return fourSideSpriteList; } ,checkSameColorStars : function (_row,_column) { var _thisCell=_matrix_stars[_row][_column]; if(_thisCell==null||_thisCell==undefined){ console.log("该单元格无效!"); return null; } var sameColorList=[]; sameColorList.push(_thisCell); var newSameColorList = []; newSameColorList.push(_thisCell); //by logic ,check the same color star list while (newSameColorList.length > 0) { for (var i = 0; i < newSameColorList.length; i++) { var _tmp_item=newSameColorList[i]; var _tmp_loc=_tmp_item.getMatrixLocation(); var fourSide = this.checkOneStarFourSide(_tmp_loc.row,_tmp_loc.column,_tmp_item.getStyle()); if (fourSide.length > 0) { for (var j = 0; j < fourSide.length; j++) { //--判断是否包含这个数组。 var _res_item=fourSide[j]; var _contains_this=false; for(var t=0;t< sameColorList.length;t++){ var _ttmp_item=sameColorList[t]; if(_ttmp_item.getUID()==_res_item.getUID()){ _contains_this=true; break; } } if (_contains_this==false) { sameColorList.push(fourSide[j]); newSameColorList.push(fourSide[j]); } } } newSameColorList.splice(i, 1); } } console.log("sameColorList length==" + sameColorList.length); if (sameColorList.length > 1) { for (var k = 0; k < sameColorList.length; k++) { var simpleStar = sameColorList[k]; if (simpleStar) { //simpleStar.runAction(cc.ScaleTo.create(0.1, 1.08)); } } } return sameColorList; } //--计算分数规则。 //规则1:1分数= 方块数*方块数*5 2方块=20分3方块=45分. ,getCurrentScore:function(theLength){ return theLength*theLength*5; } ,fallAndCombindStar : function (repeatArrays) { if(repeatArrays==null||repeatArrays==undefined){ return; } for(var i=0;i< repeatArrays.length;i++){ var tmpItem=repeatArrays[i]; var _row=tmpItem.row; var _column=tmpItem.column; _matrix_stars[_row][_column]=null; } //--好了,将空置的cell让上面的都填充。。。 //--这里不要用传统的方法逐个逐个移动,直接构造一个新的列表。这个列表里面,列和行的数据是调转来的。 var _matrix_tmp=[]; var _row_count=GameSettings.rows; var _column_count=GameSettings.columns; for(var i=0; i<_column_count;i++){ var __tmparr=[]; for(var j=0;j< _row_count;j++){ var _now_item=_matrix_stars[j][i]; if(_now_item!=null){ //--好了,将这个数据放到temparr里面去。 __tmparr.push(_now_item); } } if(__tmparr.length>0){ _matrix_tmp.push(__tmparr); } } console.log("tmp矩阵。"); console.log(_matrix_tmp); //--好了,针对tmp的矩阵,我们变换一下,将右手边已经空了一列的数据给移过来。 //当然,不是下层那样子。。。是必须有空隙才移动。那么可以得知,假如是空列的话上面的tmp其中一个元素必然为长度0.算了,这个在上面做判断就好了,为零的话不添加。 // var _matrix_tmp2=[]; // for(var i=0;i<_matrix_tmp.length;i++){ // var _arr1=_matrix_tmp[i]; // if(_arr1){} // } //现在变换矩阵,换成正常的举矩阵 //--全部初始化。 for(var i=0;i<_row_count;i++){ for(var j=0;j<_column_count;j++){ _matrix_stars[i][j]=null; } } //--变换。 for(var _column_index=0;_column_index<_matrix_tmp.length;_column_index++){ var _columnArr=_matrix_tmp[_column_index]; console.log(_columnArr); for(var _row_index=0;_row_index<_columnArr.length;_row_index++){ _matrix_stars[_row_index][_column_index]=_columnArr[_row_index]; } } console.log("变换以后的矩阵"); console.log(_matrix_stars); //--好了,现在要根据矩阵来逐个逐个变换位置。 for(var i=0;i<_row_count;i++){ for(var j=0;j< _column_count;j++){ var _item=_matrix_stars[i][j]; if(_item!=null){ this.moveSprite2Cell(i,j,_item); } } } } ,moveSprite2Cell:function(rowIndex,columnIndex,_ITEM){ var _x=GameSettings.cellWidth*columnIndex; var _y=GameOptions.height-(rowIndex+1)*GameSettings.cellHeight; //--检查单元格是不是位置变了,变了才执行动画。 var _xy=_ITEM.getXY(); if(_x>_xy.x+10||_x<_xy.x-10||_y>_xy.y+10||_y<_xy.y-10){ //var __tween_idle3=game.add.tween(sprite).to( {x:_x,y:_y }, GameSettings.cellMoveTime, Phaser.Easing.Quadratic.Out, true); console.log("需要移动到:",_x,_y); _ITEM.move2XY(_x,_y,function(){ console.log("移动结束"); }); } } //--好了,现在要根据重复的位置来消去相关元素,重新组合矩阵数据及组合界面了。 ,cleanCells:function(repeatArrays,callback){ if(repeatArrays==null||repeatArrays==undefined){ return; } window.cleanArray=repeatArrays; //--将对应数组排序。。 var _sep_time=GameSettings.cellFadeOutTime; for(var i=0;i< repeatArrays.length;i++){ var tmpItem=repeatArrays[i]; //tmpItem.kill(); var tween = LTweenLite.to(tmpItem.sprite,GameSettings.cellFadeOutTime/1000,{alpha:0,ease:Bounce.easeIn,onComplete:function(){ console.log("已经消失了。"); }}); // // var __tween_idle3=game.add.tween(tmpItem.sprite).to( {alpha:0 }, _sep_time, Phaser.Easing.Quadratic.Out, true); // __tween_idle3.onComplete.add(function(sprite,tween){ // sprite.kill(); // }); } this.fallAndCombindStar(repeatArrays); if(callback){ setTimeout(function(){ callback(); },GameSettings.cellFadeOutTime+GameSettings.cellMoveTime+10); } } }; var _StarsGroup=new LSprite(); _StarsGroup.x=0; //_StarsGroup.y=GameOptions.height-GameSettings.cellHeight*GameSettings.rows; function initStars(){ _matrix_stars=[]; for(var _row=0;_row<GameSettings.rows;_row++){ var _tmp_stars=[]; for(var _column=0;_column<GameSettings.columns;_column++){ var star_obj=createRandomStar(_row,_column,{ onClick:function(sprite,pointer,_obj){ if(GameData.timeOver){ console.log("游戏结束"); return; } if(GameData.busy){ console.log("正在执行计算啊,先别动。。"); return;//正在执行动画啊,先别动,等0.5s再说。 } GameData.busy=true; var _loc=_obj.getMatrixLocation(); console.log("点击的位置:",_loc); var __style=_obj.getStyle(); //--判断是否有相同的星星类型。 var _fourSide=SwapMgr.checkOneStarFourSide(_loc.row,_loc.column,__style); if(_fourSide==null||_fourSide.length<=0){ _obj.deny(); return; } else{ console.log("四周围有同样颜色的。"); //--计算当前相同颜色的块。 var sameColorList=SwapMgr.checkSameColorStars(_loc.row,_loc.column); if(sameColorList==null){ console.log("非法单元格。"); GameData.busy=false; return; } else if(sameColorList.length<=1){ console.log("没有相同的颜色块。"); GameData.busy=false; return; } else{ var _sameLocArr=[]; for(var i=0;i<sameColorList.length;i++){ var _tloc=sameColorList[i].getMatrixLocation(); $.extend(_tloc, { style: sameColorList[i].getStyle() ,uid:sameColorList[i].getUID() ,sprite:sameColorList[i].getSprite() } ); _sameLocArr.push(_tloc); } console.log(_sameLocArr); //--好了,现在来计算得到的分数。 var thisScore=SwapMgr.getCurrentScore(_sameLocArr.length); var _now_score=GameData.score+thisScore; gameTopBar.setScore(_now_score); GameData.score=_now_score; console.log(_now_score); SwapMgr.cleanCells(_sameLocArr,function(){ GameData.busy=false; }); } } } ,onAnimateEnd:function(){ GameData.busy=false; } }); //_StarsGroup.addChild(star_obj.getSprite()); _tmp_stars.push(star_obj); } _matrix_stars.push(_tmp_stars); } } initStars(); //- //_StarsGroup.addChild(new LBitmap(new LBitmapData(resourceList["blue"]))); _root_sprite.addChild(_StarsGroup); var returnObj={ getRoot:function(){ return _root_sprite; } ,setTimeTips:function(_time){ gameTopBar.setTimeTips(_time); } }; return returnObj; } function LayerGameClear(__opts){ var _root_sprite=new LSprite(); var _bg=new LBitmap(new LBitmapData(resourceList["bg_main"])); var _tips_clear=new LBitmap(new LBitmapData(resourceList["stage_clear"])); var _score_bg=new LBitmap(new LBitmapData(resourceList["Dialog_Item"])); var _score_text=new LTextField(); _score_text.color="#ffffff"; _score_text.size=18; _score_text.text="0"; _tips_clear.x=GameOptions.width/2-265/2; _tips_clear.y=GameOptions.height/2-158/2-100; _score_bg.x=GameOptions.width/2-153/2; _score_bg.y=GameOptions.height/2-47/2+20; _score_text.x=GameOptions.width/2-15; _score_text.y=GameOptions.height/2+10; _root_sprite.addChild(_bg); _root_sprite.addChild(_tips_clear); _root_sprite.addChild(_score_bg); _root_sprite.addChild(_score_text); var returnObj={ setScore:function(score){ _score_text.text=score+''; } ,getRoot:function(){ return _root_sprite; } }; return returnObj; } var _layer_game_menu={}; var _layer_game_main={}; var _layer_game_clear={}; var _PopStar={ init:function(){ var me=this; console.log("pop star执行。"); _layer_game_menu=LayerGameMenu( { onStartButtonClick:function(){ console.log("当前要转换成为主界面。"); LGlobal.stage.removeChild(Layers.Layer_Menu); LGlobal.stage.addChild(Layers.Layer_Main); me.resetPlayStates(); } } ); _layer_game_main=LayerGameMain({ }); _layer_game_clear=LayerGameClear({}); Layers.Layer_Main=_layer_game_main.getRoot(); Layers.Layer_Menu=_layer_game_menu.getRoot(); Layers.Layer_Clear=_layer_game_clear.getRoot(); LGlobal.stage.addChild(Layers.Layer_Menu); me.initOnFrame(); } //--设置相关参数状态。 ,resetPlayStates:function(){ GameData.timeOver=false; GameData.playing=true; GameData.beginTime=new Date().getTime(); GameData.busy=false; } //--设置游戏结束状态。 ,resetEndStates:function(){ GameData.timeOver=true; GameData.playing=false; GameData.beginTime=new Date().getTime(); GameData.busy=false; } //-这是对于全局舞台的相关帧率控制设置。 ,initOnFrame:function(){ var me=this; LGlobal.stage.addEventListener(LEvent.ENTER_FRAME,function(event){ var layer = event.currentTarget; // //每一帧,横坐标增长/减少==向右/向左移动一像素,方向取决于direction的正负 // layer.x += direction; // //不停右移 // if(layer.x < 0){ // direction = 1; // } // //坐标大于700后,向左移 // if(layer.x > 700){ // direction = -1; // } //console.log(new Date()); //--假如游戏没有开始,那么就不执行。。。 if(GameData.playing==false){ return; } if(GameData.timeOver==true){ return; } var _nowTime=new Date().getTime(); var _passTime=parseInt((_nowTime-GameData.beginTime)/1000); if(_passTime>=GameSettings.limitTime){ _layer_game_main.setTimeTips(0); //GameData.timeOver=true; me.resetEndStates(); LGlobal.stage.removeChild(Layers.Layer_Main); LGlobal.stage.addChild(Layers.Layer_Clear); _layer_game_clear.setScore(GameData.score); return; } _layer_game_main.setTimeTips(GameSettings.limitTime-_passTime); }); } }; </script> </body> </html>
资源下载
下载相关文章推荐
- JSP页面显示含有中文名称(中文路径)出错?
- Mac磁盘修复
- 参数大对象定义与传递
- ObjC 利用反射和KVC实现嵌套对象序列化成JSON数据
- 改变tableviewcell分割线的长度
- 关于说话
- Xcode 同一个项目多个target
- 利用pgpool实现PostgreSQL的高可用
- IOS8 H264硬件解码
- windows 7 64位 Apache httpd 最新包的安装
- VirtualBox Centos 网络设置
- 伪类
- wave文件格式分析
- BlueJ的code pad
- 1、c#对XML文件的解析
- 17.cocos2d-x网络编程三(SocketIO)
- 找色块--小游戏
- iOS第三方数据库FMDB的使用介绍
- 实习心得
- iOS9中如何适配http,Bitcode,设置sina,qq,weChat配置Scheme白名单