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动画。
一个小项目,做了大概一周的时间,项目虽小,用新学的语言,学习到很多,而且也把一些未注意的点也注意到。
希望,欢迎大家积极提供意见,相互学习。谢谢。
注意: