每隔N个回合,彩票开奖一次,每期开奖奖金固定5万,暂不累积。摇奖效果一般,以后考虑用物理引擎实现


1、定义彩票开奖类

bool LotteryPublish::init()
{
	addItemSpriteFrameCache();
	SpriteFrame* spf;
	spf = itemSpriteFrameCache->getSpriteFrameByName("publish_ly01.png");

	Sprite::initWithSpriteFrame(spf);
	setItemAnimate();
	return true;
}

void LotteryPublish::addItemSpriteFrameCache()
{
	itemSpriteFrameCache = SpriteFrameCache::getInstance();
	itemSpriteFrameCache->addSpriteFramesWithFile("images/publish_ly.plist","images/publish_ly.png");

	memset(name,20);

	for (int i=1; i<=21; i++) 
	{
		sprintf(name,"publish_ly%02d.png",i);
		item_anim_vector.pushBack(itemSpriteFrameCache->getSpriteFrameByName(name));
	}

}
//开奖动画
void LotteryPublish::setItemAnimate()
{
	if(!AnimationCache::getInstance()->getAnimation("publish_ly_animation"))
	{
		AnimationCache::getInstance()->addAnimation(Animation::createWithSpriteFrames(item_anim_vector,0.1f),"publish_ly_animation");
	}
	 normal_anmi = Animate::create(AnimationCache::getInstance()->getAnimation("publish_ly_animation"));
	 normal_anmi->retain();
}

2、创建开奖画面的对话框。
void GameBaseScene::initPopPublishLottery()
{
	popDialogLottery = PopupLayer::create(DIALOG_BG);	
	popDialogLottery->setContentSize(CCSizeMake(Dialog_Size_Width,Dialog_Size_Height+180)); 
	popDialogLottery->setTitle(LanguageString::getInstance()->getLanguageString(PUBLISH_LottERY)->getCString());
	popDialogLottery->setContentText("",20,60,250);
	popDialogLottery->setPopType(LottERY_PUBLISH);//开奖类型的对话框
	popDialogLottery->setPlayerVector(players_vector);//传入角色容器,开奖画面会根据这个显示角色购买的彩票号码
	popDialogLottery->setTag(100);
	this->addChild(popDialogLottery);	
	popDialogLottery->setVisible(false);
	
}



在显示Go按钮之前,根据回合数显示开奖界面
void GameBaseScene::receivednotificationOMsg(Object* data)
{
.............
	case MSG_GO_SHOW_TAG:
		{
			//便于测试,每一回合结束都显示开奖画面
			if(gameRoundCount !=0 && gameRoundCount%1 == 0)
			{
				//前面角色买地等,会播放动画,所以这里延迟一下,显示开奖画面
				scheduleOnce(schedule_selector( GameBaseScene::popPublishLottery),2.0f);
				
			}else
			{
				showGoButton();
			}
			break;
		}
............
}

//把开奖画面显示出来,并播放摇奖动画
void GameBaseScene::popPublishLottery(float dt)
{
	popDialogLottery->setVisible(true);	
	//开奖画面中添加角色购买的彩票号码
	popDialogLottery->addplayersLottery();
	//播放摇奖动画
	popDialogLottery->runPublishAnmi();
}

3、在PopupLayer.h中添加开奖对话框枚举LottERY_PUBLISH
enum POP_TYPE
{
	norMAL,LottERY,LottERY_PUBLISH,STOCK,};

//当对话框进入后调用setPublishLotteryContext,在对话框中添加开奖画面
void PopupLayer::onEnter()
{
......
	case LottERY_PUBLISH:
		{
			setPublishLotteryContext(contentSize);
			break;
		}

.....
}

//在对话框中添加开奖画面
void PopupLayer::setPublishLotteryContext(Size size)
{
	Size winSize = Director::getInstance()->getWinSize();
	lp = LotteryPublish::create();
	addChild(lp);
	lp->setPosition((winSize)/2);

	addplayersInfo(size);

}

//添加角色图标
void PopupLayer::addplayersInfo(Size size)
{
	Size winSize = Director::getInstance()->getWinSize();
	Size center =(winSize-size)/2;
	int j=0;
	for(auto it=players_vector.begin();it!=players_vector.end();it++)
	{
		RicherPlayer* player = dynamic_cast<RicherPlayer*>(*it);

		SpriteFrame* spf;
		int tag = player->getTag();
		switch(tag)
		{
		case PLAYER_1_TAG:
			{
				spf = player->player_spriteFrameCache->getSpriteFrameByName("player1_anim_01.png");
				break;
			}
		case PLAYER_2_TAG:
			{
				spf = player->player_spriteFrameCache->getSpriteFrameByName("player2_anim_02.png");
				break;
			}
		}

		Sprite* playerSprite = Sprite::createWithSpriteFrame(spf);
		playerSprite->setPosition( center.width+20,(winSize.height/2+50)+j*50);
		addChild(playerSprite);
		j++;
	}
	
}

//添加角色购买的彩票
void PopupLayer::addplayersLottery()
{
	for(int i=1;i<=30;i++)
	{
		if(this->getChildByTag(1000+i) != NULL)
		{
			this->removeChildByTag(1000+i);
		}
		
	}

	Size winSize = Director::getInstance()->getWinSize();
	Size size = this->getContentSize();
	Size center =(winSize-size)/2;
	int j=0;
	for(auto it=players_vector.begin();it!=players_vector.end();it++)
	{
		RicherPlayer* player = dynamic_cast<RicherPlayer*>(*it);
		
		playerLotteryVector.clear();
		for(int i=0;i < player->lottery_vector.size();i++)
		{
			
			LabelTTF* labelLotteryNumber = LabelTTF::create(String::createWithFormat("%i",player->lottery_vector.at(i))->getCString(),"",15);
			labelLotteryNumber->setPosition(ccp( center.width+20+(i+1)*20,(winSize.height/2+30)+j*50));
			labelLotteryNumber->setColor(Color3B(255,100,100));
			labelLotteryNumber->setTag(1000+player->lottery_vector.at(i));
			playerLotteryVector.pushBack(labelLotteryNumber);
		}

		for(int i=0;i < playerLotteryVector.size();i++)
		{
			addChild(playerLotteryVector.at(i));	
		}
		j++;

	}
}

//开始摇奖动画
void PopupLayer::runPublishAnmi()
{
	scheduleOnce(schedule_selector( PopupLayer::realRunPublishAnmi),3.0f);
}

//开始真正摇奖
void PopupLayer::realRunPublishAnmi(float dt)
{
lp->runAction(Sequence::create(lp->getnormal_anmi(),CallFunc::create([this]()
		{
			int lott = rand()%(30)+1;
			//四秒后 让开奖画面消失
			scheduleOnce(schedule_selector( PopupLayer::dismissFromParent),4.0f);
			
			Sprite* ball = Sprite::create("images/orange_ball.png");
			ball->setPosition(lp->getPosition()-lp->getContentSize()/2 + ccp(0,13));
			ball->setAnchorPoint(ccp(0,0));
			addChild(ball);
			LabelTTF* ltf = LabelTTF::create(String::createWithFormat("%02d",lott)->getCString(),20);
			ltf->setPosition(ball->getPosition()+ccp(5,6));
			ltf->setAnchorPoint(ccp(0,0));
			addChild(ltf);
			Size winSize = Director::getInstance()->getWinSize();
			Size center =(winSize)/2;
			int j=0;
			//判断角色是否中奖
			for(auto it=players_vector.begin();it!=players_vector.end();it++)
			{
				RicherPlayer* player = dynamic_cast<RicherPlayer*>(*it);
				//player->lottery_vector.push_back(8);

				for(int i=0;i < player->lottery_vector.size();i++)
				{
					if(player->lottery_vector.at(i) == lott)
					{
						player->setMoney(player->getMoney()+LottERY_WIN_MONEY);

						ParticleSystem* lotteryWinParticle = ParticleSystemQuad::create("images/lottery_win.plist");
						lotteryWinParticle->retain();
						ParticleBatchNode *batch = ParticleBatchNode::createWithTexture(lotteryWinParticle->getTexture());
						batch->addChild(lotteryWinParticle);	
						addChild(batch);

						lotteryWinParticle->setPosition( center.width+20,(winSize.height/2+50)+j*50 );										
						lotteryWinParticle->release();
						lotteryWinParticle->setAutoRemoveOnFinish(true); 

					}					
				}
				player->lottery_vector.clear();
				j++;
			}			
		}
	),NULL));
}

//发送对话框消失消息,并设置为不可见
void PopupLayer::dismissFromParent(float dt)
{	
	NotificationCenter::getInstance()->postNotification(MSG_DIMISS_DIALOG,String::createWithFormat("%d",MSG_DIMISS_DIALOG_PUBLISH_LottERY_TAG));
	this->setVisible(false);
}

4、GameBaseScene收到该消息后,更新资金,并显示Go按钮
	case MSG_DIMISS_DIALOG_PUBLISH_LottERY_TAG:
		{
			//this->removeChildByTag(100);
			for(auto it=players_vector.begin();it!=players_vector.end();it++)
			{
				RicherPlayer* player = dynamic_cast<RicherPlayer*>(*it);
				refreshMoneyLabel(player,0);
			}
			showGoButton();
			break;
		}



点击下载

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

Cocos2d-x 3.2 大富翁游戏项目开发-第二十四部分 彩票开奖的更多相关文章

  1. Swift可选类型的使用

    可选类型:拆包和绑定let刮刮奖="10";//只能是整型,不然“中奖金额”将显示为nillet中奖金额=刮刮奖.toInt();//拆包if中奖金额{println("恭喜,你中了\(中奖金额!"把中奖金额进行拆包,必须要用if语句判断,确定被拆包对象有值,为nil会报错}//绑定iflet临时金额=中奖金额{println}//间接拆包letmoney:String!

  2. 【swift】15-0515 optional,断言

    定义一个optional的值很容易,只需要在类型后面加上?)}//输出恭喜,中了Optional元!,把Optional的值取出来,前提是Optional类型有值。)}Optional类型之所以要拆包使用,是因为Optional类型其实的一个枚举。当Optional没有值的时候,返回的nil其实就是Optional.None,即没有值。//HELLO隐式拆包—用于optional一直有值的情况:varstr:String!)进行显式的折包也得到了Some中的值,这个语法相当于告诉编译器:在我们使用Opti

  3. 福利彩票幸运号码自动生成器

    采用php完全随机设计,每次刷新都有不同幸运号码,试试看,发了财别忘了neo哦~~~

  4. 《世界杯彩票竞猜系统》设计报告

    总结以上是DEVMAX为你收集整理的《世界杯彩票竞猜系统》设计报告全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  5. 彩翼系列-彩票分析软件源代码双色球,排三,排五,3D,22选5,30选7源代码

    总结以上是DEVMAX为你收集整理的彩翼系列-彩票分析软件源代码双色球,排三,排五,3D,22选5,30选7源代码全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  6. PAIP.彩票系统的对外接口流程实录

    总结以上是DEVMAX为你收集整理的PAIP.彩票系统的对外接口流程实录全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  7. 广东彩、重庆彩投注系统的研究与开发

    总结以上是DEVMAX为你收集整理的广东彩、重庆彩投注系统的研究与开发全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  8. Delphi开发经验技巧:随机产生中奖号码

    总结以上是DEVMAX为你收集整理的Delphi开发经验技巧:随机产生中奖号码全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  9. Cocos2d-x 3.2 大富翁游戏项目开发-第二十四部分 彩票开奖

    每隔N个回合,彩票开奖一次,每期开奖奖金固定5万,暂不累积。摇奖效果一般,以后考虑用物理引擎实现1、定义彩票开奖类2、创建开奖画面的对话框。

  10. Cocos2d-x 3.2 大富翁游戏项目开发-第二十三部分 购买彩票

    当角色路过彩票的标志或者停留位置有彩票标志时,弹出购买彩票的对话框,提示购买彩票,已经买过的号码,不显示。当机器对手路过时则直接购买彩票。

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

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

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部