freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

五子棋人機(jī)對(duì)戰(zhàn)設(shè)計(jì)方案-在線瀏覽

2025-07-02 00:21本頁(yè)面
  

【正文】 單函數(shù)void CMyView::OnPlayer() { // TODO: Add your mand handler code here vsputer=2。} OnStart()。其中,我們只是添加一個(gè)變量,而仍然利用原來的開始函數(shù)。下面,我們就必須把游戲雙方中的一方改為計(jì)算機(jī)。當(dāng)然,要是人贏了,就必須讓計(jì)算機(jī)先下了,在將在以后的算法中體現(xiàn)。void CMyView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CDC *pDC=GetDC()。 if((pDC)==FALSE) AfxMessageBox(Can39。 //顯示棋子 /////////////////////人對(duì)機(jī) if(vsputer==1) { if(30amp。410amp。30amp。410) { int px=()/20。 if(colorwhiteamp。wzq[px][py]==0) { (m_bmwhite)。Dc,0,0,SRCCOPY)。 over(point)。 //保存白棋位置 vspoint=point。 } } } //人對(duì)人 if(vsputer==2) { if(30amp。410amp。30amp。410) { int px=()/20。 if(colorwhiteamp。wzq[px][py]==0) { (m_bmwhite)。Dc,0,0,SRCCOPY)。 over(point)。 } else if(wzq[px][py]==0) { (m_bmblack)。Dc,0,0,SRCCOPY)。 over(point)。 } } } CView::OnLButtonUp(nFlags, point)。而對(duì)于計(jì)算機(jī)怎么下棋,我們只是用了一個(gè)函數(shù)puterdown()表示。接著,我們的主要問題就是實(shí)現(xiàn)puterdown()函數(shù),讓計(jì)算機(jī)能夠自動(dòng)下棋!計(jì)算機(jī)是怎樣下棋?這就是定位的問題了。我們實(shí)現(xiàn)的方法是:全盤搜索,并把搜索到的位置,保存在變量。 //不是以上情況,這個(gè)位置空 并在搜索之前都賦值為(1,1),然后,進(jìn)行搜索,并把相應(yīng)的值保存在相應(yīng)變量里面,而如果前面已經(jīng)對(duì)變量賦值,我們依然賦值,用新值代替舊值。全盤搜索完之后,由于上面的變量中至少有一個(gè)已經(jīng)被賦值,即不是(1,1),我們可以采用多數(shù)優(yōu)先的方法,讓已經(jīng)有多個(gè)同色棋子的位置先下棋。puterdown()函數(shù)如下: wpointcan4=(1,1)。 wpointcan3=(1,1)。 wpointcan2=(1,1)。 //搜索最好的落棋點(diǎn) for(int i=0。i++) for(int j=0。j++) bestputdown(i,j)。 return。 return。 return。 return。 return。 return。 return。//放下黑棋 void putdown(CPoint point)。由于putdown(CPoint point)函數(shù)的原理非常簡(jiǎn)單,我們先說明如下: CDC Dc。t create DC)。 pDCBitBlt(*20+32,*20+32,160,160,amp。 wzq[][]=1。 =*20+30。 over(overpoint)。 } 現(xiàn)在就剩下void bestputdown(int i,int j)函數(shù)沒有定義了(雖然前面的變量函數(shù)已經(jīng)說明了,當(dāng)時(shí)我們這里是用程序擴(kuò)展的思路進(jìn)行的,故如此說明)。 為什么要用五個(gè)棋子的值相加呢?因?yàn)椋绻麕讉€(gè)棋子是同色的,無論黑白,它的絕對(duì)值必然大,而對(duì)于幾個(gè)棋子中有黑棋和白棋的,其值必然相加而抵消變小。在每一個(gè)棋盤位置,計(jì)算以它為起點(diǎn)的四個(gè)方向(橫、豎、撇、捺),再比較這四個(gè)方向中哪個(gè)值最大,然后在這個(gè)方向上尋找落棋點(diǎn)。//檢查四個(gè)方向,各算出五個(gè)棋子的和并賦值void CMyView::bestputdown(int i,int j){ //四個(gè)方向的值 int num[4]。 /////////////////////////////// num[0] a=0。k5。 num[0]=abs(a)。 if(j15) for(k=0。k++) a=a+wzq[i][j+k]。 /////////////////////////////// num[2] \ a=0。amp。k5。 num[2]=abs(a)。 if((i4)amp。(j15)) for(k=0。k++) a=a+wzq[ik][j+k]。 可以說,這也是一種巧妙的想法,因?yàn)檫@樣你就不用去寫//內(nèi)聯(lián)函數(shù)了CPoint numbig。 //在得到最大值和方向上尋找落棋點(diǎn) switch() { case 4: searchcandown4(i,j,)。 case 3: searchcandown3(i,j,)。 case 2: searchcandown2(i,j,)。 default: searchcandown1(i,j,)。同樣的方法,我們必須為上面還沒有定義的函數(shù)添加空函數(shù)。 //其中i、j表示搜索起點(diǎn),n表示方向 void searchcandown1(int i,int j,int n)。 void searchcandown3(int i,int j,int n)。 CPoint maxnum(int a,int b,int c,int d)。327最大值函數(shù)的實(shí)現(xiàn) if(a=b) { =0。 } else { =1。 } if(c) { =2。 } if(d) { =3。 } return point。而另外的四個(gè)函數(shù),有其相似性,分別介紹如下:328個(gè)大函數(shù)的實(shí)現(xiàn)與功能 //由于相似,下面代碼只解釋第一個(gè)方向 //有四個(gè)同色棋void CMyView::searchcandown4(int i, int j, int n){ int k。k5。 =j。 } else { //下面位置可以下棋,已經(jīng)有四個(gè)黑棋 =i。 break。 =j。 } //否則第一個(gè)是黑棋 else { =i+k。 break。k5。 =j。 } else { =i。 break。 =j+k。 } else { =i。 break。k5。 =j。 } else { =i。 break。 =j+k。 } else { =i+k。 break。k5。 =j。 } else { =i。 break。 =j+k。
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1