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

来源:互联网 发布:什么梳子对头发好 知乎 编辑:程序博客网 时间:2024/04/30 10:41

<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出牌和跟牌过程中,第二个和第三个参数很有意思。要出的牌,也就是要跟的牌。

 

   


 

0 0