首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

方块发动消图算法(Objective-c)

2012-09-09 
方块总动员消图算法(Objective-c)之前贴过一个连连看两图连通的检测算法,今天再贴一个方块总动员消图算法,

方块总动员消图算法(Objective-c)

之前贴过一个连连看两图连通的检测算法,今天再贴一个方块总动员消图算法,坐标系如下图:

方块发动消图算法(Objective-c)

方块总动员玩法很简单,点到同类型方块的十字交叉点便可消除,这里我用Objective-c实现了一个,由于之前连连看,我没有把游戏的初始化代码贴出来,其实这两者初始化有点类似我就在这里加上,代码如下:

//检测到触摸的精灵(精灵状态为BLANK_STATE)-(void) touchSprite:(int)tag{    CCLOG(@"tag:%i value:%i",tag,m_map[tag]);    [self scan:tag];    [self checkT];}-(void) scan:(int) tag{    int x=tag/m_nCol;//获取触摸行    int y=tag%m_nCol;//获取触摸列    int i=0;    //上    for (i=x+1; i<m_nRow; i++) {        if (m_map[i*m_nCol+y]!=BLANK_STATE) {            //找到上点            pathArr[p_up]=m_map[i*m_nCol+y];//图片类别            position[p_up]=i*m_nCol+y;//在m_map中的坐标            break;        }    }    //没有找着上点    if (i==m_nRow) {        pathArr[p_up]=BLANK_STATE;        position[p_up]=BLANK_STATE;    }        //下    for (i=x-1; i>=0; i--) {        if (m_map[i*m_nCol+y]!=BLANK_STATE) {            //找到下点            pathArr[p_down]=m_map[i*m_nCol+y];            position[p_down]=i*m_nCol+y;            break;        }    }    //没有找着下点    if (i==-1) {        pathArr[p_down]=BLANK_STATE;        position[p_down]=BLANK_STATE;    }        //左    for (i=y-1; i>=0; i--) {        if (m_map[x*m_nCol+i]!=BLANK_STATE) {            //找到左点            pathArr[p_left]=m_map[x*m_nCol+i];            position[p_left]=x*m_nCol+i;            break;        }    }    //没有找着左点    if (i==-1) {        pathArr[p_left]=BLANK_STATE;        position[p_left]=BLANK_STATE;    }        //右    for (i=y+1; i<m_nCol; i++) {        if (m_map[x*m_nCol+i]!=BLANK_STATE) {            //找到右点            pathArr[p_right]=m_map[x*m_nCol+i];            position[p_right]=x*m_nCol+i;            break;        }    }    //没有找着右点    if (i==m_nCol) {        pathArr[p_right]=BLANK_STATE;        position[p_right]=BLANK_STATE;    }        /*    for (i=0; i<4; i++) {        CCLOG(@"pathArr[%i]:%i",i,pathArr[i]);        CCLOG(@"position[%i]:%i",i,position[i]);    }    */}-(void) checkT{    int i;    int j;    for (i=0; i<4; i++) {        queneT[q_count]=0;        if (pathArr[i]==BLANK_STATE) {            //跳过空白或者已经被移除            continue;        }        else        {            for (j=i+1; j<4; j++) {                if (pathArr[i]==pathArr[j]) {                    queneT[q_count]++;                    queneT[queneT[q_count]]=position[j];                    pathArr[j]=BLANK_STATE;                }            }            if (queneT[q_count]>0) {                //移除                queneT[q_count]++;                queneT[queneT[q_count]]=position[i];                pathArr[i]=BLANK_STATE;                //移除                [self toHidePiece];            }                    }    }}//隐藏消去的精灵-(void) toHidePiece{    //int j=queneT[q_count];    for (int i=1; i<=queneT[q_count]; i++) {        Piece *p1=(Piece*)[self getChildByTag:queneT[i]];        //隐藏图片        [p1 setVisible:NO];        p1.Status=0;        m_map[queneT[i]]=BLANK_STATE;    }    queneT[q_count]=0;}

以上代码肯定有不足之处,欢迎拍砖交流!


热点排行