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

正文內(nèi)容

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

2024-12-27 19:52 上一頁面

下一頁面
 

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