{"id":13793919,"url":"https://github.com/songbaoming/DouDiZhu","last_synced_at":"2025-05-12T20:31:17.512Z","repository":{"id":29316155,"uuid":"32849554","full_name":"songbaoming/DouDiZhu","owner":"songbaoming","description":"AI斗地主游戏","archived":false,"fork":false,"pushed_at":"2019-07-30T03:58:58.000Z","size":590,"stargazers_count":316,"open_issues_count":1,"forks_count":142,"subscribers_count":19,"default_branch":"master","last_synced_at":"2024-11-18T08:55:44.899Z","etag":null,"topics":["c-plus-plus","doudizhu","game","mfc","windows"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/songbaoming.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-03-25T07:35:02.000Z","updated_at":"2024-11-13T10:11:16.000Z","dependencies_parsed_at":"2022-09-01T06:00:10.783Z","dependency_job_id":null,"html_url":"https://github.com/songbaoming/DouDiZhu","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songbaoming%2FDouDiZhu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songbaoming%2FDouDiZhu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songbaoming%2FDouDiZhu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songbaoming%2FDouDiZhu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/songbaoming","download_url":"https://codeload.github.com/songbaoming/DouDiZhu/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253816731,"owners_count":21968874,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-plus-plus","doudizhu","game","mfc","windows"],"created_at":"2024-08-03T23:00:33.319Z","updated_at":"2025-05-12T20:31:15.434Z","avatar_url":"https://github.com/songbaoming.png","language":"C++","funding_links":[],"categories":["Open-Source Projects"],"sub_categories":["Dou Dizhu Projects"],"readme":"# 程序简介\n\n这是一个简单的人工智能单机斗地主游戏\n\n# 程序的实现\n\n## 程序中使用到的类\n\n#### Card：一副扑克牌。\n\n    接口：洗牌、抹牌及剩余牌数。\n    \n#### CardGroup：一组牌型，如：单张、对子、顺子、炸弹等等。\n\n    属性：包含牌序号集合、对应牌的权值集合、该组牌的类型、权值、牌的数量；\n    接口：添加/删除序号牌、重置结构内属性、静态序号到权值转换。\n    \n#### Player：玩家\n\n    属性：手牌集合、手牌牌型集合、选牌集合、出牌集合、是否不出牌、玩家总分数；\n    接口：包括分析叫地主分数、分析手牌、选牌、分析是否出牌（或跟牌）等。\n    \n#### Game：游戏主程序\n\n    属性：玩家、地主方、当前出牌方、本局基本分、倍率、地主专属牌集合等；\n    接口：相关控制游戏进行函数，及没个步骤通知界面更新。\n    \n#### Scene：游戏界面\n\n    包含游戏界面元素及游戏主界面缓冲去生成及窗口绘制等功能。\n    \n## 人工智能部分实现\n\n#### 分析选牌牌型\n\n1. 先分析选牌是否为王炸，如不是则进行第二步；\n2. 找出选牌中相同权值的最大数量；\n3. 根据最大数量判断是否为相应的有效牌型。\n\n#### 分析手牌并拆分成有效牌型\n\n1. 判断牌型集合是否为空，不为空就不需要分析直接返回，否则进行第二步；\n2. 由当前玩家手牌（0-53格式）生成权值牌集合（3-17格式）；\n3. 先拆分出权值牌集合中的基本牌型，分析的顺序为：王炸 → 炸弹 → 单顺 → 双顺 → 三顺、三条 → 一对 → 单张；\n4. 然后又基本牌型尝试组合成更复杂的牌型：三带一、四带二、飞机等。\n\n#### 出牌/跟牌分析\n\n1. 是否需要重新分析手牌，分析完成后进行第2步；\n2. 直接出牌（最后出牌方为自己）；\n\n    *\t如手牌数为2，则先出王炸、炸弹、数量最多、权值最大的牌；\n    *\t如下家为我方，其手牌数为一，则出最小单牌；如下家为敌方，其手牌数为一，尽量不出单牌，或出最大单牌；\n    *\t其他正常出牌顺序为：单牌(A以上的牌尽量不直接出)→对子→双顺→单顺→三条、三带一、飞机\n\n3.\t跟友方牌（最后出牌方为我方）\n\n    *\t手牌把数≤2，应出对应牌或炸弹，否则过牌\n    *\t上家为地主且未跟牌，过牌\n    *\t有对应牌，且权值小于14，则跟，炸弹不跟；\n    \n4.\t跟敌方牌（最后出牌方为敌方）\n    *\t有对应牌就跟，\n    *\t没有就拆，\n    *   再着用炸弹，否则就过牌\n\n    ##### 拆牌原则：\n```\n    单牌时：\n    \n        1.拆单顺数量大于5的\n        2.拆三条\n        3.拆对\n        \n    对子时：\n    \n        1.拆三条\n        2.拆三顺数量大于3的\n    \n    单顺：\n    \n        1.拆更长单顺\n    \n    三条或三带一：\n    \n        1.拆三顺（先判断数量大于3的）\n    \n    飞机：\n    \n        1.拆三顺数量大、权值更大的\n```\n`拆牌后一定要清空牌型集合`\n\n# License\n[MIT](https://github.com/songbaoming/DouDiZhu/blob/master/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsongbaoming%2FDouDiZhu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsongbaoming%2FDouDiZhu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsongbaoming%2FDouDiZhu/lists"}