美文网首页
斗地主个人单机版总结(一)

斗地主个人单机版总结(一)

作者: Boom_coder | 来源:发表于2017-06-22 23:28 被阅读0次

    Boom

    送给自己一个生日礼物。
    厌倦了从头再来,那就不要轻言放弃。

    最近学习了cocos2dx 3.14版本,以及c++的学习,实战是检验真理的唯一的标准,所以写了个单机版的斗地主,来进行练习学习。
    下一个版本,会增加网络版,也就是类似QQ斗地主的功能,三人可以联网斗地主。

    这篇总结也是为大家提供参考,如果有好的想法,实现方法请联系我,共同学习共同进步。

    开发环境: visual studio 2017, cocos2dx 3.14版本 c++

    由于编码问题,会有中文乱码问题,在项目中 AppMicraos.h 文件中提供了转码方法。

    首先,明确项目需求很重要。

    NO BB , SHOW CODE!!!项目代码地址:https://github.com/CoderGLEric/Poker_Game.git

    本项目实现的需求主要有:
    1. 洗牌,随机发给三名玩家扑克
    2.随机一名玩家开始叫地主
    3.抢到的地主,开始出牌
    4.玩家可以正常出牌。

    分析需求:
    一、生成一副扑克牌:
    容器 vector<Poker> v; 放54张牌

    二、洗牌 :

     打乱顺序 
    

    扑克牌: 3 4 5 6 7 8 9 10 11(J) 12(Q) 13(K) 14(尖)15(2) 16(小王) 17(大王)
    花色:红 黑 花 块

    class Poker
    {
    public:
         int mNum;
         int mColor;
    };
    

    三、发牌
    三个人 随机发牌 留三张
    分发给三个人 17轮

    玩家 :Player
    行为: 抓牌、抢地主、获得底牌、打牌

    class Player
    {
    public:
    void catchPoker(PopkerSpirte*pokerSprite);//抓牌        
    void obtainSurplusPokers(PopkerSpirte*pokerSprite);//获得底牌      
    void vieForLairdShip();//抢地主        
    vector<Poker> outPoker(vector<Poker> lastPlayerOutPokers);//出牌
    void refreUI();//刷新牌的位置
    
    public:       
    int playerIdx;//几号玩家标记
    bool mLairdShip;//地主标记
    multimap<int, PopkerSpirte*,greater<int>> mPokers;//持有牌
    
    };
    
    打牌规则:
            PokerRuleError = -1,                          //-1 不符合出牌规则
            PokerRuleDoubleKing,                          //0. 大小王两张最大
            PokerRuleSingle,                              //1.单张:大小顺序
            PokerRuleDouble,                              //2.一对:大小顺序
            PokerRuleTrouble,                             //3.三张:大小顺序
            PokerRuleUltra,                               //4.四张相同  炸弹
            PokerRuleLine,                                //5.顺子:(5张)(相同大小比最大)
            PokerRuleDoubleLine,                          //6.双顺:(3连对)(相同大小比最大 )
            PokerRuleTroubleWithSingle,                   //7.三带一张单牌
            PokerRuleTroubleWithDouble,                   //8.三带一对                            
            PokerRuleUltraWithTwoSingle,                  //9.四带二张单牌 
            PokerRuleUltraWithTwoDouble,                  //10.四带两队
            PokerRulePlane                                //11飞机   6  8 10 张牌
    
    

    四、 出牌: 所选的牌属于哪种类型? (是单张,对,顺子。。。。。。)
    //判断所选的牌属于那种类型

            //判断所选的牌属于那种类型
            static PokerRuleType checkPoker(const vector<Poker> &pokers);
            //比较牌的大小
            static bool compare(const vector<Poker> &last, const vector<Poker> &now);
    

    判断所剩牌数,mPokers.empty() == true; 牌全部出完,获胜,游戏结束

    项目缺点总结:1.未实现,不抢地主功能。
    2.未实现,提示出牌功能, 也未实现机器人出牌功能,如果实现提示功能,机器人功能相应也很好实现。
    3.UI 上一些动画未实现。
    4.未实现重新开始游戏。

    下一版本期望:
    1.首先完成未完成功能。
    2.完成网络版,也就是类似QQ斗地主的功能,三人可以联网斗地主。
    3.增加一些UI动画。

    一个小项目,做了大概一周的时间,项目虽小,用新学的语言,学习到很多,而且也把一些未注意的点也注意到。

    希望,欢迎大家积极提供意见,相互学习。谢谢。

    注意:


    image.png

    相关文章

      网友评论

          本文标题:斗地主个人单机版总结(一)

          本文链接:https://www.haomeiwen.com/subject/ktdqcxtx.html