用C++写的基于MFC界面的斗地主小游戏源码,内含详细注释,附带了简单的AI出牌规则,放出来供大家参考交流。vs2010编写,vs2015测试可用,理论上vs05及以上都可正常编译运行。 void Judge::MainFlow() { switch(DataCenter::Instance().GetPlayState()) { case EM_LandHolderBorn_PlayState: { //先检查是否已经问完了 //遍历玩家检查是否已经询问过了,如果已经都问过了,则设置叫分最高的为地主 BOOL bAllAsked = TRUE;//是否已经询问完了 vector & vecPlayer = DataCenter::Instance().GetPlayerList(); for (UINT i = 0; i < vecPlayer.size(); i++) { //统计当前最高分 if (vecPlayer[i].GetLandOwerScore() > m_nCurHighstScore) { m_nCurHighstScore = vecPlayer[i].GetLandOwerScore(); m_pToBeLandOwer = &vecPlayer;[i]; } if (vecPlayer[i].GetLandOwerScore() < 0) { bAllAsked = FALSE; } } //如果已经全部问过了,则设置当前最高分的为地主 if (bAllAsked) { m_pToBeLandOwer->SetLandOwer(TRUE); } //然后根据情况执行询问流程 //如果地主已经产生,则跳入下一阶段 if (NULL != DataCenter::Instance().GetLandOwner()) { m_pCurPlayer = NULL; DataCenter::Instance().SetPlayState(EM_WaitPlayer_PlayState); MainFlow(); return; } //如果当前player为空,设置当前player为地主牌得主 if (m_pCurPlayer == NULL) { m_pCurPlayer = DataCenter::Instance().GetLandOwnerCardHolder(); } //对当前玩家执行地主问询 ASSERT(m_pCurPlayer); m_pCurPlayer->ExcuteCallLandOwer(); } break; case EM_WaitPlayer_PlayState: { //如果游戏已经结束,则执行结束逻辑 BOOL bLandOwerWin = FALSE; if (DataCenter::Instance().IsOver(bLandOwerWin)) { if (bLandOwerWin) { AfxMessageBox(_T("地主赢了!")); } else { AfxMessageBox(_T("佃户赢了!")); } DataCenter::Instance().SetPlayState(EM_WaitToStart_PlayState); //将所有玩家明牌 DataCenter::Instance().ShowAllPlayerCard(); RefreshView(); return; } //如果是出牌阶段而当前player为空,设置当前player为地主,并发予底牌 if (m_pCurPlayer == NULL) { m_pCurPlayer = DataCenter::Instance().GetLandOwner(); DataCenter::Instance().SendOutBottomCard(); RefreshView(); } ASSERT(m_pCurPlayer); m_pCurPlayer->ExcuteCallCardPlay(); } break; } } void Judge::CurPlayerCallScore(int nScore) { if (m_pCurPlayer == NULL) { ASSERT(FALSE); return; } //将玩家选择的分数设置给玩家 m_pCurPlayer->SetLandOwerScore(nScore); //如果当前玩家为空,直接返回 if(m_pCurPlayer == NULL) { return; } if (nScore == 3) { //如果玩家叫了三分,直接设为地主 m_pCurPlayer->SetLandOwer(TRUE); } else { //玩家叫的不是三分,则记下玩家叫的分数 m_pCurPlayer->SetLandOwerScore(nScore); } if (nScore == 0) { CString strWord; strWord.Format(_T("不叫")); m_pCurPlayer->Say(strWord); } else { CString strWord; strWord.Format(_T("%d分"), nScore); m_pCurPlayer->Say(strWord); } //玩家叫分后隐藏叫地主按钮 Judge::Instance().ShowCallLandOwerBtn(FALSE); //切换到下一个玩家,流程继续 SwitchToNextPlayer(); MainFlow(); }
2023-05-16 22:01:18 226KB MFC windows 斗地主
1
DouZero_For_Happy_DouDiZhu: 将DouZero用于欢乐斗地主实战 本项目基于 环境配置请移步项目DouZero 模型默认为WP,更换模型请修改start.py中的模型路径 运行main.py即可 SL (baselines/sl/): 基于人类数据进行深度学习的预训练模型 DouZero-ADP (baselines/douzero_ADP/): 以平均分数差异(Average Difference Points, ADP)为目标训练的Douzero智能体 DouZero-WP (baselines/douzero_WP/): 以胜率(Winning Percentage, WP)为目标训练的Douzero智能体 说明 欢乐斗地主窗口模式最大化运行,屏幕分辨率1920x1080。由于设计像素级操作,运行出错请检查截图区域坐标(位于MyPyQT_Form类中的__i
2023-04-29 13:15:55 16.22MB Python
1
掌中游斗地主(完整版),集合了单机斗地主、网络斗地主、癞子斗地主等,有史以来最有参考价值的源码,虽然运行慢了一点但是功能正常,用的是纯java写的。支持单机和网络对战。分层太多了,jar包也一大堆大体看了一下貌似核心功能有封装。有需要的自己仔细研究一下吧。研究出结果别忘了回来评个论
2023-03-24 22:46:31 26.01MB android源码
1
斗地主核心算法源码讲解 1、定义构造一张牌 2、如何判断一手牌的类型(单,对子,三不带,三带一,四代二等) 3、如何比较两手牌的大小 4、对牌进行排序 5、洗牌和发牌
2023-03-15 18:18:32 173KB java
1
你好,世界 你好,世界新项目模板。
2023-03-14 23:25:56 12.92MB JavaScript
1
易语言斗地主算法模块源码,斗地主算法模块,GetCardType,GetCardValue,GetCardColor,RandCardList,SortCardList,RemoveCardList,GetCardLogicValue,CompareCard,MakeCardData,AnalysebCardData,AnalysebDistributing
1
易语言斗地主算法模块源码
2023-03-04 17:44:08 6KB 模块控件源码
1
java斗地主发牌小程序 牌的生成 随机洗牌 发牌 输出显示 代码只有几十行而已
2023-02-26 19:19:03 27KB java 小程序
1
刚开发完一个javascript+css+html开发的单机牌斗地主游戏半成品,,嘻嘻。。电脑自动出牌还不完整。。。过段时间开发网络对战版的。。本程序用于商用,请先通知我经我同意后再使用。否则本人保留相关法律权力。
2023-02-26 18:49:03 831KB 斗地主游戏 javascript css html
1
项目名称: 基于Qt+mysql的联机斗地主 服务端特点: { 独立的注册服务与游戏服务 { 两个服务可以分开部署,互不影响 } 避免多余连接,限制长连接 { 注册时不论成败,服务端都主动断开连接(因为注册后不一定马上进入游戏) 游戏服务器端只保留登陆成功的玩家的套接字 游戏服务端有在线人数限制 } 准确丰富的牌型 { 加入了以A开头的顺子和连对 加入了以2开头的顺子和连对 } 能处理玩家断线 { 若未开始游戏,同一房间的其他玩家会看到那个玩家的头像消失了 若已开始游戏,则敌对势力获胜 } 出牌时间限制 服务端监视界面提供了类似于"命令行"的详细的日志输出 } 客户端特点: { 有效处理快速连续点击按钮所导致的异常情况 出牌时间限制 提供了游戏时的匿名聊天功能 提供了一键安装包( 针对windows的安装包 ) 提供了单击AI(带有各种音效和智能提示) } 配置文件config.txt解说
2023-01-29 14:26:28 70.47MB C++
1