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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-五子棋人機(jī)對(duì)弈程序設(shè)計(jì)(文件)

 

【正文】 le((temp2(TempArrayLength1))amp。amp。 else//否則就是活四 , // { // Live_Four++。 } } } } //step3:再判斷一下是否出現(xiàn)了一個(gè) 活三 ,判斷的方法是:預(yù)走一步棋看看是否處理出現(xiàn)了活四。iTempArrayLength。(TempArray[temp11]==2)) {temp1。(TempArray[temp2+1]==2)) {temp2++。amp。 // AfxMessageBox(活三了,橫 )。(actual_position=temp2)) Live_Three++。amp。 } } else//兩端都要判斷是否會(huì)形成長(zhǎng)連禁手,只有兩端都不會(huì)形成長(zhǎng)連禁手時(shí),才叫活四 {if ((TempArray[temp12]!=2)amp。(actual_position=temp2)) Live_Three++。此函數(shù)不需要返回值。所以,白棋的防守點(diǎn)的鏈表一定是非空的。不過(guò),我覺(jué)得這一行代碼好像是多余的。 尋找返回值中的最小值,并且,如果遇到一個(gè)返回 1的,就提前跳出循環(huán),因?yàn)?1是能返回的最小的值了 ,而按照博弈樹(shù)的理論,白棋應(yīng)該取最小值才對(duì) ReturnValue=RecursionAnalyzeFunction()。 } Min=1。 TempChainTableCurrent3=TempChainTableCurrent3previous。 } //繼續(xù)考察下一個(gè)黑棋點(diǎn) Undo_Save_ChessmanInfo()。//沒(méi)分出勝負(fù)來(lái),就返回 0 。 } //退出此函數(shù)前要清空此函數(shù)內(nèi)定義的兩個(gè)局部鏈表 //清空黑棋用的 TempChainTableHead 鏈表和白棋用的 TempChainTableHead3 鏈表中的所有的結(jié)點(diǎn) EmptingTwoChainTable(TempChainTableHead,TempChainTableEnd,TempChainTableHead3,TempChainTableEnd3)。 //清空黑棋用的 TempChainTableHead 鏈表和白棋用的 TempChainTableHead3 鏈表中的所有的結(jié)點(diǎn) EmptingTwoChainTable(TempChainTableHead,TempChainTableEnd,TempChainTableHead3,TempChainTableEnd3)。 // } if(ReturnValueMin) Min=ReturnValue。 //先清空 TempChainTableHead3鏈表,但是,要保留鏈表頭結(jié)點(diǎn) while(TempChainTableEnd3!=TempChainTableHead3) { TempChainTableEnd3=TempChainTableEnd3previous。 while(TempChainTableCurrent3!=TempChainTableHead3) { //下上一個(gè)白棋 if(TempChainTableCurrent3Chessman_No0) { AfxMessageBox()。//用來(lái)保存返回值 中的最小值用的 Min=2。 //將白棋的各 種防守點(diǎn)保存到局部鏈表 TempChainTableEnd3中 TempChainTableEnd3=SaveDefencePointToChainTable(TempChainTableEnd3)。 goto BB。(TempArray[temp2+2]!=2)) {//再判斷一下是不是剛才走的那步棋形成的活三,如果是,就發(fā)現(xiàn)一個(gè)“活三” 37 if ((actual_position=temp1)amp。 // AfxMessageBox(活三了,橫 )。 goto BB。 } else {if (temp1==3)//如果首端 離邊界只有一個(gè)位置,則只需判斷末端是否會(huì)形成長(zhǎng)連禁手 {if (TempArray[temp2+2]!=2)//如果第六個(gè)棋子不是黑棋,則 {//再判斷一下是不是剛才走的那步棋形成的活三,如果是,就發(fā)現(xiàn)一個(gè)“活三” if ((actual_position=temp1)amp。amp。amp。 while((temp2(TempArrayLength1))amp。 while((temp12)amp。//將臨時(shí)變量初始化為 0 temp2=0。 // } //其實(shí),只要是四就行,不必區(qū)分死四和活四,但是 temp3和 temp4變量 //卻是有用的,因?yàn)檫@樣可以防止誤將一個(gè)活四記為兩個(gè)四 temp3=temp1+1。amp。(TempArray[temp2+1]==2)) {temp2++。(TempArray[temp11]==2)) {temp1。iTempArrayLength。這樣不好,效率低,好處是思路簡(jiǎn)單。//將黑棋的連接數(shù)初始化為 0 temp2=0。 Game_Over=true。 else { if (temp2temp1) temp1=temp2。//將黑棋的連接數(shù)初始化為 0 temp2=0。 先判斷橫線 actual_position=chessman[chessman_no].position_heng。//循環(huán)用的計(jì)數(shù)變量 already_exceed_five=false。 else AfxMessageBox(白棋獲勝 !)。(ptrArray[back+1]==temp_chessman_type)) back++。(ptrArray[forword1]==temp_chessman_type)) forword。//chessman 和 Chessman_No都是全局變量 forword=actual_position。 connected_number=0。 勝負(fù)判斷: 某方形成五子連即獲勝;若黑棋走出 ‘ 雙三 ’ 、 ‘ 雙四 ’ 或長(zhǎng)連即以禁手判負(fù)。為提高效率,在考察每一個(gè)點(diǎn)的時(shí)候,就應(yīng)該以考察點(diǎn)為中心,向線的兩端搜索,而不應(yīng)該采用判斷勝負(fù)函數(shù)中采用的那種從每一條線的首端考察到末端的笨辦法 ,那種笨辦法會(huì)多考慮很多的沒(méi)用的點(diǎn)的。但這種算法的弱點(diǎn)非常明顯,只顧眼前利益,不能顧全大局,這就和許多五子棋初學(xué)者一樣犯了 “ 目光短淺 ” 的毛病。而其他三個(gè)方向的棋型也可用同樣的方法得到,當(dāng)搜索完整張棋盤后, 己方棋型表也就填寫完畢了。 } 盤面分析填寫棋型表: 本程序核心模塊之一,人工智能算法的根本依據(jù)!其具體實(shí)現(xiàn)方法如下:您在下五子棋時(shí),一定會(huì)先根據(jù)棋盤上的情況,找出當(dāng)前最重要的一些點(diǎn)位,如 “ 活三 ” 、 “ 沖四 ” 等;然后再在其中選擇落子點(diǎn)。 chessman[chessman_no].line_pie[chessman[chessman_no].position_pie]=1。 //將要撤銷的棋盤上的棋子對(duì)應(yīng)的線上的棋子顏色恢復(fù)為 1, 1代表沒(méi)棋子的,是空白 chessman[chessman_no].line_heng[chessman[chessman_no].position_heng]=1。 { if (min_empty_index=0) return。 chessman[chessman_no].line_shu[chessman[chessman_no].position_shu]=3。 chessman[chessman_no].line_pie[chessman[chessman_no].position_pie]=2。 min_empty_index+=1。//由單位坐標(biāo)計(jì)算出棋子的編號(hào)的公式 if (chessman[No].chessman_type==1) return true。 // Chessman_No=*15+。 yy=35*(1+y)。 } if (arithmetical_pliment17) xx+=1。 //計(jì)算鼠標(biāo)點(diǎn)擊處的橫坐標(biāo) xx=1。 xx=35*(1+xx)。yy=0。 }。 while(arithmetical_pliment14) { arithmetical_pliment=arithmetical_pliment15。 1) 由“棋子編號(hào)”到“單位坐標(biāo)” CPoint notounit(int chessman_no) { int xx,yy,arithmetical_pliment。 //用一個(gè) for循環(huán)將線中除了頭 兩個(gè)元素的所有其它的點(diǎn)都初始化為 1, 1代表沒(méi)棋子, 2代表黑棋, 3代表白棋 for(j=2。 28 for(i=0。j++) { chessman[chessboard_map[j][i]].line_heng=visit_all_line[i]。 6)沿著 44條線來(lái)初始化棋盤上的所有點(diǎn) 先處理所有的橫線上的點(diǎn) for (i=0。 初始化長(zhǎng)連點(diǎn)鏈表 初始化活四點(diǎn)鏈表 初始化四三點(diǎn)鏈表 初始化雙四點(diǎn)鏈表 初始化雙三點(diǎn)鏈表 初始化連三點(diǎn)鏈表 初始化跳三點(diǎn)鏈表 初始化死四點(diǎn)鏈表 初始化死三點(diǎn)鏈表 初始化活二點(diǎn)鏈表 4)初始化用來(lái)為黑棋保存必勝下法的鏈表 SavedVictoryStepHead=new MyNode。 初始化長(zhǎng)連點(diǎn)鏈表 初始化活四點(diǎn)鏈表 初始化四三點(diǎn)鏈表 初始 27 化雙四點(diǎn)鏈表 初始化雙三點(diǎn)鏈表 初始化雙叫四三點(diǎn)鏈表 初始化單叫四三點(diǎn)鏈表 初始化連三點(diǎn)鏈表 初始化跳三點(diǎn)鏈表 初始化死四點(diǎn)鏈表初始化死三點(diǎn)鏈表 初始化活二點(diǎn)鏈表 3)初始化用來(lái)保存白棋的有用點(diǎn)的鏈表 初始化五連點(diǎn)鏈表 ,三個(gè)指針都指向同一個(gè)結(jié)點(diǎn) ,產(chǎn)生一個(gè)頭結(jié)點(diǎn)。//初始化棋盤上的所有點(diǎn)都為沒(méi)有棋子 2)初始化用來(lái)保存黑棋的有用點(diǎn)的鏈表 初始化五連點(diǎn)鏈表 ,三個(gè)指針都指向同一個(gè)結(jié)點(diǎn) ,產(chǎn)生一個(gè)頭結(jié)點(diǎn)。 chessman[i].position_shu=0。 chessman[i].line_shu=Empty_Array。 } } //給用來(lái)保存棋盤上所有位置信息的數(shù)組賦初值 CPoint xy。j++)//y坐標(biāo)從 0到 14 { for(i=0。 previous_Chessman_type=1。 =20。 1)初始化函數(shù) void InitMyData() { int i,j。 MyNode *SavedVictoryStepEnd。必須在 InitMyData()函數(shù)中對(duì)上述數(shù)組進(jìn)行初始化 !還有鏈表的指針,也要初始化。 }。// 棋子 。 還有長(zhǎng)連點(diǎn)的鏈表,活四點(diǎn)的鏈表,四三點(diǎn)的鏈表,雙四點(diǎn)的鏈表,雙三點(diǎn)的鏈表,連三點(diǎn)的鏈表,跳三點(diǎn)的鏈表,死四點(diǎn)的鏈表,死三點(diǎn)的鏈表,活二點(diǎn)的鏈表。 還有長(zhǎng)連點(diǎn)的鏈表,活四點(diǎn)的鏈表,四三點(diǎn)的鏈表,雙四點(diǎn)的鏈表,雙三點(diǎn)的鏈表,雙叫四三點(diǎn)的鏈表,單叫四三點(diǎn)的鏈表,連三點(diǎn)的鏈表,跳三點(diǎn)的鏈表,死四點(diǎn)的鏈表,死三點(diǎn)的鏈表,活二點(diǎn)的鏈表。 }。//用來(lái)決定在黑方下第五個(gè)棋子的時(shí)候是否采用“五手兩打”的國(guó)際比賽規(guī)則。//用來(lái)保存上一個(gè)當(dāng)前棋子的顏色 BOOL Game_Over。 23 int Chessman_No。//左斜 (撇 )第 21條線 int n_line00[ 7]。//橫向第 15 條線 int s_line00[17]。數(shù)組中剩下的元素是此線上的點(diǎn)的編號(hào)。 struct ACTUAL_STEP_INFO actual_step_saved[225]。 bool is_black_chessman。 POINT_IN_CHESSBOARD chessman[225]。//子 。//撇 int position_pie。//橫 int position_heng。 棋盤及棋子表示 首先得為整個(gè)棋盤建立一張表格用以記錄棋子信息 ,我們使用一個(gè) 15 15 的二維數(shù)組 chessboard_map[15][15] (15 15 是五子棋棋盤的大小 ),數(shù)組的每一個(gè)元素對(duì)應(yīng)棋盤上的一個(gè)交叉點(diǎn),用 ‘1’ 表示 沒(méi)有棋子 、‘ 2’ 代表 黑棋 子、 ‘ 3’ 代表 白棋 子;這張表也是今后分析的基礎(chǔ)。 18 16
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1