C圍棋程序?qū)崿F(xiàn)報(bào)告_第1頁(yè)
C圍棋程序?qū)崿F(xiàn)報(bào)告_第2頁(yè)
C圍棋程序?qū)崿F(xiàn)報(bào)告_第3頁(yè)
C圍棋程序?qū)崿F(xiàn)報(bào)告_第4頁(yè)
C圍棋程序?qū)崿F(xiàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1、軟件背景介紹圍棋是一項(xiàng)廣有裨益的智力競(jìng)技運(yùn)動(dòng),它集休閑娛樂(lè)、陶冶性情、修心養(yǎng)性于一身,是 中華文化的瑰寶,是人類(lèi)智慧的最高象征之一。圍棋經(jīng)歷了數(shù)千年,久盛不衰,且至今還在 不斷發(fā)展?,F(xiàn)在的人工智能科學(xué)研究在它面前顯得很是稚嫩, 因而值得將它作為重要的研究 對(duì)象。 在人工智能領(lǐng)域內(nèi),博弈是很重要的一個(gè)研究分支。通過(guò)對(duì)博弈的研究,可以解決很 多實(shí)際問(wèn)題, 使計(jì)算機(jī)智能向人類(lèi)智能邁進(jìn)。 計(jì)算機(jī)國(guó)際象棋和計(jì)算機(jī)圍棋一直是人工智能 的熱門(mén)課題, 而圍棋程序的編制被稱作人工智能的 “試金石”,是人工智能技術(shù)的一大難題, 它將會(huì)在今后相當(dāng)長(zhǎng)的時(shí)期內(nèi)哺育著人工智能科學(xué)的成長(zhǎng)。計(jì)算機(jī)圍棋是計(jì)算機(jī)博弈研究的一

2、個(gè)重要分支, 是當(dāng)前人工智能研究的熱點(diǎn)之一, 一直 以來(lái)吸引著大量的研究人員, 產(chǎn)生了較大的社會(huì)影響和學(xué)術(shù)影響。 由于圍棋變化復(fù)雜、 棋理 深?yuàn)W, 是一種高智能的活動(dòng), 因而圍棋的計(jì)算機(jī)博弈設(shè)計(jì)難度較大, 同時(shí)計(jì)算機(jī)圍棋熱點(diǎn)問(wèn) 題的研究為人工智能帶來(lái)了嶄新的方法和理論。計(jì)算機(jī)圍棋的研究和實(shí)現(xiàn)需要多門(mén)學(xué)科的知識(shí)交叉,至少會(huì)涉及到圍棋、計(jì)算機(jī)、數(shù)學(xué)、生物、邏輯學(xué)、軍事學(xué)、教育、心理學(xué)乃至哲學(xué)等領(lǐng)域,因此其發(fā)展具有重要的研究?jī)r(jià)值和 應(yīng)用價(jià)值。本系統(tǒng)是基于C+編程語(yǔ)言的立足于“人一人”圍棋對(duì)弈系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),具有圍棋 記譜、打譜、查看定式、最終評(píng)分等功能,是一個(gè)適宜在計(jì)算機(jī)上聯(lián)網(wǎng)的“人一人”的對(duì)弈

3、系統(tǒng)。圍棋勝負(fù)判斷與局面分析功能子系統(tǒng)是圍棋對(duì)弈系統(tǒng)的重要組成部分。圍棋勝負(fù)自動(dòng)判斷是一個(gè)實(shí)用的圍棋對(duì)弈系統(tǒng)所應(yīng)具有的功能。 在現(xiàn)實(shí)的圍棋勝負(fù)判斷中, 往往需要一個(gè)裁 判員通過(guò)做棋來(lái)判斷棋局最終的勝負(fù)。 如果有一個(gè)客觀、 準(zhǔn)確的圍棋自動(dòng)判斷勝負(fù)系統(tǒng), 一 方面可以省時(shí)省力, 一方面可以做到客觀公正。但實(shí)現(xiàn)一個(gè)具有人 (裁判員)一樣的判斷能 力的勝負(fù)判斷系統(tǒng), 存在著許多困難和挑戰(zhàn)。 本系統(tǒng)通過(guò)建立棋局的記錄來(lái)判斷棋盤(pán)上每一 點(diǎn)的歸屬,從而確定棋局中雙方地域,故能夠?qū)μ岬羲雷雍蟮慕K局棋盤(pán)用中國(guó)規(guī)則判斷勝負(fù); 通過(guò)建立棋子的影響模型、 力學(xué)模型以及度量公式, 將棋子向棋盤(pán)其它部分輻射的影響量化,

4、從而判斷對(duì)弈雙方的影響領(lǐng)域。論文主要介紹了圍棋對(duì)弈系統(tǒng)中勝負(fù)判斷與局面分析功能子系統(tǒng)具有的功能,論述了子系統(tǒng)的開(kāi)發(fā)和實(shí)現(xiàn)的過(guò)程。該圍棋游戲的主界面如圖1。圖1圍棋主界面、核心算法思想該圍棋軟件主要是由以下三種算法組成的:1、使每個(gè)棋子周?chē)a(chǎn)生某種影響,這種影響隨著距離的增加而減少,用一定的公式計(jì) 算疊加種影響,以判斷形勢(shì)和估計(jì)著點(diǎn)的價(jià)值。這與圍棋的棋理相通,即對(duì)于每個(gè)棋子可估 算其“勢(shì)力” 。 此中就有著名的“氣2位”理論。2、建立模式庫(kù),貯存了大量模式(定式、棋形等),以供匹配。這其實(shí)涉及到圍棋的許多棋諺與棋理。如“二子頭必扳” 、“鎮(zhèn)以飛應(yīng)” 、“斷從一邊長(zhǎng)” 、三子正中、點(diǎn)方等等。這 些

5、都是根據(jù)圍棋的具體情況而設(shè)計(jì)的。3、對(duì)目標(biāo)明確的局部,用人工智能中的搜索法探求其結(jié)果。(一)圍棋局面分析功能的實(shí)現(xiàn)這里定義了Stone的數(shù)據(jù)結(jié)構(gòu),用于記錄每一點(diǎn)與棋盤(pán)上已落棋子的距離和受到的影響值,定義如下:Public Type StoneValue As IntegerDistance As IntegerEnd Type需要定義顯示地域時(shí)的棋譜Public Map(1 To 19, 1 To 19) As Stone,用于記錄最后的累加影響。其中Map上每一點(diǎn)Map(i,j)的Dista nee與value的關(guān)系為:Value = 2的(6 - Distance)次方。Map(i,j)的

6、最終影響要通過(guò)計(jì)算影響模型,遞減定律以及反射 定律,經(jīng)過(guò)度量公式計(jì)算,大于定值A(chǔ)的點(diǎn)顯示為黑棋地域,小于-A的點(diǎn)顯示為白棋地域。(二) 影響模型由于棋盤(pán)上的每個(gè)棋子都要對(duì)盤(pán)面發(fā)出影響,設(shè)黑棋影響為正,白棋影響為負(fù)。棋盤(pán)上 的每一點(diǎn)要受到多個(gè)棋子的累加影響,其中,受到該點(diǎn)最近的棋子影響最大,依次遞減。設(shè)這影響在棋子的緊鄰(距離為1)為最大值32,并隨距離增加而按比例衰減,衰減因子為1/2。就是距離每增加1時(shí)影響值減半。此時(shí)一黑子對(duì)其周?chē)椛涞挠绊懭鐖D2。11 2 11 2 4 2 11 2 4 8 4 2 11 2 4 8 16 8 4 2 11 2 4 8 16 32 16 8 4 2 11

7、2 4 8 16 32 64 32 16 8 4 2 11 2 4 8 16 32 16 8 4 2 11 2 4 8 16 8 4 2 131 2 4 8 4 2 11 2 4 2 11 2 11 圖2系統(tǒng)使用的影響模型影響模型的實(shí)現(xiàn),采用循環(huán)嵌套,對(duì)一已落的棋子(i,j),計(jì)算其對(duì)周邊的影響,定義變量row,column,對(duì)于滿足i-6=row=i+6, i-6=column0:受黑的影響強(qiáng)一些;F0時(shí)受黑的影響強(qiáng)一些,該點(diǎn)能被黑方所控制,作為黑方實(shí)地,顯示為黑 方地域,反之,為白棋的勢(shì)力范圍。在顯示中規(guī)定:如果該點(diǎn)所受四個(gè)方向的力均大于0,且F大于20,則該點(diǎn)為黑方勢(shì)力范圍。對(duì)于白方的勢(shì)

8、力范圍有類(lèi)似的判斷規(guī)則。(四)圍棋勝負(fù)的判斷方法所屬空點(diǎn)的總和大于此數(shù)者為勝,小于此數(shù)者為負(fù),等于此數(shù)者為和。三、核心算法流程圖(一)判定雙方的勢(shì)力范圍對(duì)于每一點(diǎn),它受到的總控制力F=F0+F1+F2+F3,當(dāng)丨F丨大于某一數(shù)值n時(shí),將其顯示為地域。當(dāng)F0時(shí)受黑的影響強(qiáng)一些,該點(diǎn)能被黑方所控制,作為黑方實(shí)地,顯示為黑 方地域,反之為白棋的勢(shì)力范圍。在顯示中規(guī)定:如果該點(diǎn)所受四個(gè)方向的力均大于0,且F大于20,則該點(diǎn)為黑方勢(shì)力范圍。 對(duì)于白方的勢(shì)力范圍有類(lèi)似的判斷規(guī)則。雙方的勢(shì)力范圍的實(shí)現(xiàn)流程圖如圖3。雙方下子完畢的棋局,計(jì)算勝負(fù)采用數(shù)子法。先將雙方死子全部清理出盤(pán)外,然后對(duì)一方的活棋(包括活棋

9、圍住的點(diǎn))以子為單位進(jìn)行計(jì)數(shù)。雙方活棋之間的空點(diǎn)各得一半,一個(gè)點(diǎn)即為一子。勝負(fù)的基準(zhǔn)以棋局總點(diǎn)數(shù)的一半180又1/2點(diǎn)為歸本數(shù)。凡一方活棋與影響模型結(jié) 束一-圖3局面分析實(shí)現(xiàn)流程圖(二)判斷圍棋輸贏這里定義了Item的數(shù)據(jù)結(jié)構(gòu),用于記錄每一枚棋子的顏色及搜索的狀態(tài):Public Type ItemsValue As In tegerChecked As Boolea nEnd Type定義終局棋譜數(shù)組:Public m_GameOverMap(1 To 19, 1 To 19) AsItems,終局的每結(jié)點(diǎn)存儲(chǔ)為Item結(jié)構(gòu),記錄每一點(diǎn)的歸屬。對(duì)待盤(pán)棋局(用總數(shù)加1填入黑子是影響范圍內(nèi)遞減定律

10、每一點(diǎn)用循環(huán)掃描,記錄每一點(diǎn)是哪一方的領(lǐng)域。F圖為判斷圍棋勝負(fù)的流程圖。判判斷斷生勝負(fù)負(fù)行數(shù)否圍否確疋該點(diǎn)顏色是黑八、是被同色棋包圍9=919列數(shù)=1是計(jì)為單官計(jì)為單白官總數(shù)減1填入白子結(jié)束是單官為奇數(shù)算度量公式 顯示勢(shì)力 畫(huà)出雙方控制地域m_Map( 19,19)記錄)上總數(shù)減16圖4勝負(fù)判斷實(shí)現(xiàn)流程圖四、源代碼下面給出的是實(shí)現(xiàn)聯(lián)網(wǎng)對(duì)戰(zhàn)游戲的源代碼:#include MyStack.h#include MyList.h#include MyOutFunction.h#pragma once#include using namespace std;#if _MSC_VER 1000#pragm

11、a once#endif / _MSC_VER 1000struct pointint p_x;int p_y;int color;struct _nodepoint data;_node* next;_node* pre;class CChessPospublic:BOOL visit_for_DeadOrLive;BOOL visit_for_DeleteDead;CRect chessman(CPoint point); int nFlag;CPoint point;CChessPos* pLeft;CChessPos* pRight;CChessPos* pTop;CChessPos*

12、 pBottom; CChessPos();virtual CChessPos(); ;#include mscomm.h#include SelectComm.h #include ChessPos.h #if _MSC_VER 1000/x坐標(biāo),1-19間的整數(shù)/y坐標(biāo),1-19間的整數(shù)/所放棋子顏色,1為黑,2為白/訪問(wèn)標(biāo)識(shí),用于遞歸算法/該位置所在矩形區(qū)域/該位置狀態(tài)標(biāo)識(shí)/該位置坐標(biāo)/指向該位置的四個(gè)鄰接點(diǎn)7#pragma once#endif / _MSC_VER 1000const int DIE = 0;/表示空位或死棋const int BLACK = 1; const int

13、 WHITE= 2; const int EDGE = 3; class MyList/黑棋/白棋/邊界以外public:void init();MyList(); virtual MyList(); _node* head; _node* now; _node* tail; int size; void add(_node* newNode); void add(int x, int y,int color);bool isEmpty(); voidprintList();/根據(jù)函數(shù)format定義的格式遍歷鏈表,step記錄結(jié)點(diǎn)遍歷到了第幾個(gè)結(jié)點(diǎn)void printList(void(*f

14、ormat)(void* e,void* steptag),int step);void del();void clearList();/刪除鏈表最后一個(gè)元素/清空鏈表bool searchele(int x, int y);/遍歷鏈表;struct _stateint x;/保存棋盤(pán)中每個(gè)格子的臨時(shí)狀態(tài),以判別處于該位置的棋子是否能存活/在棋盤(pán)中的橫坐標(biāo)int y;int fangxiang;/在棋盤(pán)中的縱坐標(biāo)int color;int footprint;int dead;/處于此格子的棋子可能死亡struct _statenode_state s;_statenode* next;cla

15、ss MyStackpublic:_statenode* head;8int size;MyStack(); virtual MyStack();void init();void push(_state* s); _state*pop();bool isEmpty(); void print();/堆棧大小/初始化/入棧/出棧/判斷是否為空/輸出;ON_COMMAND(ID_APP_ABOUT, OnAppAbout)/ClassWizard將添加和刪除映射宏。/DO NOT EDIT what you see in these blocks of generated code!/AFX_MS

16、G_MAP/基于標(biāo)準(zhǔn)的文件文檔的命令ON_COMMAND(ID_FILE_NEW, CWinApp:OnFileNew)ON_COMMAND(ID_FILE_OPEN, CWinApp:OnFileOpen)/標(biāo)準(zhǔn)的打印設(shè)置命令ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp:OnFilePrintSetup)END_MESSAGE_MAP()public:CAboutDlg();/ Dialog Data/AFX_DA TA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/ Attributespublic:CPoint pointBeg

17、in;/左上角坐標(biāo)int nDistance;/每格間距int nRadium;/點(diǎn)的半徑int r;/圍棋半徑int nCount;/下的數(shù)目CRect m_rectEllipse1919;/當(dāng)前圍棋子所在矩形int nSign2121;int nOldSign2121;/點(diǎn)標(biāo)志/吃掉前的標(biāo)志int nChainRow1920;/存放水平方向的點(diǎn)標(biāo)志之間的關(guān)系int nChainCol2019;int nBorder;/存放豎直方向的點(diǎn)標(biāo)志之間的關(guān)系/棋盤(pán)邊界寬度int nBackSign2121;int nBackTwoTimesBeforeSign2121; /前兩次位置標(biāo)志備份intn

18、BackThreeTimesBeforeSign2121; /前兩次位置標(biāo)志備份/前次位置標(biāo)志備份int nBackOldSign2121;int nBackChainRow1920;int nBackChainCol2019;int nBackCount;int nBackCountTwoTimesBefore;/前兩次統(tǒng)計(jì)備份9CPoint pointForGoPrompt;/下子提示點(diǎn)CPoint pointForRegret;/悔棋按鈕CPoint pointForWhiteCalculate;/顯示統(tǒng)計(jì)時(shí)白棋標(biāo)志的位置CPoint pointForBlackCalculate;CPo

19、int pointForIllegal;/非法提示int nCalculateWhite;/白子統(tǒng)計(jì)int nCalculateBlack;/黑子統(tǒng)計(jì)int nBackCalculateWhite;/白子統(tǒng)計(jì)備份int nBackCalculateBlack;/黑子統(tǒng)計(jì)備份BOOL fIllegal;/非法走步標(biāo)志BOOL fRegretOnlyOnce;/只許悔棋一次/= =/位圖有關(guān)定時(shí)器有關(guān)/= =/CBitmap m_BitmapToRight;CRect m_rectBitmapToRight;int m_nBitmapToRightHeight;int m_nBitmapToRig

20、htWidth;CBitmap m_BitmapToLeft;CRect m_rectBitmapToLeft;int m_nBitmapToLeftHeight;int m_nBitmapToLeftWidth;struct _statenode_state s;_statenode* next;class MyStackpublic:_statenode* head;int size; /堆棧大小MyStack();virtual MyStack();UINT m_timer; /計(jì)時(shí)器標(biāo)志BOOL m_fAlternate;BOOL m_fClear;/ Operationspublic

21、:virtual BOOL OnNewDocument(); virtual void Serialize(CArchive& ar);CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)10/AFX_DA TA_INIT(CAboutDlg)/AFX_DA TA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DA TA_MAP(CAboutDlg)/AFX_DA TA_MAPclass CWQDoc : public C

22、Documentprotected: / create from serialization onlyCWQDoc();DECLARE_DYNCREA TE(CWQDoc)public:virtual BOOL OnNewDocument();virtual void Serialize(CArchive& ar);public:BOOL m_bGameStartEnable;BOOL Initialization();BOOL m_bEnable;UINT nGameMode;UINT nComNum;CMSComm m_MSComm;BOOL reback;int backup_s

23、cene1919;int cur_scene1919;int pre_scene1919;int last_scene1919;#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const; #endifMyList();virtual MyList();_node* head;_node* now;_node* tail;int size;void add(_node* newNode);void add(int x, int y,int color);bool isEm

24、pty();void printList();/根據(jù)函數(shù)format定義的格式遍歷鏈表,step記錄結(jié)點(diǎn)遍歷到了第幾個(gè)結(jié)點(diǎn)void printList(void(*format)(void* e,void* steptag),int step);/開(kāi)始游戲是否有效/新建文檔初始化函數(shù)/判斷是否可以落子/游戲模式/所選擇的串口號(hào)/定義串口對(duì)象m_MSComm /悔棋e(cuò)nable標(biāo)識(shí)/備份前次場(chǎng)景/當(dāng)前場(chǎng)景/前次場(chǎng)景/上次場(chǎng)景11void del(); /刪除鏈表最后一個(gè)元素void clearList();bool searchele(int x, int y);#include PublicS

25、truct.hclass CWeiQipublic:CWeiQi();virtual CWeiQi();public:BOOL TiZi(int x,int y);short GetPointType(int x,int y);void ClearNodes();void Init();void Init2();/小棋盤(pán)void ClearBoardFlag();protected:class CWeiQ1_0View : public CViewprotected:CWeiQ1_0View();DECLARE_DYNCREA TE(CWeiQ1_0View)private:void Draw

26、Chessboard(CDC* pDC,CPoint top_left,COLORREF bkcolor,int ;protected:/AFX_MSG(CWQView)afx_msg void OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnReback();afx_msg void OnUpdateReback(CCmdUI* pCmdUI);afx_msg int OnCreate(LPCREA TESTRUCT lpCreateStruct); afx_msg void OnComm();public:space, int r

27、adius);CChessPos outside;CPoint origin;int nStep;int nHost;CChessPos CurPos1919; virtualCWQDoc();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpCont #endif/虛擬棋子位置,用于處理邊界問(wèn)題/棋盤(pán)初始點(diǎn)/畫(huà)筆跳躍步幅/落子權(quán)標(biāo)志用于存儲(chǔ)棋盤(pán)19X19點(diǎn)位信息const;12void reback_scene(int comeback1919);/當(dāng)前場(chǎng)景恢復(fù)到comebackvoid save_sce

28、ne(int save1919);/保存當(dāng)前場(chǎng)景到savevoid copy_scene(int from1919, int to1919);/復(fù)制場(chǎng)景from到toBOOL compare_scene(int A1919, int B1919);比較場(chǎng)景A和B,相同-true,不同-falseclass CWeiQ1_0Doc : public CDocumentprotected: / create from serialization only CWeiQ1_0Doc();DECLARE_DYNCREA TE(CWeiQ1_0Doc) / Attributes public:virtua

29、l BOOL OnNewDocument(); virtual void Serialize(CArchive& ar);AFX_VIRTUALpublic:bool m_modified;char* m_openedFilename;MyList m_nowlist;int m_qiju2121;MyList m_historylist;int m_radius;int m_space;COLORREF m_bkcolor;CPoint m_topleft;virtual CWeiQ1_0Doc();#ifdef _DEBUGvirtual void AssertValid() co

30、nst;virtual void Dump(CDumpContext& dc) const;struct pointint p_x;/x坐標(biāo),1-19間的整數(shù)int p_y;/y坐標(biāo),1-19間的整數(shù)int color;/所放棋子顏色,1為黑,2為白;void un_visit();void deal_neighbor(CChessPos *mid);void del_dead(CChessPos *dead);BOOL dead_or_live(CChessPos *mid);void change_nHost();CPoint locate(CPoint pt);virtual C

31、WQView();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endif/恢復(fù)各位置訪問(wèn)標(biāo)識(shí)/處理mid周?chē)惿遄?以dead為起點(diǎn)提掉與其相連的同色棋子/判斷mid是死棋還是活棋/轉(zhuǎn)換落子權(quán)/保存棋盤(pán)上剩下的棋子的信息/保存棋盤(pán)要顯示的信息,主要是易于判斷吃子/保存曾經(jīng)走過(guò)的每一步13class MyListpublic:void init();MyList();virtual MyList();_node* head;_node* now;_nod

32、e* tail;int size;void add(_node* newNode);void add(int x, int y,int color);bool isEmpty();void printList();/根據(jù)函數(shù)format定義的格式遍歷鏈表,step記錄結(jié)點(diǎn)遍歷到了第幾個(gè)結(jié)點(diǎn)void printList(void(*format)(void* e,void* steptag),int step);void del();/刪除鏈表最后一個(gè)元素void clearList();/清空列表bool searchele(int x, int y); /搜索鏈表;/ MyOutFuncti

33、on.h: interface for the MyOutFunction class.#endif / _MSC_VER 1000class MyOutFunctionpublic:static bool saveQipu(MyList list,char* fileName);static char* _CStringToChars(CString string );static bool readQipu(MyList& list, char* fileName);static void initQiju(int qiju2121);static bool moni(int qi

34、ju2121, MyList list);static _state* creatState(int x,int y,int color,int fangxiang,int footprint, int dead);/創(chuàng)建一顆棋子static bool isTong(_state go2121,int& x,int& y,int& end); /判斷處于該格子的棋子按某個(gè)方向能否走出該格子/判斷goxy能否存活, 若不能存活, 則將和goxy一起不能存活的子消掉static bool isLive(intgo2121,int x, int y, int color);M

35、yOutFunction();virtual MyOutFunction();#endif#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000struct _state/保存棋盤(pán)中每個(gè)格子的臨時(shí)狀態(tài),以判別處于該位置的棋子是否能存活14int x;int y;int fangxiang;int color;int footprint;int dead;struct _statenode_state s;_statenode* next; ;class MyStackpublic:_statenode* head; intsize;/在棋盤(pán)中的橫

36、坐標(biāo)/在棋盤(pán)中的縱坐標(biāo)/從此格子走向下一格子的方向-1:向右走,2:向左走,3:向上走,4:向下走/此棋子的性質(zhì);0:沒(méi)有棋子,1:黑子,2:白子,3:邊界/是否來(lái)過(guò)試探過(guò)這顆棋子;1:是,0:否/處于此格子的棋子可能死亡/堆棧大小MyStack(); virtualMyStack(); void init();void push(_state* s); _state*pop();bool isEmpty();void print();#if _MSC_VER 1000 #pragmaonce#endif / _MSC_VER 1000 structpointint p_x;int p_y;i

37、nt color;struct _node/入棧/出棧/判斷是否棧為空/x坐標(biāo),1-19間的整數(shù)/y坐標(biāo),1-19間的整數(shù)/所放棋子顏色,1為黑,2為白point data;_node* next;_node* pre; ;class MyListpublic:void init();1516MyList(); virtual MyList();_node* head;_node* now;_node* tail;int size;short GetPointType(int x,int y);void ClearNodes();void Init();void Init2();/小棋盤(pán)voi

38、d ClearBoardFlag();int save5001919; intsaveDigtal5001919;int bak;int board1919;int boardDigtal1919;ChessBoard boardFlag1919; intboard21919;int boardDigtal21919; ChessNode*m_pOpen; ChessNode* m_pClosed; void popClosed(); void pushClosed(void add(_node* newNode);void add(int x, int y,int color);bool i

39、sEmpty();void printList();/根據(jù)函數(shù)format定義的格式遍歷鏈表,step記錄結(jié)點(diǎn)遍歷到了第幾個(gè)結(jié)點(diǎn)void printList(void(*format)(void* e,void* steptag),int step);void del();/刪除鏈表最后一個(gè)元素void clearList();bool searchele(int x, int y);#include PublicStruct.h class CWeiQipublic:CWeiQi(); virtual CWeiQi();public:BOOL TiZi(int x,int y); short

40、 GetPointType(int x,int y); void ClearNodes();void Init();void Init2();/小棋盤(pán)/記錄500步的棋局/棋局第多少步/當(dāng)前步狀態(tài),0:空,1:黑,2:白/右邊小棋盤(pán)用/當(dāng)前步狀態(tài),0:空,1:黑,2:白short x, short y, short type, short index, char* strinfo, short nodeIndex)17int save5001919;int saveDigtal5001919;int bak;/棋局第多少步int boardDigtal1919;ChessBoard board

41、Flag1919;/右邊小棋盤(pán)用int board21919;/當(dāng)前步狀態(tài),0:空,1:黑,2:白int boardDigtal21919;ChessNode* m_pOpen;ChessNode* m_pClosed;void popClosed();void pushClosed( short x, short y, short type, short index, char* strinfo, short nodeIndex ); private:void popOpen();void pushOpen( short x, short y, short type, short index

42、, char* strinfo, short nodeIndex ); BOOL IsNotEmpty(int x,inty);BOOL Search(int x, int y);BOOL CheckInClosed(int x, int y);BOOL SearchOne(int x, int y);public:short m_OPMain;short m_fireCC; ;struct ChessBoardshort sType; short sMA; shortsTR; short sSQ; short sLB;#define MAXSTEP 20 #define MAXPOINT 8

43、0#define MAXSTRLENGTH 2000#define MAXSTRHEADER 300/棋鏈/位置X/位置Y/0,空,1,黑,2,白void ClearBoardFlag();/記錄500步的棋局int board1919;/當(dāng)前步狀態(tài),0:空,1:黑,2:白/讓子數(shù)/棋盤(pán)struct ChessNodeshort x;short y;short type;18short index;/當(dāng)前棋子數(shù)char* strInfo;/說(shuō)明short NodeIndex;/分支索引short* treePos;/所處位置的記錄POINT* pt;/“LB”說(shuō)明點(diǎn)的位置short* lbIn

44、dex;POINT* MApt;/“MA”說(shuō)明點(diǎn)的位置POINT* SQpt;/“SQ”說(shuō)明點(diǎn)的位置POINT* TRpt;/“TR”說(shuō)明點(diǎn)的位置int numChildren;ChessNode* next;public:BOOL TiZi(int x,int y); short GetPointType(int x,int y); void ClearNodes();void Init();void Init2();/小棋盤(pán)void ClearBoardFlag();/記錄500步的棋局int save5001919;int saveDigtal5001919;int bak;/棋局第多少步int board1919;/當(dāng)前步狀態(tài),0:空,1:黑,2:白int boardDigtal1919;ChessBoard boardFlag1919;/右邊小棋盤(pán)用int board21919;/當(dāng)前步狀態(tài),0:空,1:黑,2:白int boardDigtal21919;class CWeiQipublic:CWeiQi(); virtual CWeiQi();public:BOOL TiZi(int x,int y); short GetPointType(int x,int

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論