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

正文內(nèi)容

五子棋人機(jī)對(duì)戰(zhàn)設(shè)計(jì)方案-文庫(kù)吧

2025-04-30 00:21 本頁(yè)面


【正文】 er=1。 OnStart()。}其中,我們只是添加一個(gè)變量,而仍然利用原來的開始函數(shù)。雖然我們的菜單項(xiàng)已經(jīng)刪除了,但它的函數(shù)還在,我們應(yīng)該加以利用。323人變成計(jì)算機(jī)下面,我們就必須把游戲雙方中的一方改為計(jì)算機(jī)。我們把黑棋改為計(jì)算機(jī),因?yàn)橐话闱闆r計(jì)算機(jī)比人強(qiáng),應(yīng)讓人先下。當(dāng)然,要是人贏了,就必須讓計(jì)算機(jī)先下了,在將在以后的算法中體現(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)。 //顯示棋子 /////////////////////人對(duì)機(jī) 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。 //計(jì)算機(jī)下棋 puterdown()。 } } } //人對(duì)人 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)。}由上面可知,我們對(duì)人對(duì)機(jī)游戲的方法是采用:人下完了之后,檢查是否勝利,是則結(jié)束游戲,重新開始,并改為黑棋(即計(jì)算機(jī))先下;如果人沒有勝利,也改為計(jì)算機(jī)下。而對(duì)于計(jì)算機(jī)怎么下棋,我們只是用了一個(gè)函數(shù)puterdown()表示。但是現(xiàn)在我們并不能運(yùn)行程序,因?yàn)橛幸粋€(gè)沒有定義的函數(shù),怎么辦呢?仔細(xì)看程序的話,你還會(huì)發(fā)現(xiàn)一個(gè)變量Cpoint vspoint,這是后來添加的它的用處是保存剛才白棋下的位置,有利于黑棋下棋時(shí)的定位。接著,我們的主要問題就是實(shí)現(xiàn)puterdown()函數(shù),讓計(jì)算機(jī)能夠自動(dòng)下棋!324計(jì)算機(jī)下棋計(jì)算機(jī)是怎樣下棋?這就是定位的問題了。即搜索棋盤,找出一個(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è)位置空 并在搜索之前都賦值為(1,1),然后,進(jìn)行搜索,并把相應(yīng)的值保存在相應(yīng)變量里面,而如果前面已經(jīng)對(duì)變量賦值,我們依然賦值,用新值代替舊值。注意:我們只保存最后一個(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è)位置,下棋。puterdown()函數(shù)如下://輪到計(jì)算機(jī)下棋void CMyView::puterdown(){ //把各種情形賦值為如下 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。i19。i++) for(int j=0。j19。j++) bestputdown(i,j)。 //判斷放在哪里 //棋多的位置優(yōu)先 //黑白一樣多時(shí)黑先 //不是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。 }}上面又有兩個(gè)新函數(shù),分別定義為空函數(shù),如下: //搜索最佳位置 void bestputdown(int i,int j)。//放下黑棋 void putdown(CPoint point)?,F(xiàn)在,我們就必須對(duì)上面兩個(gè)空函數(shù)進(jìn)行定義了。325在指定位置下棋由于putdown(CPoint point)函數(shù)的原理非常簡(jiǎn)單,我們先說明如下: //黑棋下void CMyView::putdown(CPoint point){ CDC *pDC=GetDC()。 CDC Dc。 if((pDC)==FALSE) AfxMessageBox(Can39。t create DC)。
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1