MFC-C++五子棋課程設(shè)計(jì)報(bào)告_第1頁
MFC-C++五子棋課程設(shè)計(jì)報(bào)告_第2頁
MFC-C++五子棋課程設(shè)計(jì)報(bào)告_第3頁
MFC-C++五子棋課程設(shè)計(jì)報(bào)告_第4頁
MFC-C++五子棋課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上課程設(shè)計(jì)成績考勤成績( %)指導(dǎo)老師評語報(bào)告及程序成績( %)總評成績指導(dǎo)老師簽名: windows程序設(shè)計(jì)課 程 設(shè) 計(jì) 報(bào) 告 學(xué)院(系): 計(jì)算機(jī)科學(xué)與技術(shù)系 班 級: 計(jì)專2班 學(xué)生姓名: 梁劍 學(xué)號 指導(dǎo)教師: 時(shí)間: 從 2010 年1 月18 日 到2010 年1 月22 日專心-專注-專業(yè)摘要1. 能夠利用所學(xué)的基本知識, 設(shè)計(jì)一個(gè)簡單的五子棋序,具有以下功能:數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì);五子棋棋盤的繪制。人機(jī)下棋時(shí),計(jì)算機(jī)下棋算法的設(shè)計(jì)。人機(jī)下棋時(shí),判斷任一方獲勝的算法的設(shè)計(jì)。關(guān)鍵字: MFC編程,Windows程序目錄項(xiàng)目一: 五子棋五子棋1 設(shè)計(jì)目的與要求1

2、.1 設(shè)計(jì)目的1、進(jìn)一步掌握利用Visual C+進(jìn)行程序設(shè)計(jì)的能力;2、進(jìn)一步理解和運(yùn)用面向?qū)ο蟪绦蛟O(shè)計(jì)的思想和方法;3、初步掌握開發(fā)一個(gè)小型實(shí)用系統(tǒng)的基本方法;4、學(xué)會調(diào)試一個(gè)較長程序的基本方法;5、理解Windows程序的運(yùn)行過程;1.2 設(shè)計(jì)內(nèi)容能夠利用所學(xué)的基本知識, 設(shè)計(jì)一個(gè)簡單的學(xué)生信息管理應(yīng)用程序,具有以下功能:數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì);五子棋棋盤的繪制。人機(jī)下棋時(shí),計(jì)算機(jī)下棋算法的設(shè)計(jì)。人機(jī)下棋時(shí),判斷任一方獲勝的算法的設(shè)計(jì)。1.3 設(shè)計(jì)要求整個(gè)程序使用winsocket 函數(shù)做網(wǎng)絡(luò)數(shù)據(jù)收發(fā),基于UDP協(xié)議。可以直接使用Windows API編程(SDK編程),也可以使用MFC編程。本

3、課程設(shè)計(jì)中我們使用的是MFC編程。其具體的設(shè)計(jì)要求如下所述:2 設(shè)計(jì)環(huán)境或器材、原理與說明2.1 設(shè)計(jì)環(huán)境與器材因?yàn)檫x擇使用MFC編程Windows環(huán)境與Microsoft Visual C+ 6.0 編譯環(huán)境;2.2 原理與說明首先利用mfc建立單文檔窗口,在窗口上畫19*19的表格,把每個(gè)表格點(diǎn)的信息存在二維數(shù)組wzq1919中。白棋為1,黑棋為-1,這樣當(dāng)要測是否結(jié)束時(shí)只要查看4個(gè)方向的絕對值是否等于5,就可以判定輸贏了如圖:3.1設(shè)計(jì)過程及程序代碼3.11界面設(shè)計(jì): 圖3-2 五子棋界面設(shè)計(jì)打開應(yīng)用程序時(shí)游戲會自動開始。顯示表格代碼:CMyDoc* pDoc = GetDocument

4、();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here CBrush mybrush1; mybrush1.CreateSolidBrush(RGB(192,192,192); CRect myrect1(0,0,1200,800); pDC->FillRect(myrect1,&mybrush1); /畫棋盤框線 CPen mypen; CPen*myoldPen; mypen.CreatePen(PS_SOLID,1,RGB(0,0,0); myoldPen=pDC->SelectObject(&

5、amp;mypen); for(int i=0;i<19;i+) pDC->MoveTo(40,40+i*20); pDC->LineTo(400,40+i*20); pDC->MoveTo(40+i*20,40); pDC->LineTo(40+i*20,400); /重畫時(shí)顯示存在的棋子 CDC Dc; if(Dc.CreateCompatibleDC(pDC)=FALSE) AfxMessageBox("Can't create DC"); for(int n=0;n<19;n+) for(int m=0;m<19;m

6、+) if(wzqnm=1 /顯示白棋 Dc.SelectObject(m_bmwhite); pDC->BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY); else if(wzqnm=-1) /顯示黑棋 Dc.SelectObject(m_bmblack); pDC->BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY); 3.1.2 人下棋設(shè)計(jì)涉及到OnLButtonDown(UINT nFlags, CPoint point)和OnLButtonUp(UINT nFlags

7、, CPoint point)兩個(gè)函數(shù)了。要用哪一個(gè)或用兩個(gè)?用Down函數(shù)時(shí)是在鼠標(biāo)按下時(shí)放下棋子,可是,要是我們按下后意識到按錯(cuò)了怎么辦;那就改用Up函數(shù),表示當(dāng)鼠標(biāo)鍵松開時(shí)放下棋子。這樣子當(dāng)鼠標(biāo)點(diǎn)下并放開時(shí)界面上會顯示相應(yīng)的棋子。并調(diào)用over函數(shù)判斷輸贏。代碼如下:void CMy3_1View:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC();CDC Dc;if(Dc.CreateCompatible

8、DC(pDC)=FALSE) AfxMessageBox("Can't create DC"); /是否在棋盤內(nèi) if(point.x>30&&point.x<410&&point.y>30&&point.y<410)int px=(point.x-30)/20;int py=(point.y-30)/20;/是否已經(jīng)有棋子if(colorwhite&&wzqpxpy=0)Dc.SelectObject(m_bmwhite);pDC->BitBlt(px*20+32,py*

9、20+32,160,160,&Dc,0,0,SRCCOPY);/表示存在白棋wzqpxpy=1;/檢查是否結(jié)束over(point);/換黑棋下colorwhite=false;else if(wzqpxpy=0)Dc.SelectObject(m_bmblack); pDC->BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);wzqpxpy=-1;over(point);colorwhite=true;CView:OnLButtonUp(nFlags, point);3.1.3 電腦下棋:計(jì)算機(jī)要下棋?就要定位。即搜索棋

10、盤,找出一個(gè)最佳點(diǎn),放下黑棋。實(shí)現(xiàn)的方法是:全盤搜索,并把搜索到的位置,保存在變量。由于有多種情況,我們定義變量如下:CPoint bpointcan4,/這個(gè)位置空,它旁邊有四個(gè)黑棋wpointcan4,/這個(gè)位置空,它旁邊有四個(gè)白棋bpointcan3,/這個(gè)位置空,它的旁邊有三個(gè)黑棋wpointcan3,/這個(gè)位置空,它的旁邊有三個(gè)白棋bpointcan2,/這個(gè)位置空,它的旁邊有兩個(gè)黑棋wpointcan2,/這個(gè)位置空,它的旁邊有兩個(gè)白棋bpointcan1;/不是以上情況,這個(gè)位置空3.1.4搜索最優(yōu)下棋點(diǎn)并在搜索之前都賦值為(-1,-1),然后,進(jìn)行搜索,并把相應(yīng)的值保存在相應(yīng)變

11、量里面,而如果前面已經(jīng)對變量賦值,我們依然賦值,用新值代替舊值。注意:我們只保存最后一個(gè)值,這樣的一個(gè)好處是,避免了每次都從左上角開始,并且它的隨機(jī)性比隨機(jī)函數(shù)還隨機(jī)。全盤搜索完之后,由于上面的變量中至少有一個(gè)已經(jīng)被賦值,即不是(-1,-1),我們可以采用多數(shù)優(yōu)先的方法,讓已經(jīng)有多個(gè)同色棋子的位置先下棋。其原理是,如果已經(jīng)有四個(gè)黑棋,計(jì)算機(jī)再下一個(gè)黑棋就贏了;否則,如果人已經(jīng)有四個(gè)白棋,那么計(jì)算機(jī)就必須放下一個(gè)黑棋,阻止白棋下一步贏;如果已經(jīng)有三個(gè)黑棋,再下一個(gè)黑棋,變成四個(gè);否則,如果已經(jīng)有三個(gè)白棋,下一個(gè)黑棋,破壞它;兩個(gè)棋子的同理;否則,在剛才白棋下的地方,順便找一個(gè)位置,下棋。comp

12、uterdown()函數(shù)如下: /輪到計(jì)算機(jī)下棋void CMy3_1View:computerdown()/把各種情形賦值為如下bpointcan4=(-1,-1);wpointcan4=(-1,-1);bpointcan3=(-1,-1);wpointcan3=(-1,-1);bpointcan2=(-1,-1);wpointcan2=(-1,-1);bpointcan1=(-1,-1); /搜索最好的落棋點(diǎn)for(int i=0;i<19;i+)for(int j=0;j<19;j+)bestputdown(i,j);/判斷放在哪里/棋多的位置優(yōu)先/黑白一樣多時(shí)黑先

13、 /不是-1就表示已經(jīng)被賦值!if(bpointcan4.x!=-1)putdown(bpointcan4);return;else if(wpointcan4.x!=-1)putdown(wpointcan4);return;else if(bpointcan3.x!=-1)putdown(bpointcan3);return;else if(wpointcan3.x!=-1)putdown(wpointcan3);return;else if(bpointcan2.x!=-1) putdown(bpointcan2);return;else if(wpointcan2.x!=-1)putd

14、own(wpointcan2);return;else putdown(bpointcan1);return;上面又有兩個(gè)新函數(shù),分別定義為空函數(shù),如下: /搜索最佳位置void bestputdown(int i,int j);/放下黑棋void putdown(CPoint point);現(xiàn)在,我們就必須對上面兩個(gè)空函數(shù)進(jìn)行定義了。 在指定位置下棋: 由于putdown(CPoint point)函數(shù)的原理非常簡單,我們先說明如下:  /黑棋下void CMy3_1View:putdown(CPoint point)CDC *pDC=GetDC();CDC D

15、c;if(Dc.CreateCompatibleDC(pDC)=FALSE) AfxMessageBox("Can't create DC");Dc.SelectObject(m_bmblack); pDC->BitBlt(point.x*20+32,point.y*20+32,160,160,&Dc,0,0,SRCCOPY); wzqpoint.xpoint.y=-1;/由于原來我們檢查是否結(jié)束時(shí)用的是鼠標(biāo)點(diǎn)下的坐標(biāo),而現(xiàn)在/putdown(CPoint point)函數(shù)用的是數(shù)組棋盤的坐標(biāo),所以必須轉(zhuǎn)換CPoint overpoint;overpo

16、int.x=point.x*20+30;overpoint.y=point.y*20+30;over(overpoint);colorwhite=true; 搜索最佳落棋點(diǎn): 現(xiàn)在就剩下void bestputdown(int i,int j)函數(shù)沒有定義了(雖然前面的變量函數(shù)已經(jīng)說明了,當(dāng)時(shí)我們這里是用程序擴(kuò)展的思路進(jìn)行的,故如此說明)。它的實(shí)現(xiàn)原理是:在四個(gè)方向上,各自計(jì)算那個(gè)方向上棋子的狀態(tài),我們的思路是利用原來定義的白棋為1,黑棋為-1,的思想,讓同個(gè)方向上的五個(gè)棋子的值相加,取絕對值并賦值給為這個(gè)方向定義的局部變量numi。 為什么要用五個(gè)棋子的值相加呢?因?yàn)?,如果幾個(gè)棋子

17、是同色的,無論黑白,它的絕對值必然大,而對于幾個(gè)棋子中有黑棋和白棋的,其值必然相加而抵消變小。所以我們可以利用這種方法來尋找旁邊有多個(gè)同色棋子的空位置(前面已經(jīng)具體說明)。在每一個(gè)棋盤位置,計(jì)算以它為起點(diǎn)的四個(gè)方向(橫、豎、撇、捺),再比較這四個(gè)方向中哪個(gè)值最大,然后在這個(gè)方向上尋找落棋點(diǎn)。/檢查四個(gè)方向,各算出五個(gè)棋子的和并賦值void CMy3_1View:bestputdown(int i,int j) /四個(gè)方向的值int num4;int a,k; / num0 ->a=0; if(i<15)for(k=0;k<5;k+)a=a+wzqi+kj;num0=abs(a

18、); / num1 "|"a=0;if(j<15)for(k=0;k<5;k+)a=a+wzqij+k;num1=abs(a);/ num2 ""a=0;if(i<15&&j<15)for(k=0;k<5;k+)a=a+wzqi+kj+k;num2=abs(a);/ num3 "/"a=0;if(i>4)&&(j<15)for(k=0;k<5;k+)a=a+wzqi-kj+k;num3=abs(a); /比較哪個(gè)方向同色棋最多/由于我們搜索落棋點(diǎn)

19、時(shí)用到最大值和方向,我們可以定義一個(gè)Cpoint類變量,/讓它返回兩個(gè)值??梢哉f,這也是一種巧妙的想法,因?yàn)檫@樣你就不用去寫/內(nèi)聯(lián)函數(shù)了CPoint numbig;/numbig.x表示方向 /numbig.y表示最大值numbig=maxnum(num0,num1,num2,num3);/在得到最大值和方向上尋找落棋點(diǎn)switch(numbig.y)case 4:searchcandown4(i,j,numbig.x);break;case 3:searchcandown3(i,j,numbig.x);break;case 2:searchcandown2(i,j,numbig.x);bre

20、ak;default:searchcandown1(i,j,numbig.x); 同樣的方法,我們必須為上面還沒有定義的函數(shù)添加空函數(shù)。  /其中i、j表示搜索起點(diǎn),n表示方向void searchcandown1(int i,int j,int n);void searchcandown2(int i,int j,int n);void searchcandown3(int i,int j,int n);void searchcandown4(int i,int j,int n);CPoint maxnum(int a,int b,int c,int d); 最

21、大值函數(shù)的實(shí)現(xiàn): 現(xiàn)在先介紹CPoint maxnum(int a,int b,int c,int d)函數(shù),它只是四個(gè)整數(shù)的比較: CPoint CMy3_1View:maxnum(int a, int b, int c, int d)/point.x為方向值/point.y為最大值CPoint point;if(a>=b)point.x=0;point.y=a;elsepoint.x=1;point.y=b;if(c>point.y)point.x=2;point.y=c;if(d>point.y)point.x=3;point.y=d;return point

22、;  而另外的四個(gè)函數(shù),有其相似性,分別介紹如下: void searchcandown4(int i,int j,int n)函數(shù): 如果最大值是四,它必然有一個(gè)空位置;我們可以這樣計(jì)算,如果第一個(gè)是空,那我們把它賦值給相應(yīng)變量;否則,先找那個(gè)空位置,然后判斷第一個(gè)棋子的顏色,并賦相應(yīng)的值。 /由于相似,下面代碼只解釋第一個(gè)方向/有四個(gè)同色棋void CMy3_1View:searchcandown4(int i, int j, int n)int k; / num0 "-"if(n=0)for(k=0;k<5;k+)/如果第一個(gè)是空i

23、f(wzqij=0)/如果下面有白棋if(wzqi+1j=1)/下面位置可以下棋,已經(jīng)有四個(gè)白棋wpointcan4.x=i;wpointcan4.y=j;break;else/下面位置可以下棋,已經(jīng)有四個(gè)黑棋bpointcan4.x=i;bpointcan4.y=j;break;/如果找到下棋位置,一定能找到!else if(wzqi+kj=0) /如果第一個(gè)是白棋if(wzqjj=1)wpointcan4.x=i+k;wpointcan4.y=j;break;/否則第一個(gè)是黑棋e(cuò)lsebpointcan4.x=i+k;bpointcan4.y=j;break; / num1 "|

24、"if(n=1)for(k=0;k<5;k+)if(wzqij=0)if(wzqij+1=1)wpointcan4.x=i;wpointcan4.y=j;break;elsebpointcan4.x=i;bpointcan4.y=j;break;else if(wzqij+k=0) if(wzqij=1)wpointcan4.x=i;wpointcan4.y=j+k;break;elsebpointcan4.x=i;bpointcan4.y=j+k;break;/ num2 "" if(n=2)for(k=0;k<5;k+)if(wzqij=0)if(

25、wzqi+1j+1=1)wpointcan4.x=i;wpointcan4.y=j;break;elsebpointcan4.x=i;bpointcan4.y=j;break;else if(wzqi+kj+k=0) if(wzqij=1)wpointcan4.x=i+k;wpointcan4.y=j+k;break;elsebpointcan4.x=i+k;bpointcan4.y=j+k;break;/ num3 "/" if(n=3)for(k=0;k<5;k+)if(wzqij=0)if(wzqi-1j+1=1)wpointcan4.x=i;wpointcan

26、4.y=j;break;elsebpointcan4.x=i;bpointcan4.y=j;break;else if(wzqi-kj+k=0) if(wzqij=1)wpointcan4.x=i-k;wpointcan4.y=j+k;break;elsebpointcan4.x=i-k;bpointcan4.y=j+k;break;void searchcandown3(int i,int j,int n)函數(shù): 如果最大值是三,它有兩種情況,一種是三個(gè)同色和兩個(gè)空;一種是四個(gè)同色和一個(gè)異色。前一種必定能找到一個(gè)空位置,賦值;后一種必定找不到空位置,不賦值。所以我們的想法很簡單,先

27、找到空位置,證明有三個(gè)同色,這對于玩五子棋來說三個(gè)同色是很重要的,再判斷是哪種顏色,賦相應(yīng)的值。 /最多有三個(gè)同色void CMy3_1View:searchcandown3(int i, int j, int n)int k=0; / num0 "-"if(n=0)for(k=0;k<5;k+)/找到位置if(wzqi+kj=0) /下一個(gè)是白棋 if(wzqi+k+1j=1)/下面位置可以下棋,已經(jīng)有三個(gè)白棋 wpointcan3.x=i+k;wpointcan3.y=j; /下一個(gè)是黑棋e(cuò)lse if(wzqi+k+1j=-1) bpointcan3.

28、x=i+k;bpointcan3.y=j; / num1 "|"if(n=1)for(k=0;k<5;k+)if(wzqij+k=0) if(wzqij+k-1=1) wpointcan3.x=i;wpointcan3.y=j+k;else if(wzqij+k+1=-1)bpointcan3.x=i;bpointcan3.y=j+k;/ num2 "" if(n=2)for(k=0;k<5;k+)if(wzqi+kj+k=0) if(wzqi+k+1j+k+1=1)wpointcan3.x=i+k;wpointcan3.y=j+k;else

29、 if(wzqi+k+1j+k+1=-1)bpointcan3.x=i+k;bpointcan3.y=j+k;/ num3 "/" if(n=3)for(k=0;k<5;k+)if(wzqi-kj+k=0)if(wzqi-k-1j+k+1=1) wpointcan3.x=i-k;wpointcan3.y=j+k;else if(wzqi-k-1j+k+1=-1)bpointcan3.x=i-k;bpointcan3.y=j+k;  void searchcandown2(int i,int j,int n)函數(shù): 如果最大值是二,也有兩種情況:一種

30、是有兩個(gè)同色和三個(gè)空位置;一種是有三個(gè)同色和一個(gè)異色和一個(gè)空位置,并且只算三個(gè)同色不連在一起的情況(因?yàn)槿绻腥齻€(gè)連續(xù)的情況,重全盤搜索的角度看,必然會被另外的情況所代替)。分兩種算法:一種是有一個(gè)空位置,一種是有三個(gè)空位置。前者先找到空位置,再判斷它下面兩個(gè)是否同色,同色則賦值給相應(yīng)變量,異色則不賦值,因?yàn)橐饬x不大;后者只要找到一個(gè)空位置就行了。 /最多有兩個(gè)同色void CMy3_1View:searchcandown2(int i, int j, int n)int k=0,m=0,a=0,b=0; / num0 "-"if(n=0)/判斷有多少個(gè)空位置for(k=0

31、;k<5;k+)if(wzqi+kj=0) m+=1;/如果只有一個(gè)空位置if(m=1)for(a=0;a<5;a+)/找到空位置if(wzqi+aj=0)/下面兩個(gè)棋子值的和b=wzqi+a+1j+wzqi+a+2j;/都是黑棋if(b=-2)/下面位置可以下棋,旁邊有兩個(gè)黑棋bpointcan2.x=i+a;bpointcan2.y=j;/都是白棋if(b=2)wpointcan2.x=i+a;wpointcan2.y=j;/如果有三個(gè)空位置,說明另外兩個(gè)同色if(m=3)for(a=0;a<5;a+)/如果兩個(gè)是黑棋if(wzqi+aj=-1)for(b=0;b<

32、5;b+)/如果找到空位置if(wzqi+bj=0)/下面位置可以下棋,旁邊有兩個(gè)黑棋bpointcan2.x=i+b;bpointcan2.y=j;break;else /如果兩個(gè)是白棋if(wzqi+aj=1)for(b=0;b<5;b+)if(wzqi+bj=0)wpointcan2.x=i+b;wpointcan2.y=j;break;/ num1 "|"m=0;if(n=1)for(k=0;k<5;k+)if(wzqij+k=0) m+;if(m=1)for(a=0;a<5;a+)if(wzqij+a=0)b=wzqij+a+1+wzqij+a+

33、2;if(b=-2)bpointcan2.x=i;bpointcan2.y=j+a;if(b=2)wpointcan2.x=i;wpointcan2.y=j+a;if(m=3)for(a=0;a<5;a+)if(wzqij+a=-1)for(b=0;b<5;b+)if(wzqij+b=0)bpointcan2.x=i;bpointcan2.y=j+b;break;else if(wzqij+a=1)for(b=0;b<5;b+)if(wzqij+b=0)wpointcan2.x=i;wpointcan2.y=j+b;break;/ num2 ""m=0;

34、if(n=2)for(k=0;k<5;k+)if(wzqi+kj+k=0) m+;if(m=1)for(a=0;a<5;a+)if(wzqi+aj+a=0)b=wzqi+a+1j+a+1+wzqi+a+2j+a+2;if(b=-2)bpointcan2.x=i+a;bpointcan2.y=j+a;if(b=2)wpointcan2.x=i+a;wpointcan2.y=j+a;if(m=3)for(a=0;a<5;a+)if(wzqi+aj+a=-1)for(b=0;b<5;b+)if(wzqi+bj+b=0)bpointcan2.x=i+b;bpointcan2.y

35、=j+b;break;else if(wzqi+aj+a=1)for(b=0;b<5;b+)if(wzqi+bj+b=0)wpointcan2.x=i+b;wpointcan2.y=j+b;break;/ num3 "/" m=0; if(n=3)for(k=0;k<5;k+)if(wzqi-kj+k=0)m+;if(m=1)for(a=0;a<5;a+)if(wzqi-aj+a=0)b=wzqi-a-1j+a+1+wzqi-a-2j+a+2;if(b=-2)bpointcan2.x=i-a;bpointcan2.y=j+a;if(b=2)wpointca

36、n2.x=i-a;wpointcan2.y=j+a;if(m=3)for(a=0;a<5;a+)if(wzqi-aj+a=-1)for(b=0;b<5;b+)if(wzqi-bj+b=0)bpointcan2.x=i-b;bpointcan2.y=j+b;break;else if(wzqi-aj+a=1)for(b=0;b<5;b+)if(wzqi-bj+b=0)wpointcan2.x=i-b;wpointcan2.y=j+b;break; void searchcandown1(int i,int j,int n)函數(shù): 最后的一個(gè)函數(shù)是searchcandown1(int i, int j, int n),這是為了預(yù)防用的,如果以上情況不發(fā)生怎么辦,總該下棋吧!而這個(gè)函數(shù)就是

溫馨提示

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

評論

0/150

提交評論