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

正文內(nèi)容

中國(guó)象棋游戲的的設(shè)計(jì)和實(shí)現(xiàn)-wenkub

2023-07-14 20:09:35 本頁(yè)面
 

【正文】 fine B_BEGIN B_KINGdefine B_END B_PAWNdefine NOCHESS 0 //沒有棋子黑方:define B_KING 1 //黑帥define B_CAR 2 //黑車define B_HORSE 3 //黑馬define B_CANON 4 //黑炮define B_BISHOP 5 //黑士define B_ELEPHANT 6 //黑象define B_PAWN 7 //黑卒紅方:define R_KING 8 //紅將define R_CAR 9 //紅車define R_HORSE 10//紅馬define R_CANON 11//紅炮define R_BISHOP 12//紅士define R_ELEPHANT 13//紅相define R_PAWN 14//紅兵判斷顏色:define IsBlack(x) (x=B_BEGIN amp。對(duì)于棋盤局面的表示可采用傳統(tǒng)而簡(jiǎn)單的“棋盤數(shù)組”。在搜索的過程中還可以采用一些輔助手段來提高搜索的效率。由于界面及程序輔助部分涉及內(nèi)容寬泛而又繁瑣,因而本文只介紹其中重點(diǎn)部分。本文的目標(biāo)是實(shí)現(xiàn)一款有著一定下棋水平且交互友好的中國(guó)象棋人機(jī)對(duì)弈程序。作為中華民族悠久文化的代表之一,中國(guó)象棋不僅源遠(yuǎn)流長(zhǎng),而且基礎(chǔ)廣泛,作為一項(xiàng)智力運(yùn)動(dòng),中國(guó)象棋開始走向世界。自從計(jì)算機(jī)發(fā)明,向各個(gè)領(lǐng)域發(fā)展,到成為我們現(xiàn)在每天工作和生活必不可少的一部分的這個(gè)過程中,電子游戲也逐步滲入我們每個(gè)人的娛樂活動(dòng)中。早期的人類社會(huì)由于生產(chǎn)力及科技的制約,只能進(jìn)行一些戶外的游戲。 Artificial Intelligence。人工智能部分主要體現(xiàn)計(jì)算機(jī)的下棋思路,既計(jì)算機(jī)如何進(jìn)行思考并以最佳走法完成下一步,先由相應(yīng)的搜索算法進(jìn)行搜索,并對(duì)各種可能的走法進(jìn)行估值,從中選擇勝利面最大的一步;而界面及程序輔助部分主要便于用戶通過以前的下棋步驟,更好地調(diào)整下棋思路,著法顯示使用戶能夠清楚地知道下棋過程,更準(zhǔn)確地把握整個(gè)局面。本文首先研究了中國(guó)象棋在計(jì)算機(jī)中的表示問題,接著討論如何產(chǎn)生著法一系列相關(guān)內(nèi)容。 Game tree。隨著生產(chǎn)力的發(fā)展和科技進(jìn)步,一種新的游戲方式——電子游戲也隨之誕生。而計(jì)算機(jī)已經(jīng)普及的今天,對(duì)于可以用計(jì)算機(jī)進(jìn)行程序編輯的人來說,開發(fā)屬于自己的游戲,已經(jīng)不再是夢(mèng)想。隨著計(jì)算機(jī)處理速度的飛速提高,人們很早就提出了疑問:計(jì)算機(jī)是否會(huì)超越人類?世界國(guó)際象棋大師已被計(jì)算機(jī)打敗,計(jì)算機(jī)已經(jīng)超過了人類?而人工智能是綜合性很強(qiáng)的一門邊緣學(xué)科,它的中心任務(wù)是研究如何使計(jì)算機(jī)去做那些過去只能靠人的智力才能做的工作。該程序功能包括:*人機(jī)對(duì)弈;*搜索深度設(shè)定;(電腦棋力選擇)*悔棋、還原;*著法名稱顯示;整個(gè)程序的實(shí)現(xiàn)可分為兩大部分:一、人工智能算法設(shè)計(jì)(計(jì)算機(jī)下棋引擎)該部分實(shí)現(xiàn)了如何讓計(jì)算機(jī)下中國(guó)象棋,其中涉及人機(jī)對(duì)弈的基本理論及思想,是該程序的核心部分,同時(shí)也是本項(xiàng)目研究的重點(diǎn)所在。2 人工智能算法設(shè)計(jì)程序的基本框架:從程序的結(jié)構(gòu)上講,大體上可以將引擎部分劃分為四大塊:棋局表示;著法生成;搜索算法;局面評(píng)估。其過程如下所示(圖1):圖 1 程序結(jié)構(gòu)圖下面將分別介紹程序各個(gè)部分: 棋局表示計(jì)算機(jī)下棋的前提是要讓計(jì)算機(jī)讀懂象棋。即用一個(gè)9*10的數(shù)組來存儲(chǔ)棋盤上的信息,數(shù)組的每個(gè)元素存儲(chǔ)棋盤上是否有棋子。amp。至于是什么棋子在走,以及是否吃子、吃的是什么子,在著法結(jié)構(gòu)中并不記錄。 //表明是什么棋子 CHESSMANPOS From。有了對(duì)棋盤局面和著法的表示之后,程序才能夠完成以下操作: 生成所有合法著法; 執(zhí)行著法、撤銷著法; 針對(duì)某一局面進(jìn)行評(píng)估。在著法生成器中,采用的基本思想就是遍歷整個(gè)棋盤(一個(gè)接一個(gè)地查看棋盤上的每個(gè)位置點(diǎn)),當(dāng)發(fā)現(xiàn)有當(dāng)前下棋方的棋子時(shí)先判斷它是何種類型的棋子,然后根據(jù)其棋子類型而相應(yīng)地找出其所有合法著法并存入著法隊(duì)列。當(dāng)然所有子都不能走到棋盤的外面,同時(shí)某些特定的子還有自己的行棋界限,如將、士不能出九宮,象不能過河。因此可以將著法隊(duì)列定義為二維數(shù)組m_MoveList[8][80],其中第一個(gè)數(shù)組下標(biāo)為層數(shù),第二個(gè)數(shù)組下標(biāo)為每一層的全部著法數(shù)。對(duì)于每一層的著法數(shù),也就是當(dāng)前下棋方針對(duì)當(dāng)前局面的所有可選的合法著法,據(jù)有關(guān)數(shù)據(jù)統(tǒng)計(jì)在象棋實(shí)戰(zhàn)中一般最多情況下也就五六十種。它如同程序的心臟,驅(qū)動(dòng)著整個(gè)程序。本節(jié)先介紹AlphaBeta搜索算法:在中國(guó)象棋里,雙方棋手獲得相同的棋盤信息。圖 2博弈樹該樹包含三種類型的結(jié)點(diǎn): 奇數(shù)層的中間結(jié)點(diǎn)(以及根結(jié)點(diǎn)),表示輪到紅方走棋; 偶數(shù)層的中間結(jié)點(diǎn),表示輪到黑方走棋; 葉子結(jié)點(diǎn),表示棋局結(jié)束。假定甲乙兩方下棋,甲勝的局面是一個(gè)極大值(一個(gè)很大的正數(shù)),那么乙勝的局面就是一個(gè)極小值(極大值的負(fù)值),和棋的局面則是零值(或是接近零的值)。同樣道理,由于乙方希望棋盤上的分值盡可能小,那么在奇數(shù)層上會(huì)選擇分值最小的結(jié)點(diǎn)。其中b是分枝因子,即針對(duì)各種局面的合法著法的數(shù)目的平均值,n是搜索的深度。所以當(dāng)你看到某個(gè)局面有可能產(chǎn)生很糟糕的局面時(shí)(確切地說這里的“很糟糕”是與之前分析的情況相比較而言的),你應(yīng)當(dāng)立刻停止對(duì)其剩余子結(jié)點(diǎn)的分析——不要對(duì)它再抱任何幻想了,如果你選擇了它,那么你必將得到那個(gè)很糟糕的局面,甚至可能更糟……這樣一來便可以在很大程度上減少搜索的工作量,提高搜索效率,這稱為“樹的裁剪”。用搜索兩層來看一看“樹的裁剪”對(duì)提高搜索效率的幫助。依次考察結(jié)點(diǎn)B的各個(gè)子結(jié)點(diǎn),查看它們的分值(因?yàn)槭孪燃s定好了搜索兩層,現(xiàn)在已達(dá)到搜索深度的要求了,所以就停下來調(diào)用局面評(píng)估函數(shù)來給它打分)。那么下一步,你的對(duì)手的選擇就會(huì)使得棋局發(fā)展成為分值為5的那個(gè)結(jié)點(diǎn)所表示的局面。而與前面已經(jīng)分析過的結(jié)點(diǎn)B所傳回5相比較,作為“最大一方”的你顯然更不愿意看到8的局面?!白钚∽畲蟆钡乃枷朐偌由稀皩?duì)樹的裁剪”,這就是AlphaBeta搜索算法的核心。 //執(zhí)行著法 int val = AlphaBeta(depth 1, beta, alpha)。 } return alpha。因?yàn)椋ǔ.?dāng)一個(gè)局面經(jīng)過搜索被認(rèn)為較好時(shí),其子結(jié)點(diǎn)中往往有一些與它相似的局面(如個(gè)別無(wú)關(guān)緊要的棋子位置有所不同)也是較好的。對(duì)于著法的排序可以使用各種排序算法,在程序中采用了歸并排序。因而搜索與局面評(píng)估是整個(gè)下棋引擎的核心。通俗地講就是一個(gè)棋子它值個(gè)什么價(jià)。棋子位置棋子位置,或稱控制區(qū)域,是指某一方的棋子在棋盤上所占據(jù)(控制)的位置。同樣四面被憋馬腿的死馬機(jī)動(dòng)性也較差(對(duì)于一步也不能走的棋子,可以認(rèn)為其機(jī)動(dòng)性為零)。對(duì)于子力打分和控制區(qū)域打分,只要遍歷棋盤,當(dāng)遇到棋子時(shí)簡(jiǎn)單地去查事先定義好的“子力價(jià)值表”和“控制區(qū)域價(jià)值表”,取出相對(duì)應(yīng)的值進(jìn)行累加即可(這些值的具體設(shè)定參考了前人的程序并作了適當(dāng)?shù)恼{(diào)整,今后仍應(yīng)根據(jù)電腦下棋所反映出的實(shí)際問題對(duì)這些值作適當(dāng)修改)。 //存放棋子靈活性分值short m_AttackPos[10][9]。 //存放每一位置上棋子的總價(jià)值其中計(jì)算機(jī)會(huì)進(jìn)行所有棋子值的判斷,AttackPos和GuardPos分別記錄該棋子受到的威脅和被保護(hù)的值。其次,對(duì)一個(gè)普通子,當(dāng)它既受到攻擊又受到保護(hù)的時(shí)候要注意如下幾個(gè)問題:攻擊者子力小于被攻擊者子力,攻擊方將愿意換子。攻擊方與保護(hù)方數(shù)量相同,并且攻擊者子力小于被攻擊者子力與保護(hù)者子力之和再減去保護(hù)者中最大子力,則攻擊方可能以n子換n子。 程序
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1