VC++开发的单机版麻将游戏:
游戏中自己设定的类:
————————————————————————————
1.玩家自身麻将与处理一个类(CWanjia)
玩家牌的种类(手中的牌,打出的牌,抓的新牌,别人打的牌)
玩家的操作(吃、碰、杠,出牌,整理)
别人打的牌判断是否能吃、碰、胡、杠,自身是否能杠、胡
2.桌面牌墙与其处理一个类(CZuoMaj)
牌墙(4个方向)
操作(洗牌,整理发给4个方向的牌,发下一张牌,杠牌(取最后一张))
3.考虑胡牌一个类(返回听牌的牌)(主要递归)(CMajHu)
把玩家手中的牌给这个类处理,返回能胡的牌
操作(考虑七对的算法,考虑小胡(递归剔出3张的组合,如果剩下4张标明可能听牌)。。。。。)
剩下4张牌之后的判断
4.电脑思考(以组合最大效益为依据(3张组合其次二张组合最后一张牌算其最差的一张))
4.1基类(CBasicThink)
给一组牌传进去给类处理,得出要出的牌或者是否能吃、碰、杠
核心属性(3张组合的分数,2张组合的分数(都已最大为主)递归)
4.2电脑算法不同而不同
目前只做了一个考虑自身牌做出判断的算法(CCmpThink)
准备继续做几个详细的算法(把因素考虑多些(如出了的牌,大胡的因素)未完成)(CCleverThink)
——————————————————————————————
游戏的基本运行
——————————————————————————-————
运行前会先洒色子,根据色子与庄家给各玩家初始化手中的牌
1.初始化(根据庄家和色子数给每个人发12张牌)
2.牌墙发牌给庄家(m_nActive活动状态给庄家)
3.根据活动状态玩家是否是出牌状态(m_nState==1):如果是电脑,让其思考最差的一张牌并出牌,如果是人就让其自行选择(相应时间内没出牌就自动出刚抓的新牌(m_nNewPai))
4.根据玩家出的牌判断各玩家的优先级,优先级最大的玩家操作并把活动状态给他,(如果是人就等待其是否操作,时间内没响应就自动弃权)
5.如果有玩家操作了就返回第3步,如果没有玩家操作就进行第6步
6.如果没有玩家对刚出的牌操作就牌墙发牌给下一玩家,再返回第3步。
7.如果有人胡牌就统计分数,如果牌墙剩余的牌不到10张就流局,分数不变,游戏也结束。
源码下载地址:点击下载
备用下载地址:点击下载
![](https://i-blog.csdnimg.cn/blog_migrate/3057d4c066a7a0f197f758147667c978.png)