[發明專利]一種用于橋牌計算機博弈的叫牌數據庫構建方法在審
| 申請號: | 201611034072.3 | 申請日: | 2016-11-23 |
| 公開(公告)號: | CN106776758A | 公開(公告)日: | 2017-05-31 |
| 發明(設計)人: | 段琢華 | 申請(專利權)人: | 電子科技大學中山學院 |
| 主分類號: | G06F17/30 | 分類號: | G06F17/30 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 528400 *** | 國省代碼: | 廣東;44 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 用于 橋牌 計算機 博弈 叫牌 數據庫 構建 方法 | ||
1.一種用于橋牌計算機博弈的叫牌數據庫構建方法,用于橋牌計算機博弈初始階段叫牌;首先設計關系型叫牌數據庫表結構并建立可以擴展的叫牌數據庫,叫牌數據庫表中除內置了標準的自然叫牌體系和精確叫牌體系外,還可以擴展到任意一種叫牌體系;其次公布了一種基于叫牌數據庫的精確匹配叫牌方法,該方法根據叫牌信息和本人的牌型及點力從叫牌數據庫中搜索合適的叫品;在沒有找到匹配的叫品時,系統通過人機交互的方式輸入人類專家的叫品并根據人類專家的叫品擴展叫牌數據庫;
(1)關系型叫牌數據庫表結構如表1:
表1 叫牌數據庫bidsystem
其中,“C”表示草花,“D”表示方塊,“H”表示紅心,“S”表示黑桃,“NT”表示無將;
注1:“ZR”表示自然叫牌體系,“JQ”表示精確叫牌體系,此外,還可以定義其它叫牌體系;
注2:Bid 、POpenBid 、PResponseBid 、POpenBid2、OppBid 、PCompetiveBid 等字段的取值范圍為集合{0, 11, 12, 13, 14, 15, 21, 22, 23, 24, 25, 31, 32, 33, 34, 35, 41, 42, 43, 44, 45, 51, 52, 53, 54, 55, 61, 62, 63, 64, 65, 71, 72, 73, 74, 75, 80, 90},其中0表示“Pass”,80表示“Double”,90表示“ReDouble”,11表示“1C”,12表示“1D”,13表示“1H”,14表示“1S”,15表示“1NT”,21表示“2C”,22表示“2D”,23表示“2H”,24表示“2S”,25表示“2NT”,31表示“3C”,32表示“3D”,33表示“3H”,34表示“3S”,35表示“3NT”,41表示“4C”,42表示“4D”,43表示“4H”,44表示“4S”,45表示“4NT”,51表示“5C”,52表示“5D”,53表示“5H”,54表示“5S”,55表示“5NT”,61表示“6C”,62表示“6D”,63表示“6H”,64表示“6S”,65表示“6NT”,71表示“7C”,72表示“7D”,73表示“7H”,74表示“7S”,75表示“7NT”;
注3:1表示“開叫”,2表示“應叫”,3表示“開叫方再叫”,4表示“爭叫”,5表示“應叫方再叫”,6表示“爭叫應叫”;
注4:當BidType=2時,該字段表示同伴開叫叫品;當BidType=3時,該字段表示本人開叫的叫品;
注5:當BidType=3時,該字段表示同伴應叫叫品;當BidType=5時,該字段表示本人應叫叫品;
注6:當BidType=5時,該字段表示開叫方再叫的叫品;
注7:當BidType=4時,該字段表示對方不是Pass的最新叫品;
注8:當BidType=6時,該字段表示同伴爭叫叫品;
注9:當兩種及以上叫品都滿足條件時,選擇優先級大的叫品;
注10: 0表示不確定;
注11:0表示沒有限制,1表示方塊張數小于草花張數,2表示方塊張數大于或者等于草花張數;
注12:0表示沒有限制,1表示黑桃張數小于紅心張數,2表示黑桃張數大于或者等于紅心張數;
(2)叫牌數據庫精確匹配及動態擴展方法:
輸入:OurSystem表示我方叫牌體系,OppSystem表示對方叫牌體系, MyCard表示本人的牌的集合,HistoryBid表示歷史叫品隊列,HumanBid表示人類專家叫品;
輸出:MyBid表示本人即將開出的叫品;
步驟1、初始化:
根據MyCard計算本人的大牌點力pt、草花張數club、方塊張數diamond、紅心張數heart、黑桃張數spade;
如果diamond>=club,則dvc設置為2;如果diamond<club,則dvc設置為1;
如果spade>=heart,則svh設置為2;如果spade<heart,則svh設置為1;
設HistoryBidND為HistoryBid隊列中小于80的元素集合,設置maxbid為集合HistoryBidND中元素的最大值;
步驟2、根據HistoryBid確定叫牌類型BidType;
步驟3、叫牌數據庫精確比配:如果BidType=1,轉步驟3.1;如果BidType=2,轉步驟3.2;BidType=3,轉步驟3.3;BidType=4,轉步驟3.4;BidType=5,轉步驟3.5;BidType=6,轉步驟3.6;如果BidType的值不在集合{1,2,3,4,5,6}中,則轉步驟3.7;
步驟3.1、
根據以下語句生成SQL查詢語句searchstr:
sprintf_s(searchstr,sizeof(searchstr),"select * from bidsystem where system=’%s’ and BidType=1 and %d*PMin>=PMin*PMin and %d*PMax<=PMax*PMax and %d*CMin>=CMin*CMin and %d*CMax<=CMax*CMax and %d*DMin>=DMin*DMin and %d*DMax<=DMax*DMax and %d*HMin>=HMin*HMin and %d*HMax<=HMax*HMax and %d*SMin>=SMin*SMin and %d*SMax<=SMax*SMax and %d*DvsC=DvsC*DvsC and %d*SvsH=SvsH*SvsH order by Priority desc",OurSystem,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);
根據searchstr表示的SQL語句對叫牌數據庫bidsystem進行查詢;
如果存在滿足條件的記錄,則將MyBid的值設置為第一條記錄的Bid字段值并返回;如果沒有滿足條件的記錄,則轉步驟4;
步驟3.2、
從HistoryBid中獲得同伴開叫叫品bid1,根據以下語句生成SQL查詢語句searchstr:
sprintf_s(searchstr,sizeof(searchstr),"select * from bidsystem where system=’%s’ and BidType=2 and POpenBid='%s' and %d*PMin>=PMin*PMin and %d*PMax<=PMax*PMax and %d*CMin>=CMin*CMin and %d*CMax<=CMax*CMax and %d*DMin>=DMin*DMin and %d*DMax<=DMax*DMax and %d*HMin>=HMin*HMin and %d*HMax<=HMax*HMax and %d*SMin>=SMin*SMin and %d*SMax<=SMax*SMax and %d*DvsC=DvsC*DvsC and %d*SvsH=SvsH*SvsH order by Priority desc", OurSystem , bid1,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);
根據searchstr表示的SQL語句對叫牌數據庫bidsystem進行查詢;
如果沒有滿足條件的記錄,則轉步驟4;
如果存在滿足條件的記錄,則將bid設置為第一條記錄的Bid字段值;
如果bid<=maxbid,則設置Mybid為0并返回;
如果bid>maxbid,則設置Mybid的值為bid并返回;
步驟3.3、
從HistoryBid中獲得本人開叫叫品bid2和同伴應叫叫品bid3,根據以下語句生成SQL查詢語句searchstr:
sprintf_s(searchstr,sizeof(searchstr),"select * from bidsystem where system=’%s’ and BidType=3 and POpenBid=%d and PResponseBid=%d and %d*PMin>=PMin*PMin and %d*PMax<=PMax*PMax and %d*CMin>=CMin*CMin and %d*CMax<=CMax*CMax and %d*DMin>=DMin*DMin and %d*DMax<=DMax*DMax and %d*HMin>=HMin*HMin and %d*HMax<=HMax*HMax and %d*SMin>=SMin*SMin and %d*SMax<=SMax*SMax and %d*DvsC=DvsC*DvsC and %d*SvsH=SvsH*SvsH order by Priority desc", OurSystem ,bid2,bid3,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);
根據searchstr表示的SQL語句對叫牌數據庫bidsystem進行查詢;
如果沒有滿足條件的記錄,則轉步驟4;
如果存在滿足條件的記錄,則將bid設置為第一條記錄的Bid字段值;
如果bid<=maxbid,則設置Mybid為0并返回;
如果bid>maxbid,則設置Mybid的值為bid并返回;
步驟3.4、
從HistoryBid中獲得對方最新的非Pass叫品bid4,根據以下語句生成SQL查詢語句searchstr:
sprintf_s(searchstr,sizeof(searchstr),"select * from bidsystem where system='%s' and BidType=4 and OppBid=%d and %d*PMin>=PMin*PMin and %d*PMax<=PMax*PMax and %d*CMin>=CMin*CMin and %d*CMax<=CMax*CMax and %d*DMin>=DMin*DMin and %d*DMax<=DMax*DMax and %d*HMin>=HMin*HMin and %d*HMax<=HMax*HMax and %d*SMin>=SMin*SMin and %d*SMax<=SMax*SMax and %d*DvsC=DvsC*DvsC and %d*SvsH=SvsH*SvsH order by Priority desc", OurSystem ,bid4,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);
根據searchstr表示的SQL語句對叫牌數據庫bidsystem進行查詢;
如果存在滿足條件的記錄,則將MyBid的值設置為第一條記錄的Bid字段值并返回;
如果沒有滿足條件的記錄,則轉步驟4;
步驟3.5、
從HistoryBid中獲得同伴開叫叫品bid1、本人應叫叫牌bid5、開叫方再叫叫品bid6,根據以下語句生成SQL查詢語句searchstr:
sprintf_s(searchstr,sizeof(searchstr),"select * from bidsystem where system='%s' and BidType=5 and POpenBid=%d and PResponseBid=%d and POpenBid2=%d and %d*PMin>=PMin*PMin and %d*PMax<=PMax*PMax and %d*CMin>=CMin*CMin and %d*CMax<=CMax*CMax and %d*DMin>=DMin*DMin and %d*DMax<=DMax*DMax and %d*HMin>=HMin*HMin and %d*HMax<=HMax*HMax and %d*SMin>=SMin*SMin and %d*SMax<=SMax*SMax and %d*DvsC=DvsC*DvsC and %d*SvsH=SvsH*SvsH order by Priority desc",OurSystem, bid1, bid5, bid6, pt, pt, club, club, diamond, diamond, heart, heart, spade, spade,dvc,svh);
根據searchstr表示的SQL語句對叫牌數據庫bidsystem進行查詢;
如果沒有滿足條件的記錄,則轉步驟4;
如果存在滿足條件的記錄,則將bid設置為第一條記錄的Bid字段值;
如果bid<=maxbid,則設置Mybid為0并返回;
如果bid>maxbid,則設置Mybid的值為bid并返回;
步驟3.6、
從HistoryBid中獲得同伴爭叫叫品bid7,根據以下語句生成SQL查詢語句searchstr:
sprintf_s(searchstr,sizeof(searchstr),"select * from bidsystem where system='%s' and BidType=6 and PCompetiveBid=%d and %d*PMin>=PMin*PMin and %d*PMax<=PMax*PMax and %d*CMin>=CMin*CMin and %d*CMax<=CMax*CMax and %d*DMin>=DMin*DMin and %d*DMax<=DMax*DMax and %d*HMin>=HMin*HMin and %d*HMax<=HMax*HMax and %d*SMin>=SMin*SMin and %d*SMax<=SMax*SMax and %d*DvsC=DvsC*DvsC and %d*SvsH=SvsH*SvsH order by Priority desc", OurSystem, bid7,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);
根據searchstr表示的SQL語句對叫牌數據庫bidsystem進行查詢;
如果沒有滿足條件的記錄,則轉步驟4;
如果存在滿足條件的記錄,則將bid設置為第一條記錄的Bid字段值;
如果bid<=maxbid,則設置Mybid為0并返回;
如果bid>maxbid,則設置Mybid的值為bid并返回;
步驟3.7、設置Mybid的值為HumanBid并返回;
步驟4、叫牌數據庫動態擴展:
如果BidType=1,轉步驟4.1;如果BidType=2,轉步驟4.2;BidType=3,轉步驟4.3;BidType=4,轉步驟4.4;BidType=5,轉步驟4.5;BidType=6,轉步驟4.6;
步驟4.1、
根據以下語句生成SQL語句insertstr:
sprintf_s(insertstr,sizeof(insertstr), "INSERT INTO bidsystem (system, BidType, PMin, PMax, CMin, CMax, DMin, DMax, HMin, HMax, SMin, SMax, DvsC, SvsH, Bid) VALUES (’%s’, 1, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, 0, 0, HumanBid)", OurSystem, pt,pt,club,club,diamond,diamond,heart,heart,spade,spade);
根據insertstr表示的SQL語句對叫牌數據庫bidsystem進行更新,設置Mybid的值為HumanBid并返回;
步驟4.2、
根據以下語句生成SQL語句insertstr:
sprintf_s(insertstr,sizeof(insertstr), "INSERT INTO bidsystem (system, BidType, POpenBid, PMin, PMax, CMin, CMax, DMin, DMax, HMin, HMax, SMin, SMax, DvsC, SvsH, Bid) VALUES (’%s’, 2, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, 0, 0, HumanBid)", OurSystem, bid1,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade);
根據insertstr表示的SQL語句對叫牌數據庫bidsystem進行更新,設置Mybid的值為HumanBid并返回;
步驟4.3、
根據以下語句生成SQL語句insertstr:
sprintf_s(insertstr,sizeof(insertstr), "INSERT INTO bidsystem (system, BidType, POpenBid, PResponseBid, PMin, PMax, CMin, CMax, DMin, DMax, HMin, HMax, SMin, SMax, DvsC, SvsH, Bid) VALUES (’%s’, 3, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, 0, 0, HumanBid)", OurSystem, bid2, bid3,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade);
根據insertstr表示的SQL語句對叫牌數據庫bidsystem進行更新,設置Mybid的值為HumanBid并返回;
步驟4.4、
根據以下語句生成SQL語句insertstr:
sprintf_s(insertstr,sizeof(insertstr), "INSERT INTO bidsystem (system, BidType, OppBid, PMin, PMax, CMin, CMax, DMin, DMax, HMin, HMax, SMin, SMax, DvsC, SvsH, Bid) VALUES (’%s’, 4, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, 0, 0, HumanBid)", OurSystem, bid4,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade);
根據insertstr表示的SQL語句對叫牌數據庫bidsystem進行更新,設置Mybid的值為HumanBid并返回;
步驟4.5、
根據以下語句生成SQL語句insertstr:
sprintf_s(insertstr,sizeof(insertstr), "INSERT INTO bidsystem (system, BidType, POpenBid, PResponseBid, POpenBid2,PMin, PMax, CMin, CMax, DMin, DMax, HMin, HMax, SMin, SMax, DvsC, SvsH, Bid) VALUES (’%s’, 5, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, 0, 0, HumanBid)", OurSystem, bid1, bid5, bid6, pt, pt, club, club, diamond, diamond, heart, heart, spade, spade);
根據insertstr表示的SQL語句對叫牌數據庫bidsystem進行更新,設置Mybid的值為HumanBid并返回;
步驟4.6、
根據以下語句生成SQL語句insertstr:
sprintf_s(insertstr,sizeof(insertstr), "INSERT INTO bidsystem (system, BidType, PCompetiveBid, PMin, PMax, CMin, CMax, DMin, DMax, HMin, HMax, SMin, SMax, DvsC, SvsH, Bid) VALUES (’%s’, 6, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, 0, 0, HumanBid)", OurSystem, bid7,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade);
根據insertstr表示的SQL語句對叫牌數據庫bidsystem進行更新,設置Mybid的值為HumanBid并返回。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于電子科技大學中山學院,未經電子科技大學中山學院許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201611034072.3/1.html,轉載請聲明來源鉆瓜專利網。





