您的位置:首页 > 移动开发 > Cocos引擎

小小菜之Cocos2d-x游戏开发旅程——项目实例:贪吃蛇(4)

2015-08-15 22:25 405 查看
——吃食物和长身体

蛇绕着食物跑啊跑,转啊转,就是吃不到,它都要崩溃了~

~(>_<)~~

好吧,我们来帮帮它吧

如何让蛇可以吃到食物呢,其实很简单嘛。既然蛇头有行列坐标,那么食物也有行列坐标。所以当蛇头的行列坐标和食物的行列坐标相等时,让食物的坐标改变,这不就是吃到了吗,对吧。

if(head->row == food->row && head->col == food->col)
{

//改变食物的位置
food->col = rand()%10;
food->row = rand()%10;
food->setPosition(Vec2(food->col*GAME_TILED_WIDTH , food->row*GAME_TILED_HEIGHT));
}


现在蛇已经可以吃到食物了,但是不能光吃不长吧,所以吃饱了应该长身体。

由于身体有很多很多很多。。。。

我们就用一个集合来保存身体先定义一个集合Vector

//第一种,让身体的方向跟着头的方向即可
if(allBody.size() == 0)   //当没有身体的时候
{
nowbd->dir = head->dir;  //身体的方向跟着头
switch(nowbd->dir)
{
case UP:
nowbd->row = head->row - 1;
nowbd->col = head->col;
break;
case DOWN:
nowbd->row = head->row +1;
nowbd->col = head->col;
break;
case LEFT:
nowbd->row = head->row;
nowbd->col = head->col +1;
break;
case RIGHT:
nowbd->row = head->row;
nowbd->col = head->col -1;
break;
default:
break;
}
}
//第二种,让新的身体的方向跟着原来的最后一截身体的方向
else    //当有身体的时候
{
auto lastbd = allBody.at(allBody.size() - 1);
nowbd->dir = lastbd->dir;
switch(nowbd->dir)
{
case UP:
nowbd->row = lastbd->row - 1;
nowbd->col = lastbd->col;
break;
case DOWN:
nowbd->row = lastbd->row +1;
nowbd->col = lastbd->col;
break;
case LEFT:
nowbd->row = lastbd->row;
nowbd->col = lastbd->col +1;
break;
case RIGHT:
nowbd->row = lastbd->row;
nowbd->col = lastbd->col -1;
break;
default:
break;
}
}
//添加到allBody中
allBody.pushBack(nowbd);
//设置坐标
nowbd->setPosition(Vec2(nowbd->col*GAME_TILED_WIDTH, nowbd->row*GAME_TILED_HEIGHT));
//添加到节点中
this->getChildByTag(TAG_BG)->addChild(nowbd);


最后让身体也移动起来

if(allBody.size() > 0)
{
for(long i = allBody.size()-1 ; i >= 0; i--)
{
auto nowBody = allBody.at(i);
switch(nowBody->dir)
{
case UP:
nowBody->row++;
break;
case DOWN:
nowBody->row--;
break;
case LEFT:
nowBody->col--;
break;
case RIGHT:
nowBody->col++;
break;
}
nowBody->setPosition(Vec2(nowBody->col*GAME_TILED_WIDTH , nowBody->row*GAME_TILED_HEIGHT));
if(i > 0)
{
nowBody->dir = allBody.at(i - 1 )->dir;
}
else
{
nowBody->dir = head->dir;
}
}
}


OK,这样蛇就可以自由的吃东西长身体了。

当然,这个游戏还没有做完,还差最后一点点。

未完待续。。

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