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

正文內(nèi)容

五子棋人機對戰(zhàn)設(shè)計方案-文庫吧

2025-04-30 00:21 本頁面


【正文】 er=1。 OnStart()。}其中,我們只是添加一個變量,而仍然利用原來的開始函數(shù)。雖然我們的菜單項已經(jīng)刪除了,但它的函數(shù)還在,我們應(yīng)該加以利用。323人變成計算機下面,我們就必須把游戲雙方中的一方改為計算機。我們把黑棋改為計算機,因為一般情況計算機比人強,應(yīng)讓人先下。當(dāng)然,要是人贏了,就必須讓計算機先下了,在將在以后的算法中體現(xiàn)。由于下棋只是在OnLButtonUp(UINT nFlags, CPoint point)函數(shù)中,我們把它改為如下:void CMyView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CDC *pDC=GetDC()。 CDC Dc。 if((pDC)==FALSE) AfxMessageBox(Can39。t create DC)。 //顯示棋子 /////////////////////人對機 if(vsputer==1) { if(30amp。amp。410amp。amp。30amp。amp。410) { int px=()/20。 int py=()/20。 if(colorwhiteamp。amp。wzq[px][py]==0) { (m_bmwhite)。 pDCBitBlt(px*20+32,py*20+32,160,160,amp。Dc,0,0,SRCCOPY)。 wzq[px][py]=1。 over(point)。 colorwhite=false。 //保存白棋位置 vspoint=point。 //計算機下棋 puterdown()。 } } } //人對人 if(vsputer==2) { if(30amp。amp。410amp。amp。30amp。amp。410) { int px=()/20。 int py=()/20。 if(colorwhiteamp。amp。wzq[px][py]==0) { (m_bmwhite)。 pDCBitBlt(px*20+32,py*20+32,160,160,amp。Dc,0,0,SRCCOPY)。 wzq[px][py]=1。 over(point)。 colorwhite=false。 } else if(wzq[px][py]==0) { (m_bmblack)。 pDCBitBlt(px*20+32,py*20+32,160,160,amp。Dc,0,0,SRCCOPY)。 wzq[px][py]=1。 over(point)。 colorwhite=true。 } } } CView::OnLButtonUp(nFlags, point)。}由上面可知,我們對人對機游戲的方法是采用:人下完了之后,檢查是否勝利,是則結(jié)束游戲,重新開始,并改為黑棋(即計算機)先下;如果人沒有勝利,也改為計算機下。而對于計算機怎么下棋,我們只是用了一個函數(shù)puterdown()表示。但是現(xiàn)在我們并不能運行程序,因為有一個沒有定義的函數(shù),怎么辦呢?仔細看程序的話,你還會發(fā)現(xiàn)一個變量Cpoint vspoint,這是后來添加的它的用處是保存剛才白棋下的位置,有利于黑棋下棋時的定位。接著,我們的主要問題就是實現(xiàn)puterdown()函數(shù),讓計算機能夠自動下棋!324計算機下棋計算機是怎樣下棋?這就是定位的問題了。即搜索棋盤,找出一個最佳點,放下黑棋。我們實現(xiàn)的方法是:全盤搜索,并把搜索到的位置,保存在變量。由于有多種情況,我們定義變量如下:CPoint bpointcan4, //這個位置空,它旁邊有四個黑棋 wpointcan4, //這個位置空,它旁邊有四個白棋 bpointcan3, //這個位置空,它的旁邊有三個黑棋 wpointcan3, //這個位置空,它的旁邊有三個白棋 bpointcan2, //這個位置空,它的旁邊有兩個黑棋 wpointcan2, //這個位置空,它的旁邊有兩個白棋 bpointcan1。 //不是以上情況,這個位置空 并在搜索之前都賦值為(1,1),然后,進行搜索,并把相應(yīng)的值保存在相應(yīng)變量里面,而如果前面已經(jīng)對變量賦值,我們依然賦值,用新值代替舊值。注意:我們只保存最后一個值,這樣的一個好處是,避免了每次都從左上角開始,并且它的隨機性比隨機函數(shù)還隨機。全盤搜索完之后,由于上面的變量中至少有一個已經(jīng)被賦值,即不是(1,1),我們可以采用多數(shù)優(yōu)先的方法,讓已經(jīng)有多個同色棋子的位置先下棋。其原理是,如果已經(jīng)有四個黑棋,計算機再下一個黑棋就贏了;否則,如果人已經(jīng)有四個白棋,那么計算機就必須放下一個黑棋,阻止白棋下一步贏;如果已經(jīng)有三個黑棋,再下一個黑棋,變成四個;否則,如果已經(jīng)有三個白棋,下一個黑棋,破壞它;兩個棋子的同理;否則,在剛才白棋下的地方,順便找一個位置,下棋。puterdown()函數(shù)如下://輪到計算機下棋void CMyView::puterdown(){ //把各種情形賦值為如下 bpointcan4=(1,1)。 wpointcan4=(1,1)。 bpointcan3=(1,1)。 wpointcan3=(1,1)。 bpointcan2=(1,1)。 wpointcan2=(1,1)。 bpointcan1=(1,1)。 //搜索最好的落棋點 for(int i=0。i19。i++) for(int j=0。j19。j++) bestputdown(i,j)。 //判斷放在哪里 //棋多的位置優(yōu)先 //黑白一樣多時黑先 //不是1就表示已經(jīng)被賦值! if(!=1) { putdown(bpointcan4)。 return。 } else if(!=1) { putdown(wpointcan4)。 return。 } else if(!=1) { putdown(bpointcan3)。 return。 } else if(!=1) { putdown(wpointcan3)。 return。 } else if(!=1) { putdown(bpointcan2)。 return。 } else if(!=1) { putdown(wpointcan2)。 return。 } else { putdown(bpointcan1)。 return。 }}上面又有兩個新函數(shù),分別定義為空函數(shù),如下: //搜索最佳位置 void bestputdown(int i,int j)。//放下黑棋 void putdown(CPoint point)?,F(xiàn)在,我們就必須對上面兩個空函數(shù)進行定義了。325在指定位置下棋由于putdown(CPoint point)函數(shù)的原理非常簡單,我們先說明如下: //黑棋下void CMyView::putdown(CPoint point){ CDC *pDC=GetDC()。 CDC Dc。 if((pDC)==FALSE) AfxMessageBox(Can39。t create DC)。
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1