标签:style class blog code http tar
源码下载地址:http://download.csdn.net/detail/oyangyufu/7492917
点击NEW GAME按钮,进入游戏主场景
代码:
游戏背景
layer = (CCLayer*)this->getChildren()->objectAtIndex(SnakeConstants::LAYER_BACKGROUND);
layer->setTouchEnabled(false);
//游戏背景
CCSize size = CCDirector::sharedDirector()->getWinSize();
CCTMXTiledMap *pTMXTiledMap = CCTMXTiledMap::create("map.tmx");
pTMXTiledMap->setAnchorPoint( ccp(0.5f, 0.5f) );
pTMXTiledMap->setPosition(ccp(size.width/2 , size.height/2));
layer->addChild(pTMXTiledMap); layer = (CCLayer*)this->getChildren()->objectAtIndex(SnakeConstants::LAYER_UI); CCMenuItemImage *pCloseItem = CCMenuItemImage::create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(SnakeScene::menuCloseCallback)); CC_BREAK_IF(! pCloseItem); pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20)); CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); pMenu->setPosition(CCPointZero); CC_BREAK_IF(! pMenu); layer->addChild(pMenu);
CCMenuItemImage* pUpImage = CCMenuItemImage::create("u1.png", "u2.png", this, menu_selector(SnakeScene::upCallBack));
pUpImage->setAnchorPoint(ccp(0.5, 0));
pUpImage->setPositionY(6.0f);
CCMenuItemImage* pDownImage = CCMenuItemImage::create("d1.png", "d2.png", this, menu_selector(SnakeScene::downCallBack));
pDownImage->setAnchorPoint(ccp(0.5, 1));
pDownImage->setPositionY(-6.0f);
CCMenuItemImage* pLeftImage = CCMenuItemImage::create("b1.png", "b2.png", this, menu_selector(SnakeScene::leftCallBack));
pLeftImage->setAnchorPoint(ccp(1, 0.5));
pLeftImage->setPositionX(-6.0f);
CCMenuItemImage* pRightImage = CCMenuItemImage::create("f1.png", "f2.png", this, menu_selector(SnakeScene::rightCallBack));
pRightImage->setAnchorPoint(ccp(0, 0.5));
pRightImage->setPositionX(6.0f);
CCMenu* ArrowMenu = CCMenu::create(pUpImage, pDownImage, pLeftImage, pRightImage, NULL);
ArrowMenu->setPosition(50, 50);
layer->addChild(ArrowMenu); mScoreText = CCLabelTTF::create("Score: 0", "Plok.ttf", 20);
mScoreText->setPosition(ccp(0, size.height - 10));
mScoreText->setAnchorPoint(ccp(0, 0.5));
layer->addChild(mScoreText);游戏开始语
mTitleText = CCLabelTTF::create("Play Game Snake!", "Plok.ttf", 30);
mTitleText->setPosition(ccp(size.width/2, size.height/2));
layer->addChild(mTitleText);
mTitleText->setScale(0.0f); mGameOverText = new CCLabelTTF();
mGameOverText->initWithString("Game Over!", "Plok.ttf", 30);
mGameOverText->setPosition(ccp(size.width/2, size.height/2));
mGameOverText->retain();
mGameOverText->autorelease();schedule(schedule_selector(SnakeScene::ScheduleTick1), 0.4f); //播放游戏开始语 schedule(schedule_selector(SnakeScene::GameCircle), 0.5f); //判断游戏是否结束
//游戏开始语
void SnakeScene::ScheduleTick1( float dt )
{
float scale = mTitleText->getScale();
if(scale < 0.8)//从0倍缩放到0.8倍
{
mTitleText->setScale(scale+0.1);
}
else //删除游戏开始语
{
CCLayer* layer = (CCLayer*)this->getChildren()->objectAtIndex(SnakeConstants::LAYER_UI);
unschedule(schedule_selector(SnakeScene::ScheduleTick1));
layer->removeChild(mTitleText);
m_bGameRunning = true;//开始运行游戏
}
}void SnakeScene::GameCircle( float dt )
{
if(m_bGameRunning)
{
if(!mSnake->Move())//0结束
{
OnGameOver();
}
HandleNewSnakePosition();
}
}boolean Snake::Move()
{
mLastMoveDirection = mDirection;
if(m_bGrow)
{
m_bGrow = false;
/* If the snake should grow,
* simply add a new part in the front of the tail,
* where the head currently is. */
SnakeTailPart* newTailPart = new SnakeTailPart(m_pSnakeHead);//每一节
newTailPart->setScale(0.6f);
this->addChild(newTailPart);
marrTail.insertObject(newTailPart, 0);//marrTail管理整条蛇
}
else
{
if(marrTail.count() > 0)
{
/* First move the end of the tail to where the head currently is. */
SnakeTailPart* tailEnd = (SnakeTailPart*)marrTail.lastObject();
marrTail.removeLastObject(false);
tailEnd->SetCell(*m_pSnakeHead);
marrTail.insertObject(tailEnd, 0);
}
}
/* The move the head into the direction of the snake. 重设蛇头的位置*/
m_pSnakeHead->SetCell(GetNextX(), GetNextY());
//检查蛇头跟蛇尾相撞
for(int i = marrTail.count() - 1; i >= 0; i--)
{
if(m_pSnakeHead->IsInSameCell(*(SnakeTailPart*)marrTail.objectAtIndex(i)))
{
return false;
}
}
return true;
}创建蛇与青蛙
//主角蛇 mSnake = new Snake(RIGHT, 0, SnakeConstants::CELLS_VERTICAL/2); mSnake->autorelease(); mSnake->GetHead()->Animate(1); mSnake->Grow(); layer = (CCLayer*)this->getChildren()->objectAtIndex(SnakeConstants::LAYER_SNAKE); layer->addChild(mSnake); //青蛙 mFrog = new Frog(0, 0); mFrog->autorelease(); mFrog->Animate(1); this->SetFrogToRandomCell();//随机出现一个青蛙 layer = (CCLayer*)this->getChildren()->objectAtIndex(SnakeConstants::LAYER_FOOD); layer->addChild(mFrog);
void SnakeScene::HandleNewSnakePosition()
{
const SnakeHead* snakeHead = mSnake->GetHead();
if(snakeHead->GetCellX() < 0 || snakeHead->GetCellX() >= SnakeConstants::CELLS_HORIZON
|| snakeHead->GetCellY() < 0 || snakeHead->GetCellY() >= SnakeConstants::CELLS_VERTICAL) //蛇活动的区域
{
OnGameOver();
}
else if(snakeHead->IsInSameCell(*mFrog))//蛇吃了青蛙加分、显示下一个青蛙
{
m_nScore += 50;
char score[128] = {0};
sprintf(score, "Score: %d", m_nScore);
mScoreText->setString(score);
mSnake->Grow();
PlayMunchSound();//吃到的声音
this->SetFrogToRandomCell();//随机显示下一个青蛙void SnakeScene::upCallBack( CCObject* sender )
{
mSnake->SetDirection(UP);
}
void SnakeScene::downCallBack( CCObject* sender )
{
mSnake->SetDirection(DOWN);
}
void SnakeScene::leftCallBack( CCObject* sender )
{
mSnake->SetDirection(LEFT);
}
void SnakeScene::rightCallBack( CCObject* sender )
{
mSnake->SetDirection(RIGHT);void Snake::SetDirection( const Direction dirction )
{
if(mLastMoveDirection != Opposite(dirction))
{
mDirection = dirction;
m_pSnakeHead->SetRotation(dirction);
}
}蛇的方向度
void SnakeHead::SetRotation(const Direction dirction)
{
switch(dirction)
{
case UP:
this->setRotation(180);
break;
case DOWN:
this->setRotation(0);
break;
case LEFT:
this->setRotation(90);
break;
case RIGHT:
this->setRotation(270);
break;
}
}
标签:style class blog code http tar
原文地址:http://blog.csdn.net/oyangyufu/article/details/30353259