消灭星星山寨版-我代表星星消灭你

前言

消灭星星这个游戏很经典,开始之前,请参考一下以下文章及算法。
感谢作者。

参考地址

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>

资源下载

下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值