本發(fā)明屬于不完全信息的計算機博弈領(lǐng)域,具體涉及一種用于橋牌計算機博弈的叫牌數(shù)據(jù)庫構(gòu)建方法。
背景技術(shù):
:橋牌是一種深受人們喜愛的智力游戲,包含叫牌和打牌兩個階段。在叫牌階段,叫牌各方根據(jù)某種約定的叫牌體系表達自己的牌型與牌力,進而商定合適的定約。橋牌計算機博弈利用計算機程序?qū)崿F(xiàn)自動叫牌和打牌,屬于不完全信息博弈領(lǐng)域;自動叫牌一直被認為是橋牌計算機博弈系統(tǒng)設計的難點問題之一;導致橋牌計算機博弈系統(tǒng)自動叫牌模塊復雜化的主要因素包括:(1)信息不完全;(2)叫牌過程受到對方干擾;(3)叫牌體系的不完備性和二義性;(4)叫牌體系難以利用計算機語言描述。在現(xiàn)有技術(shù)中,Ginsberg,M.L.提出了一種蒙特卡洛叫牌方法(參見,Ginsberg,M.L.(2001).Gib:《Imperfectinformationinacomputationallychallenginggame》,JournalofArtificialIntelligenceResearch,2001,),其主要步驟包括:(1)給定一個叫牌數(shù)據(jù)庫Z,可選的叫品集合B;(2)構(gòu)造與歷史叫牌一致的牌局的集合D;(3)對于B中的任一叫品b、D中的任一牌局d,根據(jù)叫牌數(shù)據(jù)庫Z確定在選擇的叫品b之后的最終定約,并利用雙明求解器來評價其得分,記為s(b,d);(4)返回使得∑ds(b,d)最大的叫品d;其中叫牌數(shù)據(jù)庫Z由一系列規(guī)則構(gòu)成;該技術(shù)的主要缺點在于:采用基于規(guī)則的方式實現(xiàn)叫牌數(shù)據(jù)庫,使得叫牌數(shù)據(jù)庫難以進行檢索、增加和修改。技術(shù)實現(xiàn)要素:該技術(shù)的整體思路為將橋牌的叫牌規(guī)則利用關(guān)系型數(shù)據(jù)表達出來,并提供基于這種表達方式的檢索和擴展方法,用于橋牌計算機博弈初始階段叫牌;首先設計關(guān)系型叫牌數(shù)據(jù)庫表結(jié)構(gòu)并建立可以擴展的叫牌數(shù)據(jù)庫,叫牌數(shù)據(jù)庫表中除內(nèi)置了標準的自然叫牌體系和精確叫牌體系外,還可以擴展到任意一種叫牌體系;其次公布了一種基于叫牌數(shù)據(jù)庫的精確匹配叫牌方法,該方法根據(jù)叫牌信息和本人的牌型及點力從叫牌數(shù)據(jù)庫中搜索合適的叫品;在沒有找到匹配的叫品時,系統(tǒng)通過人機交互的方式輸入人類專家的叫品并根據(jù)人類專家的叫品擴展叫牌數(shù)據(jù)庫;(1)關(guān)系型叫牌數(shù)據(jù)庫表結(jié)構(gòu)如表1:表1叫牌數(shù)據(jù)庫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:當兩種及以上叫品都滿足條件時,選擇優(yōu)先級大的叫品;注10:0表示不確定;注11:0表示沒有限制,1表示方塊張數(shù)小于草花張數(shù),2表示方塊張數(shù)大于或者等于草花張數(shù);注12:0表示沒有限制,1表示黑桃張數(shù)小于紅心張數(shù),2表示黑桃張數(shù)大于或者等于紅心張數(shù)。(2)叫牌數(shù)據(jù)庫精確匹配及動態(tài)擴展方法:輸入:OurSystem表示我方叫牌體系,OppSystem表示對方叫牌體系,MyCard表示本人的牌的集合,HistoryBid表示歷史叫品隊列,HumanBid表示人類專家叫品;輸出:MyBid表示本人即將開出的叫品;步驟1、初始化:根據(jù)MyCard計算本人的大牌點力pt、草花張數(shù)club、方塊張數(shù)diamond、紅心張數(shù)heart、黑桃張數(shù)spade;如果diamond>=club,則dvc設置為2;如果diamond<club,則dvc設置為1;如果spade>=heart,則svh設置為2;如果spade<heart,則svh設置為1;設HistoryBidND為HistoryBid隊列中小于80的元素集合,設置maxbid為集合HistoryBidND中元素的最大值;步驟2、根據(jù)HistoryBid確定叫牌類型BidType;步驟3、叫牌數(shù)據(jù)庫精確比配:如果BidType=1,轉(zhuǎn)步驟3.1;如果BidType=2,轉(zhuǎn)步驟3.2;BidType=3,轉(zhuǎn)步驟3.3;BidType=4,轉(zhuǎn)步驟3.4;BidType=5,轉(zhuǎn)步驟3.5;BidType=6,轉(zhuǎn)步驟3.6;如果BidType的值不在集合{1,2,3,4,5,6}中,則轉(zhuǎn)步驟3.7;步驟3.1、根據(jù)以下語句生成SQL查詢語句searchstr:sprintf_s(searchstr,sizeof(searchstr),"select*frombidsystemwheresystem=’%s’andBidType=1and%d*PMin>=PMin*PMinand%d*PMax<=PMax*PMaxand%d*CMin>=CMin*CMinand%d*CMax<=CMax*CMaxand%d*DMin>=DMin*DMinand%d*DMax<=DMax*DMaxand%d*HMin>=HMin*HMinand%d*HMax<=HMax*HMaxand%d*SMin>=SMin*SMinand%d*SMax<=SMax*SMaxand%d*DvsC=DvsC*DvsCand%d*SvsH=SvsH*SvsHorderbyPrioritydesc",OurSystem,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);根據(jù)searchstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行查詢;如果存在滿足條件的記錄,則將MyBid的值設置為第一條記錄的Bid字段值并返回;如果沒有滿足條件的記錄,則轉(zhuǎn)步驟4;步驟3.2、從HistoryBid中獲得同伴開叫叫品bid1,根據(jù)以下語句生成SQL查詢語句searchstr:sprintf_s(searchstr,sizeof(searchstr),"select*frombidsystemwheresystem=’%s’andBidType=2andPOpenBid='%s'and%d*PMin>=PMin*PMinand%d*PMax<=PMax*PMaxand%d*CMin>=CMin*CMinand%d*CMax<=CMax*CMaxand%d*DMin>=DMin*DMinand%d*DMax<=DMax*DMaxand%d*HMin>=HMin*HMinand%d*HMax<=HMax*HMaxand%d*SMin>=SMin*SMinand%d*SMax<=SMax*SMaxand%d*DvsC=DvsC*DvsCand%d*SvsH=SvsH*SvsHorderbyPrioritydesc",OurSystem,bid1,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);根據(jù)searchstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行查詢;如果沒有滿足條件的記錄,則轉(zhuǎn)步驟4;如果存在滿足條件的記錄,則將bid設置為第一條記錄的Bid字段值;如果bid<=maxbid,則設置Mybid為0并返回;如果bid>maxbid,則設置Mybid的值為bid并返回;步驟3.3、從HistoryBid中獲得本人開叫叫品bid2和同伴應叫叫品bid3,根據(jù)以下語句生成SQL查詢語句searchstr:sprintf_s(searchstr,sizeof(searchstr),"select*frombidsystemwheresystem=’%s’andBidType=3andPOpenBid=%dandPResponseBid=%dand%d*PMin>=PMin*PMinand%d*PMax<=PMax*PMaxand%d*CMin>=CMin*CMinand%d*CMax<=CMax*CMaxand%d*DMin>=DMin*DMinand%d*DMax<=DMax*DMaxand%d*HMin>=HMin*HMinand%d*HMax<=HMax*HMaxand%d*SMin>=SMin*SMinand%d*SMax<=SMax*SMaxand%d*DvsC=DvsC*DvsCand%d*SvsH=SvsH*SvsHorderbyPrioritydesc",OurSystem,bid2,bid3,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);根據(jù)searchstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行查詢;如果沒有滿足條件的記錄,則轉(zhuǎn)步驟4;如果存在滿足條件的記錄,則將bid設置為第一條記錄的Bid字段值;如果bid<=maxbid,則設置Mybid為0并返回;如果bid>maxbid,則設置Mybid的值為bid并返回;步驟3.4、從HistoryBid中獲得對方最新的非Pass叫品bid4,根據(jù)以下語句生成SQL查詢語句searchstr:sprintf_s(searchstr,sizeof(searchstr),"select*frombidsystemwheresystem='%s'andBidType=4andOppBid=%dand%d*PMin>=PMin*PMinand%d*PMax<=PMax*PMaxand%d*CMin>=CMin*CMinand%d*CMax<=CMax*CMaxand%d*DMin>=DMin*DMinand%d*DMax<=DMax*DMaxand%d*HMin>=HMin*HMinand%d*HMax<=HMax*HMaxand%d*SMin>=SMin*SMinand%d*SMax<=SMax*SMaxand%d*DvsC=DvsC*DvsCand%d*SvsH=SvsH*SvsHorderbyPrioritydesc",OurSystem,bid4,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);根據(jù)searchstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行查詢;如果存在滿足條件的記錄,則將MyBid的值設置為第一條記錄的Bid字段值并返回;如果沒有滿足條件的記錄,則轉(zhuǎn)步驟4;步驟3.5、從HistoryBid中獲得同伴開叫叫品bid1、本人應叫叫牌bid5、開叫方再叫叫品bid6,根據(jù)以下語句生成SQL查詢語句searchstr:sprintf_s(searchstr,sizeof(searchstr),"select*frombidsystemwheresystem='%s'andBidType=5andPOpenBid=%dandPResponseBid=%dandPOpenBid2=%dand%d*PMin>=PMin*PMinand%d*PMax<=PMax*PMaxand%d*CMin>=CMin*CMinand%d*CMax<=CMax*CMaxand%d*DMin>=DMin*DMinand%d*DMax<=DMax*DMaxand%d*HMin>=HMin*HMinand%d*HMax<=HMax*HMaxand%d*SMin>=SMin*SMinand%d*SMax<=SMax*SMaxand%d*DvsC=DvsC*DvsCand%d*SvsH=SvsH*SvsHorderbyPrioritydesc",OurSystem,bid1,bid5,bid6,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);根據(jù)searchstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行查詢;如果沒有滿足條件的記錄,則轉(zhuǎn)步驟4;如果存在滿足條件的記錄,則將bid設置為第一條記錄的Bid字段值;如果bid<=maxbid,則設置Mybid為0并返回;如果bid>maxbid,則設置Mybid的值為bid并返回;步驟3.6、從HistoryBid中獲得同伴爭叫叫品bid7,根據(jù)以下語句生成SQL查詢語句searchstr:sprintf_s(searchstr,sizeof(searchstr),"select*frombidsystemwheresystem='%s'andBidType=6andPCompetiveBid=%dand%d*PMin>=PMin*PMinand%d*PMax<=PMax*PMaxand%d*CMin>=CMin*CMinand%d*CMax<=CMax*CMaxand%d*DMin>=DMin*DMinand%d*DMax<=DMax*DMaxand%d*HMin>=HMin*HMinand%d*HMax<=HMax*HMaxand%d*SMin>=SMin*SMinand%d*SMax<=SMax*SMaxand%d*DvsC=DvsC*DvsCand%d*SvsH=SvsH*SvsHorderbyPrioritydesc",OurSystem,bid7,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);根據(jù)searchstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行查詢;如果沒有滿足條件的記錄,則轉(zhuǎn)步驟4;如果存在滿足條件的記錄,則將bid設置為第一條記錄的Bid字段值;如果bid<=maxbid,則設置Mybid為0并返回;如果bid>maxbid,則設置Mybid的值為bid并返回;步驟3.7、設置Mybid的值為HumanBid并返回;步驟4、叫牌數(shù)據(jù)庫動態(tài)擴展:如果BidType=1,轉(zhuǎn)步驟4.1;如果BidType=2,轉(zhuǎn)步驟4.2;BidType=3,轉(zhuǎn)步驟4.3;BidType=4,轉(zhuǎn)步驟4.4;BidType=5,轉(zhuǎn)步驟4.5;BidType=6,轉(zhuǎn)步驟4.6;步驟4.1、根據(jù)以下語句生成SQL語句insertstr:sprintf_s(insertstr,sizeof(insertstr),"INSERTINTObidsystem(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);根據(jù)insertstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行更新,設置Mybid的值為HumanBid并返回;步驟4.2、根據(jù)以下語句生成SQL語句insertstr:sprintf_s(insertstr,sizeof(insertstr),"INSERTINTObidsystem(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);根據(jù)insertstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行更新,設置Mybid的值為HumanBid并返回;步驟4.3、根據(jù)以下語句生成SQL語句insertstr:sprintf_s(insertstr,sizeof(insertstr),"INSERTINTObidsystem(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);根據(jù)insertstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行更新,設置Mybid的值為HumanBid并返回;步驟4.4、根據(jù)以下語句生成SQL語句insertstr:sprintf_s(insertstr,sizeof(insertstr),"INSERTINTObidsystem(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);根據(jù)insertstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行更新,設置Mybid的值為HumanBid并返回;步驟4.5、根據(jù)以下語句生成SQL語句insertstr:sprintf_s(insertstr,sizeof(insertstr),"INSERTINTObidsystem(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);根據(jù)insertstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行更新,設置Mybid的值為HumanBid并返回;步驟4.6、根據(jù)以下語句生成SQL語句insertstr:sprintf_s(insertstr,sizeof(insertstr),"INSERTINTObidsystem(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);根據(jù)insertstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行更新,設置Mybid的值為HumanBid并返回。具體實施方式下面以標準自然叫牌體系為例詳細說明將本發(fā)明的具體實施方式。首先將標準自然叫牌體系的叫牌規(guī)則加入到叫牌數(shù)據(jù)庫bidsystem中,例如,表2給出了叫牌數(shù)據(jù)庫的部分紀錄。表2叫牌數(shù)據(jù)庫部分紀錄SystemBidBidTypePOpenBidPResponseBidPOpenBid2OppBIdPCompetiveBidPriorityPMinPMaxCMinCMaxDMinDMaxHMinHMaxSMinSMaxDvsCSvsHZR0100110000000000ZR111112213333040400ZR111112213322444400ZR111112214000040410ZR121112212233040400ZR121112210040040420ZR122111600040030300ZR132111600000400000ZR142111600000034000設置OurSystem為“ZR”,設置OppSystem為“ZR”,輸入本人的牌的集合MyCard,歷史叫品隊列HistoryBid。步驟1、初始化:根據(jù)MyCard計算本人的大牌點力pt、草花張數(shù)club、方塊張數(shù)diamond、紅心張數(shù)heart、黑桃張數(shù)spade;如果diamond>=club,則dvc設置為2;如果diamond<club,則dvc設置為1;如果spade>=heart,則svh設置為2;如果spade<heart,則svh設置為1;設HistoryBidND為HistoryBid隊列中小于80的元素集合,設置maxbid為集合HistoryBidND中元素的最大值。步驟2、根據(jù)HistoryBid確定叫牌類型BidType。步驟3、叫牌數(shù)據(jù)庫精確比配:如果BidType=1,轉(zhuǎn)步驟3.1;如果BidType=2,轉(zhuǎn)步驟3.2;BidType=3,轉(zhuǎn)步驟3.3;BidType=4,轉(zhuǎn)步驟3.4;BidType=5,轉(zhuǎn)步驟3.5;BidType=6,轉(zhuǎn)步驟3.6;如果BidType的值不在集合{1,2,3,4,5,6}中,則轉(zhuǎn)步驟3.7。步驟3.1、根據(jù)以下語句生成SQL查詢語句searchstr:sprintf_s(searchstr,sizeof(searchstr),"select*frombidsystemwheresystem=’%s’andBidType=1and%d*PMin>=PMin*PMinand%d*PMax<=PMax*PMaxand%d*CMin>=CMin*CMinand%d*CMax<=CMax*CMaxand%d*DMin>=DMin*DMinand%d*DMax<=DMax*DMaxand%d*HMin>=HMin*HMinand%d*HMax<=HMax*HMaxand%d*SMin>=SMin*SMinand%d*SMax<=SMax*SMaxand%d*DvsC=DvsC*DvsCand%d*SvsH=SvsH*SvsHorderbyPrioritydesc",OurSystem,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);根據(jù)searchstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行查詢;如果存在滿足條件的記錄,則將MyBid的值設置為第一條記錄的Bid字段值并返回;如果沒有滿足條件的記錄,則轉(zhuǎn)步驟4。步驟3.2、從HistoryBid中獲得同伴開叫叫品bid1,根據(jù)以下語句生成SQL查詢語句searchstr:sprintf_s(searchstr,sizeof(searchstr),"select*frombidsystemwheresystem=’%s’andBidType=2andPOpenBid='%s'and%d*PMin>=PMin*PMinand%d*PMax<=PMax*PMaxand%d*CMin>=CMin*CMinand%d*CMax<=CMax*CMaxand%d*DMin>=DMin*DMinand%d*DMax<=DMax*DMaxand%d*HMin>=HMin*HMinand%d*HMax<=HMax*HMaxand%d*SMin>=SMin*SMinand%d*SMax<=SMax*SMaxand%d*DvsC=DvsC*DvsCand%d*SvsH=SvsH*SvsHorderbyPrioritydesc",OurSystem,bid1,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);根據(jù)searchstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行查詢;如果沒有滿足條件的記錄,則轉(zhuǎn)步驟4;如果存在滿足條件的記錄,則將bid設置為第一條記錄的Bid字段值;如果bid<=maxbid,則設置Mybid為0并返回;如果bid>maxbid,則設置Mybid的值為bid并返回。步驟3.3、從HistoryBid中獲得本人開叫叫品bid2和同伴應叫叫品bid3,根據(jù)以下語句生成SQL查詢語句searchstr:sprintf_s(searchstr,sizeof(searchstr),"select*frombidsystemwheresystem=’%s’andBidType=3andPOpenBid=%dandPResponseBid=%dand%d*PMin>=PMin*PMinand%d*PMax<=PMax*PMaxand%d*CMin>=CMin*CMinand%d*CMax<=CMax*CMaxand%d*DMin>=DMin*DMinand%d*DMax<=DMax*DMaxand%d*HMin>=HMin*HMinand%d*HMax<=HMax*HMaxand%d*SMin>=SMin*SMinand%d*SMax<=SMax*SMaxand%d*DvsC=DvsC*DvsCand%d*SvsH=SvsH*SvsHorderbyPrioritydesc",OurSystem,bid2,bid3,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);根據(jù)searchstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行查詢;如果沒有滿足條件的記錄,則轉(zhuǎn)步驟4;如果存在滿足條件的記錄,則將bid設置為第一條記錄的Bid字段值;如果bid<=maxbid,則設置Mybid為0并返回;如果bid>maxbid,則設置Mybid的值為bid并返回。步驟3.4、從HistoryBid中獲得對方最新的非Pass叫品bid4,根據(jù)以下語句生成SQL查詢語句searchstr:sprintf_s(searchstr,sizeof(searchstr),"select*frombidsystemwheresystem='%s'andBidType=4andOppBid=%dand%d*PMin>=PMin*PMinand%d*PMax<=PMax*PMaxand%d*CMin>=CMin*CMinand%d*CMax<=CMax*CMaxand%d*DMin>=DMin*DMinand%d*DMax<=DMax*DMaxand%d*HMin>=HMin*HMinand%d*HMax<=HMax*HMaxand%d*SMin>=SMin*SMinand%d*SMax<=SMax*SMaxand%d*DvsC=DvsC*DvsCand%d*SvsH=SvsH*SvsHorderbyPrioritydesc",OurSystem,bid4,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);根據(jù)searchstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行查詢;如果存在滿足條件的記錄,則將MyBid的值設置為第一條記錄的Bid字段值并返回;如果沒有滿足條件的記錄,則轉(zhuǎn)步驟4。步驟3.5、從HistoryBid中獲得同伴開叫叫品bid1、本人應叫叫牌bid5、開叫方再叫叫品bid6,根據(jù)以下語句生成SQL查詢語句searchstr:sprintf_s(searchstr,sizeof(searchstr),"select*frombidsystemwheresystem='%s'andBidType=5andPOpenBid=%dandPResponseBid=%dandPOpenBid2=%dand%d*PMin>=PMin*PMinand%d*PMax<=PMax*PMaxand%d*CMin>=CMin*CMinand%d*CMax<=CMax*CMaxand%d*DMin>=DMin*DMinand%d*DMax<=DMax*DMaxand%d*HMin>=HMin*HMinand%d*HMax<=HMax*HMaxand%d*SMin>=SMin*SMinand%d*SMax<=SMax*SMaxand%d*DvsC=DvsC*DvsCand%d*SvsH=SvsH*SvsHorderbyPrioritydesc",OurSystem,bid1,bid5,bid6,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);根據(jù)searchstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行查詢;如果沒有滿足條件的記錄,則轉(zhuǎn)步驟4;如果存在滿足條件的記錄,則將bid設置為第一條記錄的Bid字段值;如果bid<=maxbid,則設置Mybid為0并返回;如果bid>maxbid,則設置Mybid的值為bid并返回。步驟3.6、從HistoryBid中獲得同伴爭叫叫品bid7,根據(jù)以下語句生成SQL查詢語句searchstr:sprintf_s(searchstr,sizeof(searchstr),"select*frombidsystemwheresystem='%s'andBidType=6andPCompetiveBid=%dand%d*PMin>=PMin*PMinand%d*PMax<=PMax*PMaxand%d*CMin>=CMin*CMinand%d*CMax<=CMax*CMaxand%d*DMin>=DMin*DMinand%d*DMax<=DMax*DMaxand%d*HMin>=HMin*HMinand%d*HMax<=HMax*HMaxand%d*SMin>=SMin*SMinand%d*SMax<=SMax*SMaxand%d*DvsC=DvsC*DvsCand%d*SvsH=SvsH*SvsHorderbyPrioritydesc",OurSystem,bid7,pt,pt,club,club,diamond,diamond,heart,heart,spade,spade,dvc,svh);根據(jù)searchstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行查詢;如果沒有滿足條件的記錄,則轉(zhuǎn)步驟4;如果存在滿足條件的記錄,則將bid設置為第一條記錄的Bid字段值;如果bid<=maxbid,則設置Mybid為0并返回;如果bid>maxbid,則設置Mybid的值為bid并返回。步驟3.7、輸入人類專家叫品HumanBid,設置Mybid的值為HumanBid并返回。步驟4、叫牌數(shù)據(jù)庫動態(tài)擴展:如果BidType=1,轉(zhuǎn)步驟4.1;如果BidType=2,轉(zhuǎn)步驟4.2;BidType=3,轉(zhuǎn)步驟4.3;BidType=4,轉(zhuǎn)步驟4.4;BidType=5,轉(zhuǎn)步驟4.5;BidType=6,轉(zhuǎn)步驟4.6。步驟4.1、根據(jù)以下語句生成SQL語句insertstr:sprintf_s(insertstr,sizeof(insertstr),"INSERTINTObidsystem(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);根據(jù)insertstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行更新,輸入人類專家叫品HumanBid,設置Mybid的值為HumanBid并返回。步驟4.2、根據(jù)以下語句生成SQL語句insertstr:sprintf_s(insertstr,sizeof(insertstr),"INSERTINTObidsystem(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);根據(jù)insertstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行更新,輸入人類專家叫品HumanBid,設置Mybid的值為HumanBid并返回。步驟4.3、根據(jù)以下語句生成SQL語句insertstr:sprintf_s(insertstr,sizeof(insertstr),"INSERTINTObidsystem(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);根據(jù)insertstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行更新,輸入人類專家叫品HumanBid,設置Mybid的值為HumanBid并返回。步驟4.4、根據(jù)以下語句生成SQL語句insertstr:sprintf_s(insertstr,sizeof(insertstr),"INSERTINTObidsystem(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);根據(jù)insertstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行更新,輸入人類專家叫品HumanBid,設置Mybid的值為HumanBid并返回。步驟4.5、根據(jù)以下語句生成SQL語句insertstr:sprintf_s(insertstr,sizeof(insertstr),"INSERTINTObidsystem(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);根據(jù)insertstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行更新,輸入人類專家叫品HumanBid,設置Mybid的值為HumanBid并返回。步驟4.6、根據(jù)以下語句生成SQL語句insertstr:sprintf_s(insertstr,sizeof(insertstr),"INSERTINTObidsystem(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);根據(jù)insertstr表示的SQL語句對叫牌數(shù)據(jù)庫bidsystem進行更新,輸入人類專家叫品HumanBid,設置Mybid的值為HumanBid并返回。當前第1頁1 2 3