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

正文內(nèi)容

基于ios平臺的游戲“五子棋”畢業(yè)論文(存儲版)

2024-07-25 21:03上一頁面

下一頁面
  

【正文】 analyseLine(RIVAL, src)。 analyseLine(RIVAL,src)。 analyseLine(RIVAL, src)。 analyseLine(RIVAL, src)。//將字符轉(zhuǎn)換成int,以利于計算當(dāng)前選手各種狀態(tài)的個數(shù) int line_size = () 。 nodeStates[ i ] == UNANALYSED ) { leftEdge = rightEdge = i 。 ++ index ) { nodeStates[ index ] = ANALYSED 。amp。 line[ rightEdge + 1 ] == EMPTY) ) || ( (rightEdge == line_size 1 || ( rightEdge line_size 1 amp。整個方法的實現(xiàn)思路大概如下:將同一行棋子分為已經(jīng)分析過的和未被分析過的兩種,做一個循環(huán),在這個循環(huán)中,從左到右找出連續(xù)的同一類的棋子一個區(qū)域,且這塊區(qū)域的棋子都是之前未被分析過的,得到這塊區(qū)域的左右邊界,通過左右邊界值的差來得到這塊區(qū)域有這種類型棋子的個數(shù),首先通過連續(xù)的同一類型的個數(shù)來區(qū)分不同子力的情況,比如左右邊界的距離是四的話那一定是五子相連了,所以代表該玩家的代表五子相連的狀態(tài)數(shù)需要加一。下面要介紹在估值算法上找出最佳落子點的搜索算法??梢哉业狞c有那么多,這兩個點是怎么確定的。最后,搜索的過程就類似于上面。在上面的基礎(chǔ)上,我們就可以搜索整棵樹找到最佳下子點了。這就是alpha減枝。在上面的介紹的方法中,是用了極大極小值和alphabeta減枝搜索算法。在每個節(jié)點中,它的估值都是相對于該節(jié)點要下子的一方的,所以我們在不同層的節(jié)點之間傳遞值得時候就需要進行轉(zhuǎn)換,方法就是取負數(shù)。 badNodes[ 0 ].x = badNodes[ 0 ].y = badNodes[ 0 ].win = TIE 。 } return ( search_depth % 2 ) ? badNodes[ 0 ].value : ( badNodes[ 0 ].value ) 。 if ( score = beta ) { return beta 。接下來主要就是使用一個循環(huán)將每個較好節(jié)點的估值取出來,并得到其中估值最大的點作為它的最佳落子點,在每個點求估值過程中,使用了遞歸的方法來求。然而,可以改進最多的是在搜索算法上。這些相似的局面往往也是較好的。但是如果我們在一開始的時候就把alpha,beta限定的比較小,那么整個的搜索過程必將減去更多的枝條。當(dāng)一個對象的引用計數(shù)為0的時候,這個對象就會銷毀,內(nèi)存就得到釋放。這個方法是最先觸發(fā)的一個委托方法。另外一個方法就是在視圖控制器中加載和布局視圖。最后我們看到的視圖都是覆蓋在最上面的視圖,也就是最后添加的子視圖。在iOS應(yīng)用開發(fā)中,各個MVC元素是彼此獨立運作的,可以單獨修改其中一個元素而不用修改其它的。在這個軟件中,我把棋盤的這個視圖直接提出來作為一個視圖類(棋盤類),并作為子視圖添加到視圖控制器的視圖上。首先要設(shè)計出積分榜的視圖,在這里是通過幾個UILabel來表示,并使用它的text屬性將文字顯示出來。然后根據(jù)傳入的這兩個信息更新積分榜以及數(shù)據(jù)庫上的信息。int whiteHistoX[maxChessCount]:用于記錄白子下子的點的行坐標,用于悔棋。int chessType:代表游戲類型,0代表人機對戰(zhàn),1代表人人對戰(zhàn)。點擊屏幕后,可以觸發(fā)一個事件,在這個事件中,我們先判斷用戶點擊的坐標,判斷它點擊的地方是否超過棋盤的范圍,然后通過這個坐標來計算出它是在第幾行第幾列下子,這樣就能將棋盤數(shù)組對應(yīng)位置的值置成玩家的棋子。在人機對戰(zhàn)中,有兩種不同的難度。此時,利用chessCount來對四個數(shù)組相應(yīng)位置置成相應(yīng)的值。調(diào)用這個方法的時候,傳入剛剛下子的棋子顏色(flag),行坐標(row),列坐標(column)。比如,當(dāng)我們需要選擇游戲類型的時候,我們定義并且顯示一個UIActionSheet對象,在這個對象上有兩個按鈕(顯示人機對戰(zhàn)和人人對戰(zhàn))。實現(xiàn)悔棋功能的關(guān)鍵是利用之前記錄黑白子下棋坐標的那四個數(shù)組以及記錄下子步數(shù)的變量chessCount。人人對戰(zhàn)的實現(xiàn)與人機對戰(zhàn)類似,最主要的區(qū)別在于,當(dāng)人機對戰(zhàn)模式中玩家點擊屏幕之后,除了顯示點擊的棋子之外,就要馬上調(diào)用AI算法求出機器人的下子點。 } else{ score = alphaBetaSearch( search_depth + 1 , beta , alpha , (player == MYSELF) ? RIVAL : MYSELF ) 。3,棋盤類判斷勝負是檢查有沒有連續(xù)五個相同顏色的棋子相連,在判斷勝負的函數(shù)中,假如是掃描全部整個棋盤來判斷需要耗費大量的時間。可以通過調(diào)用synchornize方法強制寫入。所以調(diào)用了set方法之后數(shù)據(jù)有可能還沒有寫入磁盤應(yīng)用程序就終止了。但是多個控件對應(yīng)一個委托方法,在調(diào)用委托方法的時候,不能識別是哪一個控件調(diào)用的。解決方法:按照搜索的層次,將第二層到第一層傳遞數(shù)值與其它層次之間分開,因為它不需要進行轉(zhuǎn)換。前面介紹了軟件主要功能,也可以看做是人機對戰(zhàn)功能的實現(xiàn)。此時,我們彈出一個控件提示是哪一方勝利,調(diào)用可以更新積分榜視圖的委托方法來更新視圖,將status變量和顯示游戲狀態(tài)的label設(shè)為游戲結(jié)束。當(dāng)玩家點擊“新局”按鈕之后,游戲需要進入從頭開始的狀態(tài)。然后使用addSubView:的方法將棋子添加到棋盤中。當(dāng)游戲是在人機對戰(zhàn)模式的時候,我們需要記錄下黑子和白子下棋的歷史記錄用于后面的悔棋,這里使用到了whiteHistoX,whiteHistoY,blackHistoX,blackHistoY四個數(shù)組。并且將chessTurn置為機器人的顏色,將下子點的坐標記錄下來以備后面悔棋使用。這樣,棋盤就算畫完了。int firstTag。char chessTurn:代表的是現(xiàn)在輪到哪一方進行下子。實現(xiàn)委托協(xié)議就是要在該類中實現(xiàn)委托協(xié)議中聲明的方法: (void)gameSucess:(char)flag type:(int)gameType。 視圖控制器類設(shè)計在視圖控制器的viewDidLoad:方法中,我們需要將一個個視圖類添加到屏幕上去,在這里,我們有三部分的視圖需要添加:積分榜,三個按鈕和棋盤。但是顯示棋盤,將棋子添加到棋盤上,判斷游戲勝利等等這些功能都是需要在視圖類以及視圖控制器類中實現(xiàn)的。視圖本身是一個有各種控件的類,是靜態(tài)的,而模型層可以控制視圖的顯示,將它顯示在屏幕上,這就變成了動態(tài)的。差不多所有的用戶界面的類都是繼承自UIView以及它的父類UIResponder,應(yīng)用程序中所有可見的元素都是視圖提供的。在一個程序中,視圖控制器類的代碼量往往占據(jù)了很大一部分。應(yīng)用程序委托負責(zé)在啟動時初始化一個窗口系統(tǒng),在結(jié)束的時候包裝一下業(yè)務(wù),而且它還可以在內(nèi)存警告的時候進行一定的處理。當(dāng)我們創(chuàng)建一個對象時,它的引用計數(shù)就記為1。Failsoft alphabeta:在一般的alphabeta搜索中,在開始搜索的時候,我們調(diào)用了alphabeta(depth,alpha,beta)。根據(jù)部分已經(jīng)搜索的結(jié)果來調(diào)整將要進行搜索的節(jié)點順序是一個可行的方向。首先是估值算法,估值算法是搜索算法的基礎(chǔ),每調(diào)用一次搜索算法就需要調(diào)用若干次估值算法。在得到這兩個數(shù)組后,首先判斷它們中估值最大的點,假如較好點的數(shù)組最大的點下子之后就可以贏得了比賽,那么就沒有必要搜索下去,直接返回它的值,假如它是第二層的點(在第一層中找出的,所以search_depth= =1),那么可以直接將該點作為最佳落子點。 } else{ score = alphaBetaSearch( search_depth + 1 , beta , alpha , (player == MYSELF) ? RIVAL : MYSELF ) 。 } //自己不贏,敵方贏了,這下一步得走在敵方的一步上 if ( badNodes[ 0 ].win == WIN ) { if ( search_depth == 1 ) { = badNodes[ 0 ].x 。//估值結(jié)果 Node *goodNodes = new Node[ numOfGoodNodes ] 。它的原理是這樣子的:在原來的極小值點中,我們需要找到相對于機器人的值最小的一點,而相對于機器人估值較小的一點就是相對于玩家估值較大的一點,所以就可以轉(zhuǎn)換為求相對于玩家估值較大的一點,這就是極大值點。例如在上圖beta減枝示例圖中,所以他還會繼續(xù)往下搜索,這就照成了不必要的時間損耗。所以B下面的C點都必須要大于10。在上圖中,第二層和第四層都是極大值點,第三層是極小值點。在這里,我們假設(shè)只搜索到了第四層。我們要找最佳下子點是存在于第二層中的點。最后將己方的分值與對方的分值相減就構(gòu)成了最后這個棋局相對于那時刻下子那一方的估值了。 line[ leftEdge 1 ] == EMPTY) )) { numOfState[ current_player ][ SLEEP_FOUR ] ++ 。 (rightEdge line_size 1 amp。amp。 for( int index = leftEdge 。 ++ i ) { if ( line[ i ] == player amp。139。 a++) { src += board[a][ai]。 a++) { src += board[a][a+i]。 a++) { src += board[a][MAX_LINE1+ia]。 a++) { src += board[a][ia]。 analyseLine( MYSELF , src_col ) 。下面的函數(shù)就是計算子力個數(shù)的主函數(shù),代碼如下:void Evaluate::findStateNum( char board[ MAX_LINE ][ MAX_LINE ] ){ //在水平和垂直方向搜索 for( int i = 0 。所以,我們先數(shù)出己方和對方每一種子力各有幾種,然后計算出己方子力總的分值和對方子力的總的分值,在一般的情況下,我們在雙方的總分值基礎(chǔ)上加上各自的子力部分總分值就構(gòu)成了最后估值的大部分。首先分析棋盤不同點本身創(chuàng)造的分值。 估值算法分析與實現(xiàn)估值算法就是將整個棋盤相應(yīng)的分值計算出來。4 五子棋AI算法分析與實現(xiàn) 算法總體概況首先介紹在該程序中棋盤的表示,我用char型的值來代表黑子和白字,黑子是機器人,白子是玩家。主循環(huán)模塊:轉(zhuǎn)換下子的一方的顏色。4,人機對戰(zhàn)功能需要提供玩家悔棋功能。OPENSTEP 在自由軟件基金會的實現(xiàn)名稱為 GNUstep。ObjectiveC 最初源于 NeXTSTEP 操作系統(tǒng),之后在 OS X 和 iOS 繼承下來。從功能角度來說,iOS和Android還是比較類似的,都具備觸摸屏,高級圖形顯示以及上網(wǎng)功能。而隨著計算機和網(wǎng)絡(luò)的不斷發(fā)展,五子棋已經(jīng)完全可以脫離棋盤的限制。三:指活三和眠三。陰線:棋盤的兩條對角線及與它們平行的交叉點間不可見斜線的總稱。1 手機五子棋游戲介紹 五子棋游戲規(guī)則介紹五子棋的標準棋盤大小是15*15,由雙方各執(zhí)一種顏色的棋子,分別在棋盤橫豎線交叉的位置擺上棋子。機器人的功能通過估值,alphabeta剪枝搜索,負極大值等算法來實現(xiàn)。五子棋現(xiàn)在已經(jīng)發(fā)展為一種非常重要的棋盤游戲。同樣,近年來也興起了平板這種新的數(shù)碼產(chǎn)品,這是一種嶄新的產(chǎn)物。我們也能看到,傳統(tǒng)的PC行業(yè)的增長已經(jīng)開始放慢,國際上一些很大的傳統(tǒng)PC廠家例如惠普,戴爾在PC行業(yè)的利潤已經(jīng)越來越少,它們都在積極的尋求轉(zhuǎn)型。人工智能。接下來,就要在棋盤類上面進行一些處理工作,比如點擊各個按鈕觸發(fā)的事件,在游戲過程中玩家點擊棋盤觸發(fā)的事件,判斷游戲輸贏,悔棋和認輸功能的實現(xiàn)等等。近年來,隨著智能手機的流行,出現(xiàn)了許多在移動操作系統(tǒng)上的手機應(yīng)用。接下來,開始學(xué)習(xí)iOS應(yīng)用的構(gòu)建原理(學(xué)習(xí)視圖控制器與視圖的使用方法,程序委托的使用等)以及一些常用控件的使用,并嘗試在Xcode工具上搭建一些簡單的界面。五子棋算法一般包括估值算法以及搜索算法,估值算法的實現(xiàn)雖然代碼量較大但是理解起來不是特別難,而我在學(xué)習(xí)搜索算法的過程中卻在一開始的時候無法理解他的alphabeta剪枝以及負極大值算法的意思。t understand the alpha beta pruning and negative maximum value algorithm. And after finished the algorithm , it still exist many problems, it is unable to search the right move place, after some troubleshooting and improvement, the realiz
點擊復(fù)制文檔內(nèi)容
電大資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1