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

正文內(nèi)容

pvp五子棋游戲的設(shè)計(jì)與開發(fā)畢業(yè)設(shè)計(jì)word格式(編輯修改稿)

2025-01-04 06:10 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 的類都是又這 3 個(gè)主類延伸出去的。在具體實(shí)現(xiàn)的時(shí)候再介紹其作用。見圖 41。 初 始 化主 循 環(huán) 控 制 模 塊盤 面 分 析 填 寫 棋型 表輪 到 電 腦電 腦 下 子玩 家 下 子輪 到 玩 家勝 負(fù) 判 斷否 則開 始勝 利 棋盤 圖 41 五子棋程序流程圖 南京機(jī)電職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)(論文) 11 棋盤如圖 1,具體代碼如下: String line = a b c d e f g h i j k l m n o。 char [] rowNum1 = {39。139。,39。239。,39。339。,39。439。,39。539。,39。639。,39。739。,39。839。,39。939。}。 char [] rowNum2={39。139。,39。039。,39。139。,39。139。,39。139。,39。239。,39。139。,39。339。,39。139。,39。439。,39。139。,39。539。}。 這部分為棋盤的邊界標(biāo)識(shí)符,是必須要有的。用字符數(shù)組存儲(chǔ),最后確定位置放上去即可。 棋盤的繪制: private static int xp。 // 棋子 X坐標(biāo) private static int yp。 // 棋子 Y 坐標(biāo) public void paint(Graphics gc){ (gc)。 //()。 //()。 ()。 //(new Color(255, 255, 240))。 //畫橫向標(biāo)識(shí)符 (line,25,15)。 // 畫豎向標(biāo)識(shí)符 for(int i=0。i9。i++){ (rowNum1,i,1,10,35+i*30)。 } for(int i=9,j=0。i15。i++,j+=2){ (rowNum2,j,2,10,35+i*30)。 } // 畫棋盤 for (int i = 0。 i 15。 i++) { (30, 30 + i * 30, 450, 30 + i * 30)。 //行 (30 + i * 30, 30, 30 + i * 30, 450)。 //列 } (25, 25, 455, 25)。 (25, 25, 25, 455)。 (25, 455, 455, 455)。 (455, 25, 455, 455)。 //面板初始化 南京機(jī)電職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)(論文) 12 for(int i=0。i15。i++){ for (int j = 0。 j 15。 j++) { xp=16+i*30。 yp=16+j*30。 if (board[i][j] == 1){ ()。 (xp,yp,28,28)。 //(black, 16 + i * 30, 16 + j * 30, this)。 } if (board[i][j] == 2){ ()。 (xp,yp,28,28)。 //(white, 16 + i * 30, 16 + j * 30, this)。 } } } } 棋子 確定下子的坐標(biāo)( xp,yp)畫特定大小的橢圓,這里的坐標(biāo)指棋子相對(duì)棋盤的絕對(duì)坐標(biāo)。 private static int xp。 // 棋子 X坐標(biāo) private static int yp。 // 棋子 Y 坐標(biāo) if(col==1) ()。 else ()。 (xp,yp,10,28,28)。 要判斷四個(gè)方向,橫向、豎向、以及 2個(gè)斜向。思想還是比較簡(jiǎn)單,相同顏色連成五子即勝利,網(wǎng)上有些網(wǎng)友評(píng)論說完整的判斷勝負(fù)條件包括連五和活四,我覺得完全沒必要,活四還要檢查兩邊的棋子,雖然運(yùn)算量不大,但五子棋的標(biāo)準(zhǔn)就是連五即勝,一步之差,我們既要遵守規(guī)則,也要簡(jiǎn)化代碼實(shí)現(xiàn)盡完整的功能。 我們要事先建立一個(gè)盤面數(shù)組 board[ ][ ],即棋型表,數(shù)組的每一個(gè)元素對(duì)應(yīng)棋盤上的一個(gè)交叉點(diǎn),用‘ 0’表示空位,‘ 1’表示黑棋,‘ 2’表示白棋。由于代碼太多,下面給出了一般狀況的判斷勝負(fù)函數(shù) ,及以坐標(biāo)( x,y)為中心的 9X9 矩形,只能在棋盤的內(nèi)部,如果超過棋盤,就要另外考慮。下面的代碼就是一般情況,整個(gè)矩形在棋盤內(nèi)部的時(shí)南京機(jī)電職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)(論文) 13 候的判斷勝負(fù)條件,如圖 42。 圖 42 獲勝 勝負(fù)判斷條件以下給出了 X 方向的代碼: protected boolean judge(int x,int y,int clr){ int i=0,j=0,count=0。 // x 方向 for(i=0,count=0。xi=0amp。amp。i5。i++){ if (clr==board[xi][y]){ count++。 } else{ break。 } // (( +x+ , +y+ )+count = +count)。 if(count==5) return true。 } for(i=1。x+i15amp。amp。i5。i++){ if(clr==board[x+i][y]){ count++。 }else{ break。 南京機(jī)電職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)(論文) 14 } if(count==5) return true。 } return false。 } 為保證公平,先下子的就有禁手。但是我們一般沒有這個(gè)規(guī)則限制,都是輪流先下子。理論上是這樣的。但很多專家表明,先下子有很大的幾率獲勝,即使有禁手,先下子的一方還是有很大的優(yōu)勢(shì),我覺得對(duì)于我們一般玩家而言,這些規(guī)定可以不考慮。 判斷勝負(fù)的不管是單機(jī)還是玩家相互游戲,都必須開服務(wù)端,因?yàn)榕袛鄤儇?fù)是放在里面的。如果有一方獲勝,彈出提示框,如果確認(rèn)則清空棋盤繼續(xù)新游戲。 public void getVictory(Message msg){ (null, You Win The Game, Congratulations, )。 //繼續(xù)新游戲 (Player2)。 newGame()。 } 需要注意的一點(diǎn)是落下的棋子如果離任何一方的邊界小于 4,則以邊界為限制判斷是否有一方獲勝,這樣的話也要考慮多種方向,但原理還是和基本情況是一樣的。 這部分也屬于網(wǎng)絡(luò)套接字編程的經(jīng)典應(yīng)用,根據(jù)服務(wù)器地址連接特定端口。 網(wǎng)絡(luò)部分很簡(jiǎn)單,但是我也做出了自己的特色,就是事件處理 ,做工可根據(jù)具體情況修改,雖然沒有多少實(shí)用價(jià)值,但是也盡量使程序留有擴(kuò)展性。下面給出了 Message 的代碼。 /** * 消息列表 * type = 1 // 請(qǐng)求連接 , msg = 連接者名字 * type = 2 // 放棋子 * type = 3 // 請(qǐng)求和其他人游戲 * type = 4 // 拒絕游戲請(qǐng)求 * type = 5 // 同意請(qǐng)求 * type = 6 // 發(fā)送勝利消息 南京機(jī)電職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)(論文) 15 * type = 7 // 斷開連接請(qǐng)求 * type = 8 // 保存游戲,但是不放在磁盤上,在下一局開始時(shí)將會(huì)丟失 * type = 9 // 添加新的玩家到所有客戶端的玩家列表 * type = 10// 響應(yīng)信息 type ==1 * type = 11// 和玩家游戲 ,msg 保存玩家 的名字 ,創(chuàng)建游戲的玩家設(shè)置游戲 * type = 12//信息設(shè)置 * type = 13// 設(shè)置玩家顏色 * type = 14// msg= 接受請(qǐng)求的一方設(shè)置 * type = 15// 服務(wù)端更新信息 * type = 16// 發(fā)送控制或錯(cuò)誤信息 * type = 17// 游戲失敗 * type = 18// 服務(wù)端套接字關(guān)閉 * type = 19// 玩家結(jié)束游戲及更新 * tyep = 20// 電腦獲勝 / 玩家獲勝 */ SOCKET 監(jiān)聽端口,如果有玩家則更新玩家 列表,如果雙擊除自己以外的玩家,則可以開始游戲,發(fā)送游戲請(qǐng)求,如果同意則返回棋子顏色并開始游戲,同時(shí)清空玩家列表。每一下子,把坐標(biāo)傳給服務(wù)端,并在 2端顯示出來,并且判斷勝負(fù)。如果,有一方獲勝,則提示消息通知雙方,確定則繼續(xù)開始新游戲。 服務(wù)端開啟服務(wù)監(jiān)聽線程和客戶端,如圖 43,如果有玩家知道服務(wù)器 IP 地址,即可選擇在線玩家進(jìn)行聯(lián)網(wǎng)游戲,如圖 44。 雙擊除自己以外的一個(gè)玩家,發(fā)出游戲請(qǐng)求,同時(shí)要確定自己棋子的顏色,用 MSG發(fā)回服務(wù)端 。如果被拒絕,則返回原來 的狀態(tài)。 if(==1){ ss = new String(white)。 圖 23 服務(wù)端監(jiān)聽 圖 43 服務(wù)端監(jiān)聽 南京機(jī)電職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)(論文) 16 (2)。 } else{ ss = new String(black)。 (1)。 } 圖 44 邀請(qǐng)游戲 AI 廣義上來講,博弈是指在一定的環(huán)境條 件和一定的規(guī)則約束下,依靠自己所能夠掌握的信息,從各自選擇的行為或是策略進(jìn)行選擇并加以實(shí)施,并從各自取得相應(yīng)結(jié)果或收益的過程。馮 諾伊曼 ( John von Neumann,19031957)和摩根斯坦恩( Oskar Margenstern, 19021977)在 1944 年出版了《博弈論與經(jīng)濟(jì)行為》( Theory of Games and Economic Behavior)一書 中,最早地提出了關(guān)于博弈論的概念。但是,對(duì)于非合作、純競(jìng)爭(zhēng)型博弈,諾伊曼所解決的只有二人零和博弈。在這里所抽象化后的博弈問題是, 已知參與者集合 (兩方 ),策略集合 (所有棋著 ),和盈利集合 (贏子輸子 ),最終是想去找到一個(gè)理論上的解或平衡,也就是對(duì)參與雙方來說都最合理、最優(yōu)的具體策略。 而在這里狹義的講,博弈論主要是研究棋手們落子中理性化、邏輯化的部分,并將其系統(tǒng)化為一門科學(xué)。換言之,博弈就是研究個(gè)體如何在錯(cuò)綜復(fù)雜的相互影響中得出最合理的策略,博弈論正是衍生于古老的游戲或曰博弈如象棋、撲克等。數(shù)學(xué)家們將具體的問題抽象化,通過建立自完備的邏輯框架、體系研究其規(guī)律及變化。 參考了很多五子棋算法,大部分思想差不多,就是搜索估值確定重要性,然后選 取最大的一個(gè)點(diǎn)下子。具體做法如下:為電腦和玩家各建立一張表,用來存放棋型數(shù)據(jù),比如南京機(jī)電職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)(論文) 17 “ 20”代表“沖四”的點(diǎn),用“ 15”代表“活三”的點(diǎn),那么在計(jì)算重要性時(shí),就可以根據(jù) 2015 得出前者比后者重要,下子時(shí)電腦便會(huì)自動(dòng)選擇“沖四”的點(diǎn),這里還要說明一點(diǎn)的事,還要考慮四個(gè)方向。因?yàn)橛锌赡苡袕?fù)合棋型,比如“四三 ” ..從第一步起,不管
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1