Cocos2dx制作2048(4.增加计分)
来源:互联网 发布:什么是数据割接 编辑:程序博客网 时间:2024/05/22 04:47
经过上一节,我们已经完成了整个游戏的逻辑,那么本章节我们来给2048添加游戏计分,增加游戏结束画面。我们还没有学习到怎么保存用户数据,历史最高分数就先不做了。
这章完成之后,我们在加点声音,然后移植Android就哦了
1.增加游戏分数
我们整个游戏算是完成了,那么我们今天来完善一下。首先我们增加一个用于累加分数的变量,然后再构造函数中初始化
HelloWorld::HelloWorld():m_StartX(0),m_StartY(0),m_RangeX(0),m_RangeY(0),m_TotalScore(0){}
在什么时候分数才累加呢??当然,在数字有叠加的时候,那么??
else if (m_squarearray[x][aftery]->getNumber()==m_squarearray[x][y]->getNumber()){bool isAdd=false;for (int temp = aftery+1; temp < y; temp++){if (m_squarearray[x][temp]->getNumber()!=0){isAdd=true;break;}}if (isAdd){continue;}m_squarearray[x][y]->setNumber(m_squarearray[x][y]->getNumber()*2);m_squarearray[x][aftery]->setNumber(0);m_TotalScore+=m_squarearray[x][y]->getNumber()*2;//累加分数break;}
分数加完之后的显示吧??
bool HelloWorld::init(){//////////////////////////////// 1. super init firstif ( !CCLayer::init() ){return false;}CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();initMatrix(visibleSize);//搞点背景CCLayerColor* layerColorBG= CCLayerColor::create(ccc4(180,170,160,255));this->addChild(layerColorBG,0);//增加分数CCLayerColor* ScorelayerColorBG= CCLayerColor::create(ccc4(255,245,238,255),150,50);ScorelayerColorBG->ignoreAnchorPointForPosition(false);ScorelayerColorBG->setAnchorPoint(ccp(0.5,0.5));ScorelayerColorBG->setPosition(ccp(visibleSize.width/2,visibleSize.height-50));this->addChild(ScorelayerColorBG,1,1);CCLabelTTF* pScoreTTF= CCLabelTTF::create(CCString::createWithFormat("Score:%i",m_TotalScore)->getCString(),"arial.ttf",20);pScoreTTF->setColor(ccc3(255,0,0));pScoreTTF->setPosition(ccp(ScorelayerColorBG->getContentSize().width/2,ScorelayerColorBG->getContentSize().height/2));ScorelayerColorBG->addChild(pScoreTTF,0,1);return true;}
if (isTouch){autoSquare();//改变分数CCLabelTTF* pScoreTTF= (CCLabelTTF*) this->getChildByTag(1)->getChildByTag(1);pScoreTTF->setString(CCString::createWithFormat("Score:%i",m_TotalScore)->getCString());}
OK,测试,刚增加分数的代码写错了,应该位置要调换一下
m_TotalScore+=m_squarearray[x][y]->getNumber()*2;m_squarearray[x][y]->setNumber(m_squarearray[x][y]->getNumber()*2);m_squarearray[x][aftery]->setNumber(0);
搞定!
2.增加游戏结束画面
void HelloWorld::doGameOver(){bool isOver=true;for (int x = 0; x < 4; x++){if (!isOver){break;}for (int y = 0; y < 4; y++){if (m_squarearray[x][y]->getNumber()==0){isOver=false;}else if(x!=0&&m_squarearray[x][y]->getNumber()==m_squarearray[x-1][y]->getNumber()){isOver=false;}else if(x!=3&&m_squarearray[x][y]->getNumber()==m_squarearray[x+1][y]->getNumber()){isOver=false;}else if(y!=3&&m_squarearray[x][y]->getNumber()==m_squarearray[x][y+1]->getNumber()){isOver=false;}else if(y!=0&&m_squarearray[x][y]->getNumber()==m_squarearray[x][y-1]->getNumber()){isOver=false;}if (!isOver){break;}}}if (isOver){//游戏结束CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1, HelloWorld::scene()));}}
这是判断游戏是否结束的代码,
原理是什么呢?
其实就是判断当前数字方块是不是0,如果是0,果断没有结束,所有False,然后退出循环
或者,在判断相邻的上下左右是不是有数字和它相等,如果有,游戏还能继续
然后再ccTouchEnd调用
if (isTouch){autoSquare();//改变分数CCLabelTTF* pScoreTTF= (CCLabelTTF*) this->getChildByTag(1)->getChildByTag(1);pScoreTTF->setString(CCString::createWithFormat("Score:%i",m_TotalScore)->getCString());//判断游戏是否结束doGameOver();}
那么,怎么模拟游戏结束呢??
初始化矩阵的时候,给附上值就行了
SquareSprite* pSquareSprite=SquareSprite::createSquareSprite(2*(x+1)*(y+1),pointx,pointy,SquareSize,SquareSize);
当然,值要不相邻哦
现在,随便向哪滑动下试试,什么效果??
下班哒!后面移植,什么什么细节的就不写了
这里附上源码和APK
源码:打包了,代码,资源,和移植Android的整个项目,所以有点大
http://download.csdn.net/detail/q269399361/7561847
apk:
http://download.csdn.net/detail/q269399361/7561859
0 0
- Cocos2dx制作2048(4.增加计分)
- Cocos2dx制作2048(1.搭建主框架)
- Cocos2dx制作2048(3.数字相加逻辑)
- Cocos2dx制作2048(3.数字相加逻辑)
- 计分
- cocos2dx 之如何创建label 做计分板
- cocos2dx-基本动画制作
- cocos2dx-CCScrollView的制作
- cocos2dx-基本动画制作
- cocos2dx fnt字体制作
- 【cocos2dx】Sprite增加多边形(增加不规则碰撞)
- 【cocos2dx】TMXTiledMap增加碰撞体
- Cocos2dx制作2048(2.数字方块的创建)
- Cocos2dx制作2048(2.数字方块的创建)
- cocos2dx 制作单机麻将(一)
- cocos2dx 制作单机麻将(二)
- cocos2dx 制作单机麻将(三)
- cocos2dx 制作单机麻将(四)
- MFC消息三部曲(3)——多窗口之间的通信
- iOS开发- ios学习资源(持续更新)
- DxImageProc库终于可以发布测试版本了
- Linux常用命令大全
- 内存管理介绍与Leak工具的使用
- Cocos2dx制作2048(4.增加计分)
- HDU 1226 - 超级密码
- eclipse/myeclipse通用插件安装方法(最实用)
- CentOS部署
- Android NFS 开发配置
- 【POJ】2778 DNA Sequence AC自动机+矩阵
- 我的算法学习之路
- iOS开发-应用崩溃日志分析(Crash Log)
- Jafka源代码分析——LogManager