利用cocos2dx 3.2开发消灭星星(八)游戏的结束判断与数据控制

利用cocos2dx 3.2开发消灭星星(八)游戏的结束判断与数据控制,第1张

概述如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。 不过问题又来了,游戏总要结束,那怎么判断游戏是否结束或者游戏进入下一关呢 我们在删除待删除队列的时候(见上一节),不妨加入一个函数,来确定删除完以后,这个游戏是否还能够进行下去 bool StarMatrix::isEnded(){ bool bRet = true; for(int i=0;i<ROW_NUM;i++){ fo

如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。

不过问题又来了,游戏总要结束,那怎么判断游戏是否结束或者游戏进入下一关呢

我们在删除待删除队列的时候(见上一节),不妨加入一个函数,来确定删除完以后,这个游戏是否还能够进行下去

bool StarMatrix::isEnded(){	bool bRet = true;	for(int i=0;i<ROW_NUM;i++){		for(int j=0;j<Col_NUM;j++){			if(stars[i][j] == nullptr)				continue;			int curcolor = stars[i][j]->getcolor();			//上			if(i-1>=0 && stars[i-1][j]!=nullptr && stars[i-1][j]->getcolor() ==  curcolor)				return false;			//下			if(i+1<ROW_NUM && stars[i+1][j]!=nullptr && stars[i+1][j]->getcolor() == curcolor)				return false;			//左			if(j-1>=0 && stars[i][j-1]!=nullptr && stars[i][j-1]->getcolor() == curcolor)				return false;			//右			if(j+1<Col_NUM && stars[i][j+1]!=nullptr && stars[i][j+1]->getcolor() == curcolor)				return false;		}	}	return bRet;}

判断是否结束的思路很简单,对于StarMatrix里面的二维Star*数组的每一个星星,如果上下左右都没有与之相同颜色,就判定为游戏结束。开始把剩下的两两互不相连的星星消去。


那么如何判断是GameOver还是进入下一关呢。。这里补充点之前忘记讲的东西:数据管理


我们新建一个类来统一管理整个游戏的数据,包括当前获得分数,当前关卡,通关分数,历史最高分等,这样统一管理的好处是能过保证全局的统一

由于这个管理数据类贯穿整个游戏,所以每个人有不同的实现方法,每个人的游戏数据管理类也可能不一样,所以这里直接贴出源码

GameData.h

#ifndef _GAMEDATA_H_#define _GAMEDATA_H_class GAMEDATA{public:	static GAMEDATA* getInstance();	/*当前等级*/	voID setCurLevel(int level);	inline int getCurLevel(){return cur_level;}	/*下一等级*/	inline int getNextLevel(){return next_level;}	/*最高分*/	inline voID setHistoryscore(int score){history_score = score;}	inline int getHistoryscore(){return history_score;}	/*当前分数*/	inline voID setCurscore(int score){cur_score = score;}	inline int getCurscore(){return cur_score;}	/*通关分数*/	inline int getNextscore(){return next_score;}	inline int getscoreByLevel(int level);	/*奖励分数*/	int getJiangli(int size);	voID saveHighestscore();private:	GAMEDATA();	voID init();private:	static GAMEDATA* _instance;	int cur_level;	int next_level;	int history_score;	int cur_score;	int next_score;	frIEnd class Menulayer;};#endif

GameData.cpp
#include "GameData.h"#include "cocos2d.h"using namespace cocos2d;GAMEDATA* GAMEDATA::_instance = 0;GAMEDATA::GAMEDATA(){	this->init();}GAMEDATA* GAMEDATA::getInstance(){	if(_instance == 0){		_instance = new GAMEDATA();	}	return _instance;}voID GAMEDATA::init(){    setCurLevel(0);	setCurscore(0);	setHistoryscore(UserDefault::getInstance()->getIntegerForKey("highestscore",0));}voID GAMEDATA::setCurLevel(int level){	if(level < 0){		return;	}	cur_level = level;	next_level = level + 1;	next_score = getscoreByLevel(next_level);}int GAMEDATA::getscoreByLevel(int level){	int score = 0;	if (level == 1)	{		score = 1000;	}	else if (level == 2)	{		score = 3000;	}	else if ( (level >=3) && (level <= 10) )	{		score = 3000 + 3000 * (level - 2);	}	else	{		score = 27000 + 4000 * (level - 10);	}	return score;}int GAMEDATA::getJiangli(int size){	static const int jiangli[10][2] =	{		{0,2000},{1,1980},{2,1920},{3,1820},{4,1680},{5,1500},{6,1280},{7,1020},{8,720},{9,380}	};	if(size>9 || size<0){		return 0;	}	return jiangli[size][1];}voID GAMEDATA::saveHighestscore(){	UserDefault::getInstance()->setIntegerForKey("highestscore",getHistoryscore());}

那么游戏里面一切与分数,数据有关的都能够调用这个类来获得,至于判断是GameOver还是下一关,那不就是显而易见的事吗,判断当前获得分数是否大于通关分数就可以了。

其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

总结

以上是内存溢出为你收集整理的利用cocos2dx 3.2开发消灭星星(八)游戏的结束判断与数据控制全部内容,希望文章能够帮你解决利用cocos2dx 3.2开发消灭星星(八)游戏的结束判断与数据控制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1000106.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存