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

正文內(nèi)容

畢業(yè)設(shè)計---中國象棋網(wǎng)上對弈系統(tǒng)-畢業(yè)設(shè)計(參考版)

2025-01-23 04:53本頁面
  

【正文】 華北電力大學(xué)科技學(xué)院本科畢業(yè)設(shè)計(論文) 24 參考文獻 [1] 周升鋒 .Visual C++ Windows 程序設(shè)計 [M].西安 :西安交通大學(xué)出版社 ,1996. [2] 蘇羽 ,王嬡嬡 .Visual C++網(wǎng)絡(luò)游戲建模與實現(xiàn) [M].北京 :北京科海電子出版社 ,2021. [3] 葛垚 .Visual C++ MFC 棋牌類游戲編程實例 [M].北京 :人民郵電出版社 ,2021. [4] 網(wǎng)冠科技 .Visual C++.NET 小游戲開發(fā)時尚編程百例 [M].北京 :機械工業(yè)出版社 ,2021. [5] 陳建春 .Visual C++ 高級編程技術(shù) 開發(fā)實例剖析 [M].北京 :電子工業(yè)出版社 ,1999. [6] 涂光平 .Visual C++.NET 基礎(chǔ)教程與上機指導(dǎo) [M].北京 :清華大學(xué)出版社 ,2021. [7] 伍紅兵 .Visual C++ 編程深入引導(dǎo) [M].北京 :中國水利水電出版社 ,2021. [8] 劉海英 .Visual C++網(wǎng)絡(luò)通信編程 [M].北京 :人民郵電出版社 ,2021. [9] 胡峪 ,劉靜 .VC++高級編程技巧與實例 [M].西安 :西安電子科技大學(xué)出版社 ,2021. [10] 源江科技 .VC 編程技巧 280 例 [M].上海 :上??茖W(xué)普及出版社 , [11] 張恒博 .VB 在網(wǎng)絡(luò)中的一種應(yīng)用 —雙人象棋 [J].大連民族學(xué)院學(xué)報 ,2021.(4).. [12] 謝志鵬 .帶大廳的網(wǎng)絡(luò)象棋游戲設(shè)計和實現(xiàn) [J].華僑大學(xué)學(xué)報 ,2021.(9). [12] 王華 .局域網(wǎng)常用技術(shù) [M].北京 :機械工業(yè)出版社 ,. [13] 汪曉平 . 網(wǎng)絡(luò)通信協(xié)議分析及應(yīng)用實現(xiàn) [M].北京 :人民郵電出版社 , [14] 黃強 .WINDOWS 網(wǎng)絡(luò)編程 [M].北京 :人民郵電出版社 , [15] Anthony Ohlund,Windows 網(wǎng)絡(luò)編程 [M].北京 :清華大學(xué)出版社 , [16] James P. Cohoon, Jack W. ++ program design[M].Boston:McGrawHill, 2021. [17] Walter 。而關(guān)鍵就在于服務(wù)端的開發(fā),利用 Winsock 面向連接協(xié)議的 SOCKET 編程模型可輕易實現(xiàn)。 展望 本系統(tǒng)基本實現(xiàn)了中國象棋網(wǎng)上對弈的基本功能,目前,一套完善的網(wǎng)絡(luò)對戰(zhàn)系統(tǒng)大都基于 C/S(即客戶機 /服務(wù)器)模型,包含客戶端和服務(wù)端軟件。 通過本系統(tǒng)的設(shè)計使自己對數(shù)據(jù)結(jié)構(gòu)有了更深入的了解, 充分認(rèn)識到了 VC++的高效的開發(fā)能力,以及 WINDOWS 平臺一如既往的易用性。在本次的畢 業(yè)設(shè)計中,我應(yīng)用了 VC++開發(fā)工具在 WINDOWS平臺上開發(fā)了一個基于 WINDOWS平臺的中國象棋網(wǎng)上對弈系統(tǒng),在這一重要的領(lǐng)域進行了相關(guān)的實踐,不管是對我的研究能力,還是實際動手能力,還是資料查閱能力,都起了相當(dāng)大的益處。網(wǎng)絡(luò)通信方面 的數(shù)據(jù) 傳輸和識別 ,視圖的更新和重繪都是本系統(tǒng)設(shè)計的重點。經(jīng)過一段時間的測試和除錯, 本系統(tǒng) 已經(jīng)比較完善,能滿足用戶的一般娛樂需求。 當(dāng)操作完畢時,調(diào) 用 ReleaseCapture()恢復(fù)默認(rèn)光標(biāo) 。 hcursor=LoadCursor(hInst,HAND)。當(dāng)用戶拿起棋子時,通過下面代碼實現(xiàn)光標(biāo)改變: SetCapture(hWnd)。 光標(biāo)變化 用戶選中棋子除了動態(tài)顯示,光標(biāo)的改變也是比較人性化的設(shè)計。 GetChessman— 其值為 0表示未拿起棋子,此時如果點擊正確的棋子(即 InfoArray[i][j]不等于 0,且黑紅與 RedOrBlack一致), 其值變?yōu)?1,表示已拿起棋子,等待下一步操作。 這里有兩個比較重要的變量: RedOrBlack— 其值為 0表示紅方出棋,此時如果點擊黑子,會忽略操作。 華北電力大學(xué)科技學(xué)院本科畢業(yè)設(shè)計(論文) 21 圖 35 操作響應(yīng) 走 棋判斷 一次完整的操作需要兩組坐標(biāo)信息,這里引入 Prei和 Prej用來保存前次操作坐標(biāo)。( Yj*50) 35時,縱坐標(biāo)點更新為 j+1;( Yj*50) 15時縱坐標(biāo)點還為 j;其他情況為無效點擊。轉(zhuǎn)換成 Array[i][j]形式只需把 X、 Y分別除以 50( 50是格點間距),即 i=X/50,j=Y/50,這樣再通過判斷 InfoArray[i][j]的值就可以知道用 戶的操作了。當(dāng)用戶點擊左鍵時,調(diào)用 GetCursorPos()函數(shù)獲得點擊點的坐標(biāo)信息,并將屏幕坐標(biāo)轉(zhuǎn)換至窗口坐標(biāo)(即用屏幕坐標(biāo)減去窗口的左上角坐標(biāo)),再根據(jù)棋盤范圍決定是否響應(yīng)此次點擊(通過 if()語句來判斷 , 條件為點擊點在棋盤內(nèi))。消息本身是作為一個記錄傳遞給應(yīng)用程序的,這個記錄中包含了消息的類型以及其他信息。 消息,就是指 Windows發(fā)出的一個通知,告訴應(yīng)用程序某個事情發(fā)生了。接收信息處理起來也比較簡單, 可以在聊天信息前加如特定代碼,接收方驗證到特定代碼后直接在編輯框顯示即可。 首先,在窗口中加入兩個編輯框分別用來顯示接收的聊天信息和輸入發(fā)送的信息,再添加一個發(fā)送按鈕,并通過此按鈕完成信息發(fā)送。 聊天功能 在平臺中加入聊天功能可增加雙方對弈時的樂趣,而且本身實現(xiàn)起來并不難。下面的操作只需更改相關(guān) InfoArray 的值 ( InfoArray[i][j]=ijvalue。 Prej=ibuf%(ibuf/10*10)。 ijvalue=(ibuf/100)%(ibuf/10000*10)。接受方根據(jù)對方發(fā)送數(shù)據(jù)的范圍判斷應(yīng)該執(zhí)行哪步操作(具體參見表 通信代碼一覽),對于 1000101~ 1891679 范圍的代碼(即著法代碼),通過下面語句與 i ,j, InfoArray[i][j], Prei, Prej 一一對應(yīng): i=(ibuf/100000)%(ibuf/1000000*10)。 數(shù)據(jù)更新 在 WM_LBUTTONDOWN 消息響應(yīng)中,對于正確的行棋,將通過一個 if 語句來判斷是否處于聯(lián)機狀態(tài)以決定是否發(fā)送著法數(shù)據(jù);成功聯(lián)機 bool 型的變量 Online 將被賦值為true。要與局域網(wǎng)內(nèi)其他機器通信,必須知道對方 IP 地址(或主機名),在窗口中加入一個編輯框用于接收用戶輸入的 IP地址(或主機名),除此之外還需要增加一個編輯框用于獲得與程序綁定的端口,用于傳輸數(shù)據(jù)(本程序默認(rèn)綁定的端口是: 5050)。( i, j),( Prei, Prej)表示終點和起始坐標(biāo),如“炮二平五”的代碼可表示為 1770647(紅方炮 ( InfoArray[Prei][Prej]=6) 從坐標(biāo) (7,7)走至 (4,7) )。 UpdateAllData 數(shù)據(jù)定義 :共 7 位,最高位固定為 1,其后依次是 i ,j, InfoArray[i][j], Prei, Prej。 圖 35 網(wǎng)絡(luò)通信 數(shù)據(jù)代碼 當(dāng)一方走棋后,通過 CComm 類的成員函數(shù) SendMsg 發(fā)送數(shù)據(jù)通知對方,發(fā)送的數(shù)據(jù)很簡單:起始坐標(biāo),終點坐標(biāo)和棋子信息。 bool Listen(int PortNum)。 ~CComm()。 public: bool NewMsg。 sockaddr_in srv。 網(wǎng)絡(luò)通信 本程序通過類 CComm 來實現(xiàn)通信功能: class CComm { private: 華北電力大學(xué)科技學(xué)院本科畢業(yè)設(shè)計(論文) 18 static void *ListenThread(void *data)。 當(dāng)調(diào)用 函數(shù) ChessRule()時 根據(jù)的 InfoArray的 值用一個 switch選擇語句來選擇棋子對應(yīng)的規(guī)則, 規(guī)則正確返回 true值,程序更新 InfoArray信息 ( InfoArray[Prei][ Prej]=0;InfoArray[i][j]=info1) 調(diào)用 InvalidateRect函數(shù)來更新視圖,并等待用戶的下一步操作。當(dāng)不過界即 y14時,滿足 x1=x y1y2=1。 卒(兵) : 紅 兵 因為不能后退,則 y1y2。 炮: 當(dāng) 沒有吃子 時 , InfoArray[x2][y2]=0算法與車相同。當(dāng)滿足條件時, 判斷是否蹩馬腿 ,蹩馬腿則提示走棋錯誤。當(dāng)滿足條件時,判斷兩子之間是否還有其他棋子存在, 用 for循環(huán) 語句 對格點( xArray[x1][y1], yArray[x1][y1])和格點( xArray[x2][y2], yArray[x2][y2])之間的所有格點進行 掃描,若之間所有格點的類型值 InfoArray[i][j]=0, 表示兩子之間沒有其他棋子, 則走棋成功 , 反之提示走棋錯誤 。 若在活動范圍之內(nèi), 根據(jù)規(guī)則,當(dāng) |x2x1|= |y2y1|=2時,判斷是否“塞象眼”,InfoArray[(x1+x2)/2][(y1+y2)/2]=0時 ,表示沒有塞象眼, 走棋成功 ,否則系統(tǒng)提示走棋錯誤 。 象(相): 首先判斷走步是否超出活動范圍, 象(相) 的活動范圍為本方陣地,紅相得活動范圍為 x24,黑象的活動范圍 為 x25。 若在活動范圍之內(nèi),根據(jù)規(guī)則,當(dāng) |x2x1|=1且 |y2y1|=1時走棋成功。 士(仕):同 將(帥) 相同,判斷是否在在“九宮”之內(nèi)。同理,當(dāng) |y1y2|=1且 x1=x2時,走棋成功。 將(帥): 首先判斷走步是超出活動范圍,將(帥)的活動范圍為“九宮”,當(dāng) x23或 x25超出活動 范圍,同理 y2 y27時,系統(tǒng)提示玩家走棋出錯。本 系統(tǒng)中的運用 bool型 ChessRule()函數(shù)來設(shè)置規(guī)則約束,當(dāng)用戶點擊拿起棋子,在再次點擊目的地時程序?qū)⒄{(diào)用 函數(shù) ChessRule()來判斷著法是否可行,不可行返回 false,反之則返回 true。如果在要去得方向有別的棋子擋住,馬就無法走過去,俗稱“蹩馬腿”。馬一次可走的選擇點可以達到四周的八個點。 炮:炮在不吃子的時候,走動與車完全 相同。 車:車在象棋中威力最大,無論橫線、豎線均可行走,只要無子阻攔,部署不受限制。俗稱“象走田”。 象(相):象(相)的主要作用是防守,保護自己的將(帥)。 士(仕):士(仕)是將(帥)的貼身保鏢,它也只能在“九宮”內(nèi)走動。它只能在“九宮”之內(nèi)活動,可上可下,可左可右,每次走動只能按豎線和橫線走動一格。輪到走棋的一方將(帥)雖沒被對方“將軍”,卻被禁在一個位置上無路可走,同時己方其他棋子也都不能動,就算被“困死”,同樣輸?shù)舯揪?。被“將華北電力大學(xué)科技學(xué)院本科畢業(yè)設(shè)計(論文) 16 軍”的一方必須立即“應(yīng)將”,即用自衛(wèi)的步法曲化解被“將軍”的狀態(tài)。一定要注意,中隔一個棋子,這個 棋子俗稱 “ 炮架子 ” 。 任何棋子在走動時,如果一方棋子可以到達的位置有對方的棋子,就可以把對方棋子拿出棋盤 (稱為吃子 )而換上自己的棋子。輪到走棋的一方,將某個棋子從一個交叉點到另一個交叉點,或者吃掉對方棋子而占領(lǐng)交叉點,都算走了一步。玩家落棋后 ,將棋子原坐標(biāo) ( xArray[Prei] [Prej], yArray[Prej] [Prei]) 和更新后的坐標(biāo) ( xArray[i][j],xArray[i][j]) , 分別保存在( xArray[ReplayX1][ReplayY1], yArray[ReplayX1][ReplayY1])和( xArray[ReplayX2][ReplayY2], yArray[ReplayX2][ReplayY2]), 玩家選擇 回看時系統(tǒng)調(diào)用所保存的兩個坐標(biāo)點, 調(diào)用函數(shù) Polyline()將其用白線連接,以提示玩家 。 動態(tài)顯示就是通過一個 for 循環(huán)將棋子的底格半徑( EllipseSize)由 23 以步進 1 增長至 28,字體大小 FontSize 由 30 以步進 2 增長至 40,如此循環(huán)。當(dāng)用戶移動鼠標(biāo)時,根據(jù) get 是否為 1 判斷是否調(diào)用 DynamicChessman 來 實現(xiàn)棋子動態(tài)顯示。 圖 33 棋盤初始化 動態(tài)顯示 有時候當(dāng)用戶拿起棋子后,不一定急著放下去,而短暫的思考后未必能記得住剛剛拿起的棋子是哪顆,應(yīng)該給拿起的棋子做非常規(guī)顯示,本系統(tǒng)采用動態(tài)顯示。這個函數(shù)只是繪制棋子的一個入口,具體過程如下: DrawChessman()→Draw()→Graphics() 華北電力大學(xué)科技學(xué)院本科畢業(yè)設(shè)計(論文) 14 其中 DrawChessman()函數(shù)通過一個 for 循環(huán)遍歷數(shù)組 InfoArray,傳遞 InfoArray[i][j]數(shù)值并調(diào)用 Draw()函數(shù) → Draw()函數(shù)根據(jù) InfoArray[i][j]的數(shù)值選擇所要繪制的棋子,并將信息傳遞給函數(shù) Graphics()→ Graphics()根據(jù)傳遞過來的信息(包括繪制點坐標(biāo)信息,所繪棋子信息)調(diào)用繪圖函數(shù) Ellipse()和 TextOut()來完成棋子最終在窗口中的顯示。 窗口中的 開始 (重設(shè) )按鈕負(fù)責(zé)初始化棋盤,通過調(diào)用 InitChessBoard()函數(shù)來實現(xiàn):InitChessBoard()函數(shù)中首先通過一個 for 循環(huán)將棋盤 90 個格點的屏幕坐標(biāo)賦值給xArr
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1