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

正文內(nèi)容

網(wǎng)絡(luò)對戰(zhàn)軍棋游戲的設(shè)計和實現(xiàn)畢業(yè)設(shè)計-文庫吧

2025-06-15 12:17 本頁面


【正文】 ames中所有長度大于5的字符串,就可以寫:var longname = from n in names 5 select n。這樣就得到一個新的字符數(shù)組longname,其中包含了所需要的結(jié)果。這種語句稱作查詢語句,與SQL語句唯一的區(qū)別是C中的查詢語句往往把select子句放到最后(這反而倒有些類似于中文的閱讀順序了)。初次看到這樣一個語句,可能會有很大疑問:這還是C語言嗎?這的確是合乎語法規(guī)則的C代碼,而且編譯器可以識別這種語法。然而實際上,C編譯器并不會對這種語法進(jìn)行實際的的編譯,而是將其翻譯為正常的方法調(diào)用。C C 新增 dynamic關(guān)鍵字,提供動態(tài)編程(dynamic programming),把既有的靜態(tài)物件標(biāo)記為動態(tài)物件,類似javascript, Python 或 Ruby[12]。,有專門UDP編程的UdpClient類。這個類提供更直觀的易于使用的屬性和方法,從而降低UDP編程的難度。UdpClient類的構(gòu)造函數(shù)有以下幾種格式:UdpClient()UdpClient(int port)UdpClient(IPEndPoint iep)UdpClient(string remoteHost,int port)UdpClient的常用方法如下。1. Send()方法調(diào)用Send()方法來實現(xiàn)發(fā)送數(shù)據(jù),但是在將數(shù)據(jù)發(fā)送到遠(yuǎn)程主機后,不接受任何形式的確認(rèn)。該方法返回數(shù)據(jù)的長度,可用于檢查數(shù)據(jù)是否已被正確發(fā)送。常用格式:[格式1]:Send(byte[] data,int length,IPEndPoint iep)參數(shù):data為發(fā)送的數(shù)據(jù)(以字節(jié)數(shù)組表示),length為發(fā)送的數(shù)據(jù)長度,iep是一個IPEndPoint對象,它表示要將數(shù)據(jù)發(fā)送到的主機和端口。返回值是已發(fā)送的字節(jié)數(shù)。知道遠(yuǎn)程計算機IP地址使用此格式。下面是用UdpClient發(fā)送UDP數(shù)據(jù)包的具體調(diào)用例子:IPAddress HostIP=new (“遠(yuǎn)程計算機IP地址”);IPEndPoint host=new IPEndPoint(HostIP ,8080)。(“發(fā)送的字節(jié)”,“發(fā)送的字節(jié)長度”,host);[格式2]:Send(byte[] data,int length,string HostName,int port)參數(shù):data為發(fā)送的數(shù)據(jù)(以字節(jié)數(shù)組表示),length為發(fā)送的數(shù)據(jù)長度,hostname為要連接到的遠(yuǎn)程主機的名稱,port為要與其通信的遠(yuǎn)程端口號,返回值是已發(fā)送的字節(jié)數(shù)。()Public byte[] Receive(ref IPEndPoint remoteEP);參數(shù)remoteEP是一個IPEndPoint類的實例,它表示網(wǎng)絡(luò)中發(fā)送此數(shù)據(jù)包的節(jié)點。如果指定了遠(yuǎn)程計算機要發(fā)送到本地機的端口號,也可以通過偵聽本地端口號來實現(xiàn)對數(shù)據(jù)的獲取,下面就是通過偵聽本地端口號“8080”來獲取信息代碼:Server=new UdpClient();receivePoint=new IPEndPoint(new IPAddress(“”),8080);Byte[] recData=(ref receivePoint);用于在指定的本機端口上接收數(shù)據(jù),并將接收到的數(shù)據(jù)作為byte數(shù)組返回。3. JoinMulticastGroup()方法添加對地址發(fā)送,用于連接一個多播組。()方法關(guān)閉連接。UDP是無連接協(xié)議,客戶端只需要將服務(wù)器的地址以及端口填寫正確,對方一定收得到。就像你到郵局去寄信,你只要把收信人的地址寫正確,不管寫不寫你的地址,別人一定都收得到[13]。的UdpClient類UdpClient類開發(fā)UDP程序要實現(xiàn)接收數(shù)據(jù)和發(fā)送數(shù)據(jù)。具體過程如下。(1) 在發(fā)送方,調(diào)用Send方法UdpClient publisher=new UdpClient(“”,8899);Byte[] buffer=null。Encoding enc=。String str =info。//info為要傳送的字符串信息Buffer=(())。(sddata,)。//傳送信息到指定的計算機或者UdpClient SendUp=new UdpClient()。remoteIP=(“”);IPEndPoint remoteep=new IPEndPoint(remoteIP,8899);Byte[] buffer=null。Encoding enc=。String str=info。Buffer=(())。(buffer,remoteep)。//傳送信息(2) 在接收方,調(diào)用Receive方法來接收數(shù)據(jù);Udpclient=new UdpClient(8899);//偵聽本地的端口號8899Remote=null;Encoding enc=。//設(shè)定編碼類型Byte[] data=(ref remote)。//得到對方發(fā)送來的信息String strData=(data)。//字節(jié)數(shù)據(jù)變換為字符串strData P2P技術(shù)PeerToPeer即點對點,通常簡寫為P2P。所謂網(wǎng)絡(luò)中的點對點,其實可以看成是一種對等的網(wǎng)絡(luò)模型。P2P其實是實現(xiàn)網(wǎng)絡(luò)上不同計算機之間,不經(jīng)過中繼設(shè)備直接交換數(shù)據(jù)或服務(wù)的一種技術(shù)。P2P由于允許網(wǎng)絡(luò)中任一臺計算機可以直接連接到網(wǎng)絡(luò)中其他計算機,并與之進(jìn)行數(shù)據(jù)交換,這樣既消除了中間環(huán)節(jié),也使得網(wǎng)絡(luò)上的溝通變得更容易、更直接。P2P作為一種網(wǎng)絡(luò)的模型,它有別于傳統(tǒng)的客戶/服務(wù)器模型??蛻?服務(wù)器一般都有預(yù)定義的客戶機和服務(wù)器。而在P2P模型中并沒有明確的客戶端和服務(wù)器,但其實在P2P模型中,每一臺計算機即可以看成是服務(wù)器,也可以看成是客戶機。在網(wǎng)絡(luò)中,傳統(tǒng)上的客戶/服務(wù)器模型中,發(fā)送服務(wù)請求或者發(fā)送數(shù)據(jù)的計算機,一般稱為客戶機;而接受、處理服務(wù)或接收數(shù)據(jù)的計算機稱為服務(wù)器。而在P2P網(wǎng)絡(luò)模型中,計算機不僅接收數(shù)據(jù),而且發(fā)送數(shù)據(jù),不僅提出服務(wù)請求,還接受對方的服務(wù)請求。P2P是一種用于不同PC用戶之間,不經(jīng)過中繼設(shè)備直接交換數(shù)據(jù)或服務(wù)的技術(shù),它允許Internet用戶直接使用對方的文件。每個人可以直接連接到其他用戶的計算機,并進(jìn)行文件的交換,而不需要連接到服務(wù)器上再進(jìn)行瀏覽與下載。因為消除了中間環(huán)節(jié),P2P技術(shù)使得網(wǎng)絡(luò)上的溝通變得更容易、更直接。P2P改變了Internet現(xiàn)在的以大網(wǎng)站為中心的狀態(tài),重返“非中心化”,并把權(quán)限交還給用戶[14]。 4 軟件整體設(shè)計下棋需要有棋盤,程序中通過在窗體激活時在圖片框控件qi_pan上顯示軍棋棋盤圖片文件。有了盤還需要棋子。使用控件數(shù)組Qizi_Pic[ ]的Add方法加載了我們所需要的棋子圖片控件并使用相應(yīng)圖片。Qizi_Pic[ ]中下標(biāo)i的含義是:如果i小于24,那么說明它屬于紅方的棋子,否則是綠方的棋子。同時Qizi_Pic[i]的tag屬性保存了棋子在控件數(shù)組的索引號。在界面中要求用戶輸入對方IP、端口(本地及對方遠(yuǎn)端),“聯(lián)機”、“重新開始”、“退出”、“保存布陣”、“讀取布陣”、“開始對戰(zhàn)”6個按鈕以及一些提示用的標(biāo)簽。(a)紅方軍棋棋子圖片(b)綠方軍棋棋子圖片 網(wǎng)絡(luò)兩人對戰(zhàn)軍棋設(shè)計界面 棋盤的數(shù)據(jù)結(jié)構(gòu)采用1717二維數(shù)組Map存儲。X,Y坐標(biāo)原點是棋盤左上角。雖然使用四人玩的棋盤,本游戲主要是上下兩個區(qū)域,其他區(qū)域可以走棋。例如,上方玩家棋子布陣所在區(qū)域是(7,1)到(11,6)范圍,下方玩家棋子布陣所在區(qū)域是(7,12)到(11,17)范圍[15]。網(wǎng)絡(luò)程序設(shè)計的難點在于與對方需要通信,這里使用了UDP(User Data Protocol)。UDP是用戶數(shù)據(jù)文報協(xié)議的簡稱,兩臺計算機之間的傳輸類似于傳遞郵件;兩臺之間沒有明確的連接,使用UDP協(xié)議建立對等通信。這里雖然兩臺計算機不分主次,但我們設(shè)計時假設(shè)一臺做主機(紅方),等待其他人加入。其他人想加入的時候輸入主機的IP。為了區(qū)分通信中傳送的是“輸贏信息”、“下的棋子位置信息”、“重新開始”等,在發(fā)送信息的首部加上代號。定義了如下協(xié)議:命令|參數(shù)|參數(shù)……1. 聯(lián)機功能 join|move|x,y,idx,old_x,old_y,old_idx其中,棋子移動的目標(biāo)位置坐標(biāo)是(x,y),棋子移動的起始位置坐標(biāo)是(old_x,old_y)。old_idx是被移動棋子的控件數(shù)組索引號,idx是目標(biāo)位置留下的棋子的控件數(shù)組索引號。3. 游戲結(jié)束over|+贏方代號(贏了此局)4. 表示要重新開始reset|5. 布陣信息layout|布陣棋子信息布陣棋子信息形式為x,y,idx,x,y,idx……idx是(x,y)處的棋子的控件數(shù)組索引號。注意本程序在傳遞布陣信息時,我們默認(rèn)了是綠方在棋盤上方,紅方在下。但實際下棋如果棋手使用綠方,這樣看非累死不可,所以這里我們采取了個小技巧,在發(fā)送布陣數(shù)據(jù)時我們把坐標(biāo)顛倒(把自己的棋盤顛倒),即(x,y)坐標(biāo)以(18x,18y)坐標(biāo)發(fā)給對方。在下棋過程中,為了保存下過的棋子的位置使用了Map數(shù)組,Map數(shù)組初值為101,表示此處無棋子。關(guān)于0到24的棋子含義如下在qi_index()規(guī)定: private void qi_index() { Q = new int[25]。 Q[0] = 29。 //軍旗29 Q[1] = 30。 Q[2] = 30。 Q[3] = 30。//地雷30 Q[4] = 31。 Q[5] = 31。//炸彈31 Q[6] = 32。 Q[7] = 32。 Q[8] = 32。//工兵32 Q[9] = 33。 Q[10] = 33。 Q[11] = 33。//排長33 Q[12] = 34。 Q[13] = 34。 Q[14] = 34。//連長34 Q[15] = 35。 Q[16] = 35。//營長35 Q[17] = 36。 Q[18] = 36。//團長36 Q[19] = 37。 Q[20] = 37。//旅長37 Q[21] = 38。 Q[22] = 38。//師長38 Q[23] = 39。//軍長39 Q[24] = 40。//司令40 }即0為軍旗,1~3為地雷,4,5為炸彈,6~8為工兵,9~11為排長,12~14為連長,15,16為營長,17,18為團長,19,20為旅長,21,22為師長,23為軍長,24為司令。在Q數(shù)組中Q[24]=40而不直接寫為“司令”,所以為顯示圖片方便,這里Q[24]=40。25~49代表綠方棋子。綠方只要減去25(每方25個棋子)即可利用Q數(shù)組得知綠方棋子的含義,如27代表的是綠方地雷。對于軍棋游戲來說,規(guī)則非常簡單,就是按照先后順序在棋盤上走棋吃子,直到一方最先將對方的“軍旗”挖掉為勝。但在走棋過程中,需要考慮以下情況:(1) 是否為非棋子區(qū)。(2) 目標(biāo)處是否是自己的棋子。(3) 判斷目標(biāo)是否是行營,如果是則需判斷是否有子,如果沒有可以如象棋中的“士”一樣斜線走棋。(4) 判斷起始位置是否是鐵道線,如果是則考慮彎道、直道、棋盤正中間的33“田字”,否則只能移動一步。(5) “軍旗”棋子、地雷棋子不能走動。(6) 在“大本營”中的棋子不能移動。 可以看出走棋規(guī)則比較復(fù)雜。在設(shè)計時Go_Juge(int old_x,int old_y,int x,int y)判斷走棋的位置是否適當(dāng)。 private bool Go_Juge(int old_x, int old_y, int x, int y)//判斷走棋的位置是否適當(dāng) { = () + old_x:old_y + () + : + Map[old_x, old_y].ToString()。 = () + x:y + () + Map[x, y].ToString()。 //是否是棋子區(qū)域 if ((x = 6 amp。amp。 y = 1 amp。amp。 y = 6) || (x = 12 amp。amp。 y = 1 amp。amp。 y = 6) || (x = 6 amp。amp。 y = 12 amp。amp。 y = 17) || (x = 12 amp。amp。 y = 12 amp。amp。 y = 17) || y 17) return false。 //目標(biāo)位置是自己方的棋子 //Why***********if(IsmyChess(x,y)) return false。 //到行營,行營是否有子 if (Is_Home(x, y) amp。amp。 Map[x, y] != 101) return false。 //如“士”斜線從行營中出來********** if (Is_Home(old_x, old_y) amp。amp。 Map[x, y] == 101 amp。amp。 (x old_x) * (y old_y) == 1) return true。 //如“士”斜線走入行營************ if (Is_Home(x, y) amp。amp。 Map[x, y] == 101 amp。amp。 (x old_x)
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1