消除类游戏核心算法

消除类游戏核心算法

如今消除类游戏很多,比如:消灭寿司,消灭星星等。这篇文章我就共享下我这方面的理解,希望对大家有帮助,如有不好的地方也希望大家指出。

这是我用到资源。同种颜色的2个或者2个以上的就可以消除,消除的越多分越高。

首先,我们来定义一些要用到的变量:

static const int GRID_COUNT_LANDSCAPE = 10;//方块横总长度

static const int GRID_COUNT_PORTRAIT = 10;//方块竖总长度

static const string GRID_PIC_PATHS[GRID_TYPE_COUNT] = {string("hongse.png"), string("huangse.png"), string("lanse.png"), string("lvse.png"), string("zise.png")};

static const int GRID_TYPE_COUNT = 5;

static const int GRID_EMPTY_DATA = GRID_TYPE_COUNT+1;

char m_gridData[GRID_COUNT_LANDSCAPE * GRID_COUNT_PORTRAIT];

std::vector m_promptGrids;//提示的格子

bool m_scaledPromptGrids;//已经缩小的提示格子

cocos2d::gui::Widget *m_gridContentLayer;

struct GridPos{

GridPos(int x = 0, int y = 0):m_x(x), m_y(y){

}

int m_x;

int m_y;

};

struct EliminateGrid{

EliminateGrid(const GridPos &pos, int type):m_gridPos(pos), m_type(type){

}

GridPos m_gridPos;

int m_type;

};

在GaeScene中初始化:

bool GameScene::init(){

do{

C_BREAK_IF(!TouchGroup::init());

for (int i=0;i

{

m_gridData[i] = GRID_EMPTY_DATA;

}

m_gridContentLayer = Widget::create();

CC_BREAK_IF(!m_gridContentLayer);

m_gridContentLayer->retain();

m_gridContentLayer->setAnchorPoint(ccp(0,0));

m_gridContentLayer->setPosition(ccp(0, 0));

this->addWidget(m_gridContentLayer);

return true;

}while(0);

return false;

}

得到屏幕上的像素坐标:

void GameScene::getGridPosition(int x, int y, CCPoint &point){

point.x = GRID_WIDTH / 2 + GRID_WIDTH * x;

point.y = GRID_HEIGHT / 2 + GRID_HEIGHT * y;

}

把屏幕上的像素坐标转换成我们的坐标

bool GameScene::getPointGridPos(const CCPoint &point, GridPos &pos){

float x = point.x - GRID_BEGIN_X;

float y = point.y - GRID_BEGIN_Y;

if (x < 0 || x > GRID_WIDTH * GRID_COUNT_LANDSCAPE

|| y <

相关推荐

青铜仙鹤
beat365官方网站大全

青铜仙鹤

📅 08-16 👁️ 9380
裤子27码是多大(27码裤子是多少厘米?)
365bet亚洲平台

裤子27码是多大(27码裤子是多少厘米?)

📅 06-30 👁️ 9737
便利店的冷冻饭团哪来的?为啥保质期长?看完懂了!
beat365官方网站大全

便利店的冷冻饭团哪来的?为啥保质期长?看完懂了!

📅 09-14 👁️ 5489