您的位置:首页 > 其它

从游戏运行过程来分析斗地主设计思路

2014-07-07 17:16 274 查看
<1>第一步

1,进入GameScene构造函数,进行各个数据成员的创建(只是创建这里并没有初始化,各种程序初始化信息的具体实现是在init函数中,由各个init**函数来实现)。

2,与之对应的是析构函数~GameScene(),它完成数据的一些清理工作,在构造函 数中new出来的,那就CC_SAFE_DELETE,通过create()出来并且retain的,那就CC_SAFE_RELEASE。

<2>第二步

1,进入init函数,在其中完成程序信息的具体初始化。

比如: A,初始化背景(这个背景略蛋疼,像素是800,600导致后边屏幕像素适配很麻烦)

           B,创建一副扑克(放在桌子正中间,并且是朝背面摆放)

           C,初始化玩家信息并且设定好位置类型等(这里的玩家不仅包括玩家、电脑、还有底牌、出的牌等)

           D,洗牌(运用数组的randomObject和exchangeObject函数来实现洗牌)

           E,初始化菜单信息。(叫分的、出牌不出的、胜负等菜单,里面的各个菜单项采用局部变量

          并且初始化时将菜单隐藏掉,这样里面的菜单项就隐藏了,因为菜单是父节点,

        父节点都隐藏了,子节点自然就都隐藏了)

           F,初始化NPC不出牌按钮(因为出牌的话,自然就直接把牌出出来了,不出的话就显示一下不出就

         行了,这个也是添加到层中后先隐藏起来)

          G,初始化地主标签(设置默认地主的位置,并且隐藏起来)

          H,开启scheduleUpdate来启动update定时器(从而每一帧都检测游戏当前状态,是发牌、叫分、出牌、还是胜负等状态。其实这个和碰撞检测的有点像,碰撞检测往往也开启这个定时器每一帧都进行碰撞检测,比较好的地方是这种手法的灵活运用,不像我第一次写的一直在考虑权限,比如地主和出牌权限是怎么传递的,把自己都传递蒙了)

<3>第三步

1,这个是比较重要的一步,它驱动着整个游戏的逻辑循环。由构造函数中的m_iState被初始化为0,因此

   定时器一旦开启后,第一步就是游戏开始发牌,发牌的过程中会调用回调函数调整牌的位置。

2,当发完54张牌后,改变m_iState的数值为1,进入第二个游戏状态:叫分。

   玩家叫分void NpcCall(Player* npc,Player* npc1),第二个参数只是为了通知他,当自己叫最大分

   时,他不能再叫分了。

3,叫完地主后,改变游戏状态m_iState为2,即出牌。同时卸下叫分定时器。

4, /**玩家出牌与跟牌**/

   出牌类型分为2种:跟牌和出牌。(当2个Npc都没有出牌时,自己出牌;当有Npc出牌时,自己

   需要跟牌,跟牌最基本的就是要大于之前NPC要出的牌。不管是NPC还是玩家,每出一次牌都会调

   用IsOutPkFinish来判断是否是否有人出完牌,当有人出完牌,立即改变游戏状态m_iState来判断输

   赢)

    出牌过程:

    A,清理上次出的牌。

    B,

    /**NPC出牌与跟牌**/

    A,NpcOutPoker(m_npcTwo,m_arrGenPk,m_npcTwoOut); 

    B,NpcGenPoker(m_npcTwo,m_arrGenPk ,m_npcTwoOut);

   由此可见,Npc出牌和跟牌过程中,第二个和第三个参数很有意思。要出的牌,也就是要跟的牌。

 

   

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: