您的位置:首页 > 其它

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

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>


资源下载

下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: