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

正文內容

五子棋游戲的設計與實現畢業(yè)論文-文庫吧

2025-06-13 17:20 本頁面


【正文】 樂見。該游戲功能強大,界面簡單,用戶在使用方面不存在任何障礙。其開發(fā)具有很強的經濟性。本游戲適用于 Windows 操作系統(tǒng)之上 , 對于該游戲的推廣使用提供了很好的平臺。該游戲使用C語言編寫,具有很強的移植性,使其可以運行很方便。在操作上主要憑借使用 Windows鍵盤操作,方便簡單。使用前只要對用戶進行簡單的說明即可。該款游戲主要是由以下五個模塊組成: 五子棋游戲人機對戰(zhàn)雙人對戰(zhàn)悔棋功能退出功能判斷輸贏 游戲功能圖 五子棋是兩方之間進行的競技活動,專用棋盤為15*15,五連子的方向為橫、豎、斜;任一方在棋盤上形成橫向、豎向、斜向的連續(xù)的相同顏色的五個(含五個以上)時即為該方勝利;在棋盤上以對局雙方均不可能形成五連為和棋。黑白雙方依次落子,由黑方先下,由于先下一方在局面上占優(yōu),所以五子棋規(guī)則分為禁手和無禁手兩種。 禁手規(guī)則:禁手是針對先行的黑棋而言,以限制黑棋的先行優(yōu)勢為目的。對局中如果黑棋違反禁手規(guī)則將被判負。以中國五子棋競賽規(guī)則為例,有三三禁手(黑棋一子落下時同時形成兩個或兩個以上的活三,此子必須為兩個活三共同的構成子)、四四禁手(黑棋一子落下同時形成兩個以上的沖四或活四)、長連禁手(黑棋一子落下形成一個或一個以上的長連)。無禁手指不對黑棋的先行優(yōu)勢做任何限制。 本系統(tǒng)采用的是無禁手規(guī)則。游戲開始后,: 電腦落子是否是否玩家落子(白)任意方向有五子相連或棋盤落滿任意方向有五子相連或棋盤落滿是電腦先手電腦落子人機對戰(zhàn)否開始游戲雙人對戰(zhàn)是白方落子游戲結束否是黑方落子任意方向有五子相連或棋盤落滿任意方向有五子相連或棋盤落滿否否否是是是玩家落子(黑)任意方向有五子相連或棋盤落滿任意方向有五子相連或棋盤落滿否 游戲運行流程圖當系統(tǒng)運行后,首先看到的是一個選擇游戲模式(雙人,人機)的界面,根據要求選擇后,有兩種情況,第一種是雙人模式,根據游戲的設定先黑方落子,然后白方落子,而系統(tǒng)此時需要更新棋盤的狀態(tài)和判斷是否產生輸贏,若是產生則游戲結束,若沒有產生輸贏,則判斷是否棋盤已經落滿棋子,若已經落滿棋子,則判定為和棋,否則另一方落子,如此循環(huán),直到產生輸贏或和棋;另一種是人機模式,選擇該模式后,會看到設置界面,可以選擇誰是先手,有兩種選擇電腦先手、玩家先手,若電腦先手則根據設定,電腦執(zhí)黑子先下,之后白方落子,此時因為選擇了電腦先手,所以電腦落子時優(yōu)先進攻,只有在進攻的權值小于防守的權值時優(yōu)先防守,(此處涉及到電腦的人工智能,此部分的設計概要詳見本章節(jié)的電腦智能落子部分),每當棋盤落子后電腦立即更新棋盤的具體信息并判斷是否已經產生輸贏若是產生則游戲結束,若沒有產生輸贏,則判斷是否棋盤已經落滿棋子,若已經落滿棋子,則判定為和棋,否則另一方落子,如此循環(huán),直到產生輸贏或和棋,玩家先手,則玩家執(zhí)黑子先落子,然后電腦落白子,此時電腦落子優(yōu)先防守,其他部分與電腦先手一樣。此模式較為簡單是后面實現人機模式的鋪墊。首先用循環(huán)語句和制表符畫出整個棋盤,然后利用繪圖函畫出棋子,然后制定自己的落子規(guī)則(包含輸贏規(guī)則),并用循環(huán)語句實現黑白子的輪流下子,如此就實現了雙人對戰(zhàn)的目的。本系統(tǒng)中此功能的實現是在雙人模式已經實現的情況下實現,只是把雙人模式中的其中一個人換成電腦操作(),在每次落子之后,調用判斷輸贏函數判斷是否產生輸贏或和棋,如果產生則游戲結束,如果沒有產生則繼續(xù)游戲,直到產生輸贏或和棋,或退出游戲為止。電腦博弈模仿人類下棋,傳統(tǒng)算法使用的是博弈樹。兩人游戲,甲有很多位置選擇落子,乙也有很多相對應的下法,如果所有的方式列表就構成一棵樹,就是搜索樹,也被稱為博弈樹。樹的根節(jié)點先手的第一步位置,下面的走棋方法構成樹的子節(jié)點,直到游戲結束。此處的五子棋棋盤是1515的,搜索空間是一個巨大的數字。博弈算法的任務是在這些呈幾何級數上升的子節(jié)點中選出最優(yōu)的節(jié)點,從而贏得比賽。整個算法分為搜索和估值兩部分,估值是評估所有可能的落子位置的評價,選擇評價最高的位置為最終落子位置。本系統(tǒng)的估值函數為單點估值函數。單點估值函數的基本思想是評估當前的靜態(tài)情況下,遍歷棋盤,對棋盤的每個非空的位置的四個方向進行分析評估(橫向、豎向、兩條對角線),統(tǒng)計每一個棋型的數量(連五型、沖四型、活四型、活三型、死三活二型),不同的棋型根據實際情況中玩游戲時的經驗確定一個不同的權重值,最后還有位置分數的加權(不僅要考慮空點對自己的價值,也要考慮其對對方的價值),如此就獲得了棋盤上的空點的估值。單點估值函數只能估計一個空點的價值,對當前的棋局,把所有的空點對己方的有利程度總和和不利程度總和相關就可得出全局價值。由文獻[5. 6. 14]可知。本系統(tǒng)中設定了以下幾種棋型和相應的權值: 防守棋型及其相應權值表棋型連五型沖四型活四型活三型死三活二型權值2000001100600024020 進攻棋型及其相應權值表棋型連五型沖四型活四型活三型死三活二型權值2000000200024000850125根據不同棋型的權值可以計算出棋盤的各點的價值之和,用Vij表示點(i,j)的總價值,用Aij表示點(i,j)的進攻價值,用Dij表示點(i,j)的防守價值,用dt表示防守優(yōu)先級數,at表示進攻優(yōu)先級數,其中防守和進攻優(yōu)先級數是電腦在比較點(i,j)的進攻總價值和防守總價值后賦予的,給總價值大的類型設定優(yōu)先級數為2,而價值小的則為1。則點(i,j)的進攻總價值為該點的所有進攻棋型的和,計算方法為:;該點的防守總價值為該點的所有防守棋型的和,計算方法為:。則該點的總價值為:。用此方法就可遍歷棋盤上的所有的空點的總價值,然后比較所有總價值的大小,總價值最大的點即為對自己最有利的點?;谄迨瞧寰诸愑螒虻谋仨毜墓δ?,在游戲時,如果有人悔棋時,立即調用悔棋功能函數,本系統(tǒng)中由于棋盤上的所有的交點都有一個二維數組的一組數據與之相對應,而且每次落子后會有一個二維數組記錄相應的信息(步數,棋子顏色),因此此功能的實現依靠的是C中的循環(huán)函數。本模塊功能的實現依靠的是單點估值函數的思想,即每次落子之后,遍歷以該點為坐標原點以5為半徑的棋盤的交點,分析原點的四個方向(橫向、豎向、兩條對角線),判斷是否有連五型棋型,若有則產生輸贏,若沒有則遍歷整個棋盤,查看是否棋盤已經下滿,若已下滿則判定為和棋,否則繼續(xù)游戲。本模塊是整個游戲系統(tǒng)的平臺性模塊,之后所有的功能都將依附該模塊來體現,主要需實現棋盤的繪制與游戲說明。本游戲系統(tǒng)選擇的是15*15的棋盤,利用制表符字符串打印輸出棋盤,并且特別標出天元位置,與四方星位。游戲的說明主要有棋局動態(tài)信息顯示,如何移動光標,如何實現落子,如何悔棋以及退出。利用switch()語句,當光標坐標(x,y)中x=0,y=0則畫出棋盤的左上角“┏”,y=14則畫出棋盤的右上角“┓”,0y14時則出棋盤的上邊線“┯”;x=3或x=11時,y=0則畫出棋盤的左邊線“┠”,y=3或y=11則畫出棋盤上的四方星位“╋”,y=14則畫出棋盤的右邊線“┨”,0y14時則出棋盤的交叉點“┼”;x=7,y=7則畫出棋盤的天元“╋”,0y14時則出棋盤的交叉點“┼”;x=14,y=0則畫出棋盤的左下角“┗”,y=14則畫出棋盤的右下角“┛”,0y14時則出棋盤的下邊線“┷”;當x為0到14的其他的值時,y=0則畫出棋盤的左邊線“┠”,y=14則畫出棋盤的右邊線“┨”,y為0到14的其他的值時畫出棋盤的交叉點“┼”[7]。棋盤上的交點稱為位點(包括交叉點,天元,四方星位,邊界交點)。具體實現如以下程序(僅部分主要代碼):void printnode(NODE chessboard[][15], int x, int y) // 打印棋盤上的一個點 { textcolor(CHESSBOARD)。 if(chessboard[x][y].step==0) { if (x== amp。amp。 y==) textcolor(CURSOR)。 // 如果光標在這個點,改成光標顏色 switch(x) { case 0: if(y==0) printf(┏)。 // 左上角 else if(y==14) printf(┓)。 // 右上角 else printf(┯)。 // 上邊線 break。 case 3: if(y==0) printf(┠)。 // 左邊線 else if(y==3 || y==11) printf(+)。 // 星位 else if(y==14) printf(┨)。 // 右邊線 else printf(┼)。 // 交叉點 break。 case 7: if(y==0) printf(┠)。 // 左邊線 else if(y==7) printf(+)。 // 星位 else if(y==14) printf(┨)。 // 右邊線 else printf(┼)。 // 交叉點 break。 case 11: if(y==0) printf(┠)。 // 左邊線 else if(y==3 || y==11) printf(+)。 // 星位 else if(y==14) printf(┨)。 // 右邊線 else printf(┼)。 // 交叉點 break。 case 14: if(y==0) printf(┗)。 // 左下角 else if(y==14) printf(┛)。 // 右下角 else printf(┷)。 // 下邊線 break。 default: if(y==0) printf(┠)。 // 左邊線 else if(y==14) printf(┨)。 // 右邊線 else printf(┼)。 // 交叉點 } } }void printchessboard(NODE chessboard[][15]) {// 輸出整個棋盤 int i,j。 char letter[]={ABCDEFGHIJKLMNO\n}。 for(i=0。i15。i++) { // 行 textcolor(TEXTS)。 // 改為文本顏色 printf(%2d,15i)。 // 打印行坐標 for(j=0。j15。j++) // 列 printnode(chessboard,i,j)。 // 打印棋盤的每一塊 textcolor(TEXTS)。 printf(\n)。 } textcolor(TEXTS)。 //改為文本顏色 printf( %s,letter)。 //打印列坐標 printf( 移動:方向鍵 下棋:ENTER\n 悔棋:U 退出:F12\n)。 } 人機對戰(zhàn)玩家先手初始界面 人機對戰(zhàn)電腦先手初始界面 雙人對戰(zhàn)模式游戲的初始界面與人機對戰(zhàn)電腦先手初始界面一樣。本模塊是在畫出棋盤的基礎下實現的,要求依次輪流畫出黑白兩種顏色的棋子,且位置必須在棋盤的位點之上,并且要求必須先畫黑棋,位置為棋盤的天元位。 根據棋盤上光標所在位置來下棋,如果當前光標所在位置上有棋子,則不能在此處落子,則需按下鍵盤上的方向鍵來移動光標到沒有棋子,且有利于局勢的位置按下Enter(回車鍵)落子[7]。具體實現如以下程序(僅部分主要代碼):else if(chessboard[x][y].color==0) { // 如果是白棋
點擊復制文檔內容
高考資料相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1