展会信息港展会大全

Cocos2d-x 3.2 大富翁游戏项目开发-第十八部分 问号随机事件,cocos2d-x项目开发
来源:互联网   发布日期:2015-09-28 14:38:24   浏览:2294次  

导读: Cocos2d-x 3.2 大富翁游戏项目开发-第十八部分 问号随机事件,cocos2d-x项目开发 角色走完要求的步数后,先查看停留位置是否有问号,如果有,先处理问号事件,处理完毕后,再处理...

Cocos2d-x 3.2 大富翁游戏项目开发-第十八部分 问号随机事件,cocos2d-x项目开发

角色走完要求的步数后,先查看停留位置是否有问号,如果有,先处理问号事件,处理完毕后,再处理相邻周边上下左右地块问题,购买、升级或缴纳过路费。

问号随机事件主要是如下事件:

政府鼓励投资,返还税金10000

政府严查账务,补交税金20000

喝到假酒,上吐下泻,体力耗光

吃了大补丸,体力恢复

投资获利,分红20000

投资失败,亏损30000

由于还没有进行国际化处理,在用中文的时候,会出现乱码,我们暂时先都用英文处理一下,后期统一做国际化处理

1、与之对应的变量定义在ConstUtil.h文件中:

const int TAX_REBATES_TAG = 1; //政府鼓励投资,返还税金10000

const int PAY_TAXES_TAG = 2; //政府严查账务,补交税金20000

const int LOSS_STRENGTH_TAG =3;//喝到假酒,上吐下泻,体力耗光

const int PHYSICAL_RECOVERY_TAG =4;//吃了大补丸,体力恢复

const int INVESTMENT_DIVIDENDS_TAG = 5 ;//投资获利,分红20000

const int INVESTMENT_LOSS_TAG = 6; //投资失败,亏损30000

#defineTAX_REBATES"The government encourages investment, tax rebates 10000"

#definePAY_TAXES "Government scrutiny of accounts, pay taxes 20000"

#defineLOSS_STRENGTH "To drink alcohol, diarrhea, loss of light strength"

#definePHYSICAL_RECOVERY "Eat cake, physical recovery"

#defineINVESTMENT_DIVIDENDS "Investment profits, dividends 20000"

#defineINVESTMENT_LOSS "Investment failure, loss 30000"

2、在GameBaseScene.cpp初始化随机事件Map容器

void GameBaseScene::initRandomAskEvent()

{

randomAskEventMap.insert(TAX_REBATES_TAG,__String::create(TAX_REBATES));

randomAskEventMap.insert(PAY_TAXES_TAG,__String::create(PAY_TAXES));

randomAskEventMap.insert(LOSS_STRENGTH_TAG,__String::create(LOSS_STRENGTH));

randomAskEventMap.insert(PHYSICAL_RECOVERY_TAG,__String::create(PHYSICAL_RECOVERY));

randomAskEventMap.insert(INVESTMENT_DIVIDENDS_TAG,__String::create(INVESTMENT_DIVIDENDS));

randomAskEventMap.insert(INVESTMENT_LOSS_TAG,__String::create(INVESTMENT_LOSS));

}

3、当角色走完步数后,会调用到RicherGameController的handlePropEvent方法。

在该方法中我们判断角色停留的位置是否有问号,如果有,就发送一个问号信息MSG_RANDOM_ASK_EVENT,同时方法返回。如果没有问号,就调用aroundLandEvent()方法,这个方法是处理角色周边相邻上下左右地块信息的方法,我们把以前的代码抽取成了该方法,便于后期重复使用

void RicherGameController::handlePropEvent()

{

oneRoundDone =false;

float playerEnd_X = _colVector[stepsCount]*32;

float playerEnd_Y = _rowVector[stepsCount]*32 + 32;

Point pointInMap = Util::GL2map(Vec2(playerEnd_X,playerEnd_Y), GameBaseScene::_map);

int endId = GameBaseScene::wayLayer->getTileGIDAt(pointInMap);

if(endId == GameBaseScene::randomEvent_tiledID)

{

String * str = String::createWithFormat("%d-%f-%f-%d",MSG_RANDOM_ASK_EVENT_TAG,pointInMap.x,pointInMap.y,_richerPlayer->getTag());

NotificationCenter::getInstance()->postNotification(MSG_RANDOM_ASK_EVENT,str);

return;

}

aroundLandEvent();

}

4、GameBaseScene.cpp中注册了对问号信息MSG_RANDOM_ASK_EVENT的处理

void GameBaseScene::registerNotificationObserver()

{

………………………..

NotificationCenter::getInstance()->addObserver(

this,

callfuncO_selector(GameBaseScene::receivedNotificationOMsg),

MSG_RANDOM_ASK_EVENT,

NULL);

…………………….

}

处理方法在receivedNotificationOMsg()方法中,当接收到问号信息,根据角色调用doRandomAskEvent()方法,处理问号信息,

处理完毕后调用sendMSGDealAroundLand()方法发送MSG_AROUND_LAND消息,处理角色相邻上下左右地块的消息,缴纳过路费或购买升级地块。

void GameBaseScene::receivedNotificationOMsg(Object* data)

{

……………..

case MSG_RANDOM_ASK_EVENT_TAG:

{

int playerTag = messageVector.at(3)->intValue();

switch(playerTag)

{

case PLAYER_1_TAG:

{

doRandomAskEvent(player1);

scheduleOnce(schedule_selector( GameBaseScene::sendMSGDealAroundLand),TOAST_SHOW_TIME);

break;

}

case PLAYER_2_TAG:

{

doRandomAskEvent(player2);

scheduleOnce(schedule_selector( GameBaseScene::sendMSGDealAroundLand),TOAST_SHOW_TIME);

break;

}

}

break;

}

…………….

}

void GameBaseScene::sendMSGDealAroundLand(float dt)

{

NotificationCenter::getInstance()->postNotification(MSG_AROUND_LAND,String::createWithFormat("%d",MSG_AROUND_LAND_TAG));

}

5、处理问号信息的方法doRandomAskEvent(),就是从问号容器中随机取出一个,根据事件进行资金或体力的增减,并Toast提示事件信息

void GameBaseScene::doRandomAskEvent(RicherPlayer* player)

{

int randomNumber = rand()%(randomAskEventMap.size()) + 1;

__String * str = randomAskEventMap.at(randomNumber);

switch(randomNumber)

{

case TAX_REBATES_TAG:

{

refreshMoneyLabel(player,10000);

break;

}

case PAY_TAXES_TAG:

{

refreshMoneyLabel(player,-20000);

break;

}

case LOSS_STRENGTH_TAG:

{

refreshStrengthLabel(player,-100);

break;

}

case PHYSICAL_RECOVERY_TAG:

{

refreshStrengthLabel(player,100);

break;

}

case INVESTMENT_DIVIDENDS_TAG:

{

refreshMoneyLabel(player,20000);

break;

}

case INVESTMENT_LOSS_TAG:

{

refreshMoneyLabel(player,-30000);

break;

}

}

CocosToast::createToast(this, str->getCString(), TOAST_SHOW_TIME,player->getPosition());

}

6、RicherGameController.cpp中注册了MSG_AROUND_LAND消息观察者,收到该消息后调用aroundLandEvent() ,处理过路费或购买地块等问题

void RicherGameController::registerNotificationObserver()

{

…………………….

NotificationCenter::getInstance()->addObserver(

this,

callfuncO_selector(RicherGameController::receivedMsg),

MSG_AROUND_LAND,

NULL);

}

void RicherGameController::receivedMsg(Object* data)

{

……………………

if(retMsgType == MSG_AROUND_LAND_TAG)

{

aroundLandEvent();

}

}

点击下载代码http://download.csdn.net/detail/lideguo1979/8339065

未完待续...............

http://www.bkjia.com/Androidjc/939160.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/939160.htmlTechArticleCocos2d-x 3.2 大富翁游戏项目开发-第十八部分 问号随机事件,cocos2d-x项目开发 角色走完要求的步数后,先查看停留位置是否有问号,如果有...

赞助本站

人工智能实验室

相关热词: android开发 应用开发

相关内容
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港