棋牌游戏效果

本文介绍了棋牌游戏开发中遇到的一些特效技巧,包括扑克牌翻转特效的实现、如何模拟真实发牌过程以及圆形进度条的设计方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近期做了几款棋牌类游戏,在游戏中遇到了一些特效的问题,网上也很少有案例和源代码摸索了很久才搞定,故在这里简单的介绍一下自己的心得,留给以后的自己和后人,个人原创,不喜勿喷,如果你觉得有问题,欢迎提出。

一.      扑克牌翻转特效。

意思就是我们看到的一张扑克牌从中间翻转,由扑克牌的背面转向正面。

首先我们去创建一张需要翻转的扑克牌:

Auto mycard = UICard::create(0xFF,1);

UICard是扑克牌空间,继承于Sprite,用16进制的数字来表示扑克牌的数字和颜色。

然后我们需要创建的是动作:

首先创建一个移动的动作:

Auto move = MoveTo::create(0.5f,Point(x,x));

再创建一个动作Sequence:

Sequence *seq = Sequence::create(DelayTime::create(0.3f),OrbitCamera::create (0.3f,1,0,0,-90,0,0),Hide::create(),CallFunN::create([=](Node*obj)

{

      UICard::card = (UICard*)obj;

   Card = updateCard(ox01);

   Card->runAction(Sequence::create(Show::create(),OribitCamera::create          (0.3f,1,0,90,-90,0,0),NULL));

}

),NULL);

     auto ani = Sequence::create(move,seq,NULL);

     mycard->runAction(ani);

解释:这个ani动作是先让扑克牌翻转90度,然后把扑克牌的数字更新,再让扑克牌转回来,就可以完成整个特效了。

 

 

 

二.      如何让扑克牌一张一张发牌,就如我们现实生活中的发牌一样,等到第一个人的整个发牌动作完成之后,再发第二个人的牌。刚开始的时候弄了不行,其实很简单,注意到是运用到一个动作结束回调函数CCCallFuncND,利用这个函数就可以达到这个效果,下面用简短的代码来描述一下:

Void main()

{

  UICard*    S_card[20];//定义一个数组

  for(int i=0;i<20;i++)

{

          S_card[i] = UICard::Create(oxFF,1);.

          S_card[i]->setposition(Point(x,x));

}

dispathCardsCallback(NULL,(void*)0);

}

 

Void dispathCardsCallback(CCNode* pSende,(void*)args)

{

      int num = (int )args;

float speed = 0.15;

num++;

if(num>20)

return;

      switch(num%4)

{

       Case 1:

        {

              Auto  move = MoveTo::create(int ,Point);

              Auto  seq = Sequence::Create(move,CCCallFuncND::create(this,callfuncND_selector(dispathCardsCallback),(void*)num,NULL));

S_card[num]->runAction(seq);

}break;

      Case 2:

        {

              Auto  move = MoveTo::create(int ,Point);

              Auto  seq = Sequence::Create(move,CCCallFuncND::create(this,callfuncND_selector(dispathCardsCallback),(void*)num,NULL));

S_card[num]->runAction(seq);

}break;

Case 3:

        {

              Auto  move = MoveTo::create(int ,Point);

              Auto  seq = Sequence::Create(move,CCCallFuncND::create(this,callfuncND_selector(dispathCardsCallback),(void*)num,NULL));

S_card[num]->runAction(seq);

}break;

Case 4:

        {

              Auto  move = MoveTo::create(int ,Point);

              Auto  seq = Sequence::Create(move,CCCallFuncND::create(this,callfuncND_selector(dispathCardsCallback),(void*)num,NULL));

S_card[num]->runAction(seq);

}break;

 

}

}

这个例子是针对4人牛牛来的,对于不同的项目要做出相应的修改,不可直接照抄,这里提供的只是方法和原理。利用回调函数和迭代完成整个发牌效果。

 

 

三.      圆形进度条

对于长条形的进度条见到的特别多,实现起来也很容易,在cocostdios上就可以直接造一个出来,可是圆环状的进度条就不行了,下面就简单的介绍一下:

m_progress = ProgressTimer::create(Sprite::create(“”));

m_progress->setpositon(point);

m_progress->setPercentage(0);//这里是设置初始进度

m_progress->setType(ProgressTmer::Type::RADIAL);//设置圆形类型

m_progress->setMidPoint(vec2::ANCHOR_MIDDLE);

m_progress->setReverseProgress(false);

m_progress->runAction(ProgressTo::create(30,100));//参数:时间,进度

this->addChild(m_progress);

       这样就完成了圆环状的进度条,可以是减少也可以是增加的,这个原理和扇形进度条的原理是一样的,不同的是一个是圆环状的图片另一个可能是圆形的图片而已。

lua还有一个写法:

 local left = cc.ProgressTimer:create(cc.Sprite:create("bg/jishikuang.png")) 
    left:setType(cc.PROGRESS_TIMER_TYPE_RADIAL)
    -- 设置显示位置
    left:setPosition(cc.p(99/2, 101/2))
    local to1 = cc.ProgressFromTo:create(ft, 100,0)
    -- 运行动作
    left:runAction(cc.Repeat:create(to1,1))
    left:setReverseDirection(false)
    -- 添加到层当中
    self.Image_kuang:addChild(left)

【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于深度强化学习的德州扑克AI算法优化python源码+项目说明+模型.zip 本论文题目为基于深度强化学习的德州扑克AI算法优化 结果储存在result.xlsx,以每个图的数据进行呈现,包括中期报告和论文的数据 本论文三个实验环境为: Limit leduc holdem poker(有限注德扑简化版): 文件夹为limit_leduc,写代码的时候为了简化,使用的环境命名为NolimitLeducholdemEnv,但实际上是limitLeducholdemEnv Nolimit leduc holdem poker(无限注德扑简化版): 文件夹为nolimit_leduc_holdem3,使用环境为NolimitLeducholdemEnv(chips=10) Limit holdem poker(有限注德扑) 文件夹为limitholdem,使用环境为LimitholdemEnv 本论文所设计的agent位于"/实验环境/agents/DeepCFRagent3.py",是由DeepCFRagent改进来的agent,在实验中,我们与CFR,CFR+,MCCFR,DeepCFR进行对比,Limit leduc holdem poker和Nolimit leduc holdem poker使用exploitability进行评估(exploitability衡量算法与纳什均衡的距离),Limit holdem poker环境过大,使用与RandomAgent作战的reward作为评估指标 本论文工作量: 1.本论文所使用的agent,800+行 2.本论文复现出的CFR,CFR+,MCCFR,DeepCFR算法,CFR,CFR+,MCCFR,每个算法400行左右,DeepCFR为600行,以上算法都未开源 3.本文使用的环境,我们使用RLcard作为我们的底层,每个环境大约为500行左右 4.对算法的效果进行测试,主要为含有test的py文件,此部分大约为500行左右 ......
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值