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

正文內(nèi)容

中國(guó)象棋游戲設(shè)計(jì)及實(shí)現(xiàn)(存儲(chǔ)版)

  

【正文】 1 前言 中國(guó)象棋游戲設(shè)計(jì)背景和研究意義中國(guó)象棋游戲流傳至今已經(jīng)有數(shù)千年的歷史了,是一種古老的文化,它集文化、科學(xué)、藝術(shù)、競(jìng)技于一體,有利于開發(fā)人的智慧,鍛煉人的思維,培養(yǎng)人的毅力,增強(qiáng)人的競(jìng)爭(zhēng)意識(shí)。后來(lái),網(wǎng)絡(luò)上先后出現(xiàn)了真正的 WINDOWS 窗口界面的象棋專業(yè)高級(jí)軟件《棋隱》 、 《象棋世家》 、 《象棋參謀》 、 《象棋奇兵》等。這種表示方法簡(jiǎn)單易行。這些信息由外部讀取棋盤上起點(diǎn)、終點(diǎn)的數(shù)據(jù)獲得。 因而,棋局表示好比是整個(gè)程序(計(jì)算機(jī)下棋引擎部分)的地基,之后所有的操作都將建立在其基礎(chǔ)上。產(chǎn)生了著法后要將其存入著法隊(duì)列以供搜索之用,由于搜索會(huì)搜索多層(即考慮雙方你來(lái)我往好幾步,這樣才有利于對(duì)局面進(jìn)行評(píng)估以盡可能避免“目光短淺”),所以在把著法存入著法隊(duì)列的時(shí)候還要同時(shí)存儲(chǔ)該著法所屬的搜索層數(shù)。它如同程序的心臟,驅(qū)動(dòng)著整個(gè)程序。中國(guó)象棋的博弈樹的模型大概如下圖所示,可以把其中連接結(jié)點(diǎn)的線段看作是著法,不同的著法自然產(chǎn)生不同的局面。那么由于甲方希望棋盤上的分值盡可能大,則在偶數(shù)層上會(huì)挑選分值最大的結(jié)點(diǎn)——偶數(shù)層的結(jié)點(diǎn)是甲走完一步棋之后的棋盤局面,反映了甲方對(duì)棋局形勢(shì)的要求。由于每一方都會(huì)盡可能將局面導(dǎo)向?qū)ψ约河欣鴮?duì)對(duì)方不利的方向(假定下棋雙方對(duì)棋局有著同樣的認(rèn)知,即你認(rèn)為對(duì)你很糟糕的局面,在你的對(duì)手看來(lái)則是對(duì)他很有利的局面),那么某些局面由于能夠產(chǎn)生出很糟糕的局面因而根本沒有再繼續(xù)考慮的價(jià)值。圖 2 樹的裁剪首先,考察結(jié)點(diǎn) A 的子結(jié)點(diǎn) B。依次查看結(jié)點(diǎn) C 的各個(gè)子結(jié)點(diǎn)的分值,其第一個(gè)子結(jié)點(diǎn)返回了 2……。最基本的 AlphaBeta 算法的代碼如下:int AlphaBeta(int depth, int alpha, int beta){if (depth == 0) //如果是葉子節(jié)點(diǎn)(到達(dá)搜索深度要求)return Evaluate()。} 著法排序AlphaBeta 搜索算法是在“最小最大”的基礎(chǔ)上引入 “樹的裁剪”的思想以期提高效率,它的效率將在很大程度上取決于樹的結(jié)構(gòu)——如果搜索了沒多久就發(fā)現(xiàn)可以進(jìn)行“裁剪”了,那么需要分析的工作量將大大減少,效率自然也就大大提高;而如果直至 分析了所有的可能性之后才能做出“裁剪”操作,那此時(shí)“裁剪”也已經(jīng)失去了它原有的價(jià)值(因?yàn)槟阋呀?jīng)分析了所有情況,這時(shí)的 AlphaBeta 搜索已和“最小最大”搜索別無(wú)二致了) 。歸并排序的空間復(fù)雜度為 O(n),時(shí)間復(fù)雜度為 O(nlog2n),具有較高的效率。例如,車值 10 的話,那可能馬值 6,卒值 2 等等。棋子的相互關(guān)系這一點(diǎn)的分析較為復(fù)雜,因?yàn)橐粋€(gè)棋子與其它子之間往往存在多重關(guān)系。 //存放每一位置被威脅的信息BYTE m_GuardPos[10][9]。比如,一個(gè)車正遭受一個(gè)炮的攻擊,那么任何對(duì)車的保護(hù)都將失去意義——對(duì)方肯定樂意用一個(gè)炮來(lái)?yè)Q一個(gè)車。要實(shí)現(xiàn)悔棋和還原功能,首先要明確哪些信息應(yīng)當(dāng)被保存以供悔棋和還原所使用。在對(duì)弈過程中,每一回合都將棋局信息(這里指前面所說的需要保存的信息)保存至走法隊(duì)列,以供悔棋所用。 著法名稱顯示功能的實(shí)現(xiàn)每當(dāng)下棋者(用戶或是計(jì)算機(jī))走一步棋,在棋盤旁邊的一個(gè)列表框控件(List Box)中按照中國(guó)象棋關(guān)于著法描述的規(guī)范要求顯示出該著法的名稱。 (amp。 //繪制 DrawGradient(amp。 } //顯示其他文字 if(m_bIsShowText) { (m_clrText)。 }以下介紹如何對(duì)列表框控件(List Box)進(jìn)行操作,以顯示或刪除著法名稱。 勝敗判定勝負(fù)判定只要一方將另一方的將或帥吃掉就是勝者。if(position[i][j]==R_KING)RedLive=TRUE。//取當(dāng)前奇偶標(biāo)志,奇數(shù)層為電腦方,偶數(shù)層為用戶方。代碼主要分布于以下三大部分:初始化部分BOOL CCChessUIDlg::OnInitDialog(){}OnInitDialog()負(fù)責(zé)的是對(duì)話框的初始化。所以在 OnPaint()函數(shù)里做的工作主要都是在貼位圖。在收到用戶傳達(dá)的走棋信息后,可先判斷該著法是否合法(是否符合中國(guó)象棋的游戲規(guī)則) ,如果合法,則執(zhí)行之。——著法生成器?!置嬖u(píng)估。輪到走棋的一方,將某個(gè)棋子從一個(gè)交叉點(diǎn)走到另一個(gè)交叉點(diǎn),或者吃掉對(duì)方的棋子而占領(lǐng)其交叉點(diǎn),都算走一著。相(象):相(象)的主要作用是防守,保護(hù)自己的帥(將) 。如果在要去的方向有別的棋子擋住,馬就無(wú)法走過去,俗稱“蹩馬腿” 。歷經(jīng)了幾個(gè)月的奮戰(zhàn),緊張而又充實(shí)的畢業(yè)設(shè)計(jì)終于落下了帷幕。從尊敬的導(dǎo)師身上,我不僅學(xué)到了扎實(shí)、寬廣的專業(yè)知識(shí),也學(xué)到了做人的道理。第三、程序仍在局面檢測(cè)和貼圖刷新上存在著隨機(jī)性的出錯(cuò)可能(出錯(cuò)幾率很?。?。[10] Fran231。name of the law。[9] Fran231。第二:由于對(duì)人工智能算法的不熟悉,在 AlphaBeta 搜索算法上花了大量的時(shí)間和精力來(lái)了解,導(dǎo)致程序進(jìn)度的緩慢。在我的學(xué)業(yè)和論文的研究工作中無(wú)不傾注著老師們辛勤的汗水和心血。5 總結(jié)2022 年 2 月,我開始了我的畢業(yè)論文工作,時(shí)至今日,論文基本完成。 馬:馬走動(dòng)的方法是一直一斜,即先橫著或直著走一格,然后再斜著走一個(gè)對(duì)角線,俗稱“馬走日” 。仕(士):仕(士)是帥(將)的貼身保鏢,它也只能在九宮內(nèi)走動(dòng)。首先,執(zhí)行該軟件,系統(tǒng)并不需要很高的配置,CPU 在 以上,內(nèi)存在 512M以上就可以很流暢地執(zhí)行?!ㄅ判颉H缦拢骸笃逑嚓P(guān)定義。在 OnLButtonDown 函數(shù)里處理如下兩種操作:如果用戶點(diǎn)擊鼠標(biāo)的位置落在己方的棋子上,表示用戶選中了該棋子,下一步將移動(dòng)該子進(jìn)行走棋(也可能用戶下一步將會(huì)選擇己方另外的棋子,總之這一操作會(huì)記錄下用戶所選的將要走的棋子) 。因此,在這里將要完成棋盤、棋子的顯示走棋起始位置和目標(biāo)位置的提示框的顯示。//將帥都在,返回 0} 4 界面設(shè)計(jì)和系統(tǒng)實(shí)現(xiàn) 界面設(shè)計(jì)關(guān)于棋盤和棋子,建了一個(gè)基于對(duì)話框的 MFC 應(yīng)用程序。 if(position[i][j]==R_KING)RedLive=TRUE。j6。想要從列表框中刪除項(xiàng)時(shí),可以使用 (()1)。 } int CGradientProgressCtrl::StepIt() { m_nCurrentPosition+=m_nStep。(percent,amp。 GetClientRect(rectClient)。 CBrush brush。然后將其從中剔除。 short nChessID。所以,如果今后要對(duì)引擎進(jìn)行改進(jìn),提高程序的下棋水平的話,還應(yīng)當(dāng)在此進(jìn)行研究。分析關(guān)系時(shí),首先,對(duì)王的攻擊保護(hù)應(yīng)分離出來(lái)單獨(dú)考慮,因?yàn)閷?duì)王的保護(hù)沒有任何意義,一旦王被吃掉整個(gè)游戲就結(jié)束了。 //存放棋子基本價(jià)值int m_FlexValue[15]。例如,起始位置的車機(jī)動(dòng)性較差,所以下棋講究早出車。在中國(guó)象棋中所要考慮的最基本的幾個(gè)因素包括如下四點(diǎn):子力總和子力是指某一棋子本身所具有的價(jià)值。對(duì)于即將搜索的結(jié)點(diǎn),按照“歷史得分”的高低對(duì)它們進(jìn)行排序,保證較好的走法(“歷史得分”高的走法)排在前面,這樣 AlphaBeta 搜索就可以盡可能早地進(jìn)行“裁剪” ,從而保證了搜索的效率。if (val alpha) //保留最大值alpha = val。由此,在不影響搜索質(zhì)量的前提下避免了搜索“無(wú)價(jià)值的”結(jié)點(diǎn) C 的剩余子結(jié)點(diǎn)的大量工作,從而節(jié)省了寶貴時(shí)間,為在同樣機(jī)器配置下搜索更多的層數(shù)提供了可能。那么下一步,你的對(duì)手的選擇就會(huì)使得棋局發(fā)展成為分值為2 的那個(gè)結(jié)點(diǎn)所表示的局面。用搜索兩層來(lái)看一看“樹的裁剪”對(duì)提高搜索效率的幫助。對(duì)于中國(guó)象棋而言,在中盤時(shí)平均著法數(shù)目大約是 40 種左右,那么搜索 4 層需要檢查 250 萬(wàn)條路線,搜索 5 層需要檢查 1 億條路線,搜索 6 層需要檢查 40 億條路線!AlphaBeta 搜索能在不影響搜索精度的前提下大幅減少工作量。如此,當(dāng)輪到甲走棋時(shí)他會(huì)盡可能地讓局面上的分值大,相反輪到乙走棋時(shí)他會(huì)選盡可能地讓局面上的分值小。他們輪流走棋,目的就是吃掉對(duì)方的將或帥,或者避免自己的將或帥被吃。定義第二個(gè)數(shù)組下標(biāo)為 70, 應(yīng)當(dāng)可以保證十分的安全。行子的半路上不能有其它子阻攔(除了炮需要隔一個(gè)子才能打子之外)以及行子的目的點(diǎn)不能有本方的棋子(當(dāng)然不能自己吃自己了)。 //走法的分?jǐn)?shù) }CHESSMOVE。 x=R_END)//判斷某個(gè)棋子是不是紅色對(duì)于著法的表示,直接借用棋盤數(shù)組的下標(biāo)來(lái)記錄著法的起點(diǎn)和目標(biāo)點(diǎn)。2 棋局表示和著法生成 棋盤和棋子的表示對(duì)于中國(guó)象棋棋盤局面的表示可采用傳統(tǒng)而簡(jiǎn)單的“棋盤數(shù)組” 。 國(guó)內(nèi)外象棋軟件發(fā)展概況最早的象棋軟件是一副可以外出攜帶的電子棋盤,后來(lái)升級(jí)到電視游戲機(jī)。系統(tǒng)使用 MFC 文檔視圖體系結(jié)構(gòu)和 Visual C++開發(fā)工具,實(shí)現(xiàn)了一個(gè)具有一定棋力的中國(guó)象棋人機(jī)對(duì)弈程序。本文首先研究了中國(guó)象棋在計(jì)算機(jī)中的表示問題,討論如何產(chǎn)生著法等一系列相關(guān)內(nèi)容,其次研究了博弈樹的搜索技術(shù)及在此基礎(chǔ)上發(fā)展起來(lái)的相關(guān)剪枝算法。因此,對(duì)游戲開發(fā)過程中的人工智能技術(shù)的研究自然也就成了業(yè)界的一個(gè)熱門研究方向。
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1