Cocos2d-x 3.2 大富翁游戏项目开发-第十八部分 问号随机事件
角色走完要求的步数后,先查看停留位置是否有问号,如果有,先处理问号事件,处理完毕后,再处理相邻周边上下左右地块问题,购买、升级或缴纳过路费。
问号随机事件主要是如下事件:
政府鼓励投资,返还税金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#define TAX_REBATES "The government encourages investment, tax rebates 10000"
#define PAY_TAXES "Government scrutiny of accounts, pay taxes 20000"
#define LOSS_STRENGTH "To drink alcohol, diarrhea, loss of light strength"
#define PHYSICAL_RECOVERY "Eat cake, physical recovery"
#define INVESTMENT_DIVIDENDS "Investment profits, dividends 20000"
#define INVESTMENT_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
未完待续...............
Cocos2d-x 3.2 大富翁游戏项目开发-第十八部分 问号随机事件相关推荐
- Cocos2d-x 3.2 大富翁游戏项目开发-第二十八部分 游戏保存和载入存档游戏
1.游戏保存 如图,在右下角增加保存图标,点击后进行游戏的保存. 游戏保存采用json格式,具体如下: {"map_level":2, // 游戏关卡"gameRound ...
- Cocos2d-x 3.2 大富翁游戏项目开发-第二十六部分 人物技能
本节主要是添加人物技能,技能包括 暴风骤雨:此技能可以把地块变成空白地块, 随心步: 选择想走的步数,想走几步走几步 巧取豪夺:把对手的土地变成自己的 技能包含的信息:等级 和 耗费体力 等级共5 ...
- Cocos2d-x 3.2 大富翁游戏项目开发-第二十五部分 大富翁股市
当角色走到股市图标时,进入股市界面.每走完一个回合,增加一条股票数据, 股市界面上半部分显示股票信息,包括代码,名称,当前价格,买入价格,涨跌百分比,角色持有的股票数量 下半部分显示股票价格走势,当点 ...
- Cocos2d-x 3.2 大富翁游戏项目开发-第二十部分 螃蟹挡路(code)
该部分我们添加螃蟹伤人事件,道路位置随机添加螃蟹精灵,当角色行走完毕如果停留位置碰到了螃蟹,首先播放伤人动画,然后是播放救护车把角色带走动画. 如果轮流到该角色行走时,吐司提示住院还有几天,当住院天数 ...
- Cocos2d-x 3.2 大富翁游戏项目开发-第二十四部分 彩票开奖
每隔N个回合,彩票开奖一次,每期开奖奖金固定5万,暂不累积.摇奖效果一般,以后考虑用物理引擎实现 1.定义彩票开奖类 bool LotteryPublish::init() {addItemSprit ...
- 即时通讯音视频开发(十八):详解音频编解码的原理、演进和应用选型
1.引言 大家好,我是刘华平,从毕业到现在我一直在从事音视频领域相关工作,也有一些自己的创业项目,曾为早期Google Android SDK多媒体架构的构建作出贡献. 就音频而言,无论是算法多样性, ...
- 【Visual C++】游戏开发四十八 浅墨DirectX教程十六 三维地形系统的实现
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- Linux驱动开发(十八)---网络(网卡)驱动学习
前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> <Linux驱动开发(三)-设备树> ...
- 【Visual C++】游戏开发四十八 浅墨DirectX教程十六 三维地形系统的实现
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8685546 作者:毛星云(浅墨) ...
最新文章
- [CareerCup] 15.5 Denormalization 逆规范化
- Linux test 命令
- AB1601烧程序时注意事项
- dcmtk程序包综述(1)
- java 最小堆_Java最小堆实现
- HDFS的Java客户端操作代码(HDFS删除文件或目录)
- Linux运维实战之DNS的高级配置(转发器、视图等)
- python输入print跳到documentation-习题 48: 更复杂的用户输入
- 7天拿到阿里Android岗位offer,都是精髓!
- 王道考研 计算机网络17 IP数据报 最大传送单元MTU IP地址 IPv4 子网划分 ARP协议 ICMP协议 移动IP
- 联想杨元庆:未来五年研发总投入将会超过1000亿人民币
- margin系列之负值
- 使用Dockerfile制作jre环境基础镜像
- DMX协议和RDM协议
- 上海驾照科目三练习笔记
- 计算机网络安全 填空题,计算机网络安全技术选择填空复习题
- Poisson 分布
- 基于OpenGL ES 的深度学习框架编写
- 学渣的刷题之旅 leetcode刷题 67.二进制求和
- msvcr110.dll php,windows,_msvcr110.dll丢失,vcredist_x64.exe设置失败,windows - phpStudy
热门文章
- linux中非法内存,Debian GNU/Linux Telnetd非法内存处理漏洞
- cpld xilinx 定义全局时钟_FPGA/CPLD设计工具:Xilinx ISE使用详解
- ros下创建节点后运行总是出现[rospack] Error: package '***' not found
- CVPR2022论文速览--Vehicle trajectory prediction works, but not everywhere
- qt之QCustomPlot动态时间轴更新曲线
- 7 foundation plates(葫芦娃7兄弟)
- 亲爱的百度,您带着bug翩翩走来……呃
- webService详细
- 使用Eclipse搭建SpringBoot项目
- 我kao,110给我打电话了!