版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、本科畢業(yè)設(shè)計(論文)中國象棋網(wǎng)上對弈系統(tǒng)摘要隨著信息技術(shù)的發(fā)展,人民生活水平的不斷提高。聯(lián)網(wǎng)游戲作為一種娛樂手段,正以其獨特的魅力吸引著越來越多的玩家。為了滿足廣大象棋愛好者也可以享受到網(wǎng)絡(luò)所帶來的便利,本設(shè)計在當前局域網(wǎng)條件下實現(xiàn)了中國象棋的網(wǎng)絡(luò)對戰(zhàn)。鑒于局域網(wǎng)的特點和游戲本身的要求,本設(shè)計采用兩層C/S架構(gòu)來實現(xiàn)相互之間的通信。它主要包含以下幾大模塊:網(wǎng)絡(luò)通信模塊,圖像繪制模塊和規(guī)則設(shè)置模塊。網(wǎng)絡(luò)通信模塊使得玩家可以方便的迅速建立起網(wǎng)絡(luò)連接,從而實現(xiàn)聯(lián)機對弈和聊天功能;圖像繪制模塊實現(xiàn)棋盤更新以及棋子動態(tài)表示等功能;規(guī)則設(shè)置模塊用于約束玩家的棋步。電腦游戲是計算機應(yīng)用領(lǐng)域的一個重要主題,而
2、當前網(wǎng)上最熱門的休閑對戰(zhàn)類游戲當屬棋牌游戲。通過對象棋的數(shù)據(jù)結(jié)構(gòu),相關(guān)算法與網(wǎng)絡(luò)聯(lián)機,以及對網(wǎng)絡(luò)對戰(zhàn)平臺系統(tǒng)的分析,設(shè)計成一套基于VC+平臺的棋牌類對戰(zhàn)系統(tǒng)。關(guān)鍵詞:網(wǎng)絡(luò)通信;聯(lián)機對弈;圖像繪制;消息響應(yīng)CHINESE CHESS ONLINE GAME SYSTEMAbstractWith the development of information technology, peoples standard of living have improved constantly. On-line game as a means of entertainment has a unique cha
3、rm to attract more and more players. To meet chess lovers ,this design has realized the Challenges of Chinese-chess between players under the current LAN environment.In view of the characteristics of local area networks and the requirements of the game itself, the design uses a two-tier C/S structur
4、e to achieve mutual communication. It contains the following major modules: the network communication module, image rendering module and the rules set up module. Network Communication Module allows gamers can quickly set up a convenient network connection in order to achieve an online game and chat
5、function; image rendering module to update the board as well as functional pieces, such as the dynamic that; rules binding settings module for step-by-step player's game. Computer games is the field of computer applications as an important subject, and present the most popular casual online game
6、s war among board games. By the data structure, algorithms and network online, as well as the network platform for systematic analysis of the war, designed a set of VC + + platform based on the category Card battle system.Keywords: Network Communication; Online game; Image Rendering; Message Respons
7、eII本科畢業(yè)設(shè)計(論文)目 錄摘要IAbstractII1緒論31.1課題背景31.2課題發(fā)展概況31.3本文主要工作42系統(tǒng)介紹52.1系統(tǒng)簡介52.2 系統(tǒng)構(gòu)成52.3相關(guān)技術(shù)52.3.1 點對點通信52.3.2 TCP/IP協(xié)議62.3.3 UPD基礎(chǔ)72.3.4屏幕作圖與用戶交互72.3.5遠程控制原理83設(shè)計與實現(xiàn)93.1數(shù)據(jù)結(jié)構(gòu)93.1.1棋盤93.1.2棋子信息數(shù)組103.1.3變量與函數(shù)113.2圖像繪制123.2.1主窗口123.2.2棋盤的繪制123.2.3棋子的繪制及初始化133.2.4動態(tài)顯示143.2.5回看功能153.3規(guī)則設(shè)置153.3.1棋子規(guī)則153.3.2
8、規(guī)則算法153.4網(wǎng)絡(luò)通信173.4.1CCOM類173.4.2數(shù)據(jù)代碼183.4.3數(shù)據(jù)更新193.4.4聊天功能193.5棋子操作203.5.1獲取點擊203.5.2走棋判斷213.5.3光標變化214總結(jié)與展望234.1總結(jié)234.2展望23參考文獻24致 謝25本科畢業(yè)設(shè)計(論文)1緒論1.1課題背景電腦游戲就是以計算機為操作平臺,通過人機互動形式實現(xiàn)的能夠體現(xiàn)當前計算機技術(shù)較高水平的一種新形式的娛樂方式。電腦游戲是必須依托于計算機操作平臺的,不能在計算機上運行的游戲,肯定不會屬于電腦游戲的范疇。至于現(xiàn)在大量出現(xiàn)的游戲機模擬器,原則上來講,還是屬于非電腦游戲的。游戲必須具有高度的互動性
9、。所謂互動性是指游戲者所進行的操作,在一定程度及一定范圍上對計算機上運行的游戲有影響,游戲的進展過程根據(jù)游戲者的操作而發(fā)生改變,而且計算機能夠根據(jù)游戲者的行為做出合理性的反應(yīng),從而促使游戲者對計算機也做出回應(yīng),進行人機交流。游戲在游戲者與計算機的交替推動下向前進行。電腦游戲比較能夠體現(xiàn)目前計算機技術(shù)的較高水平。一般當計算機更新?lián)Q代的同時,計算機游戲也會相應(yīng)的發(fā)生較大的變更。電腦游戲按類型可分為:單機游戲、網(wǎng)絡(luò)游戲、flash小游戲、電子競技等。按內(nèi)容可分為:即時戰(zhàn)略類、角色扮演類、模擬經(jīng)營類、冒險動作類,棋牌休閑類等。本系統(tǒng)屬于網(wǎng)絡(luò)棋牌休閑類游戲。1.2課題發(fā)展概況在人們逐步進入信息時代后,電
10、腦游戲使得人生變成了真正的游戲。在傳統(tǒng)中國社會中,文化、教育與知識是神圣的,莊嚴的,是天地君親師。這種傳統(tǒng)的體制,使人們在接受教育的過程中,就受到了束縛。如果誰把這種神圣的東西與游戲連在一起,就會被認為是對圣賢的一種褻瀆。而現(xiàn)在,網(wǎng)絡(luò)技術(shù)和數(shù)字技術(shù)把文化、教育和知識都變成了娛樂變成了游戲,將它們從神壇上請下來,使它們變成了大眾的、平民的東西,可愛的、容易接受的東西。作為融合高科技的文化藝術(shù)產(chǎn)品,電腦除給人們的生活帶來聯(lián)想之外,它更能給使用者帶來更多現(xiàn)實中不能擁有的體驗,這正是當今世上被看好的體驗型經(jīng)濟的典型代表。隨著人民生活水平的提高,人們的生活模式和思想模式都發(fā)生著變化。電腦游戲業(yè)經(jīng)過多年發(fā)
11、展,跌跌撞撞地走過來。應(yīng)該看到人們在電腦和互聯(lián)網(wǎng)帶來的時代標志性變化中,電腦游戲市場的逐步完善與巨大的潛在能量,作為一種現(xiàn)代娛樂形式,其正在世界范圍內(nèi)創(chuàng)造巨大的市場空間和受眾群體。傳統(tǒng)的單機游戲曾風靡一時,游戲愛好者在簡單的打斗中獲得了虛幻世界的滿足,但過了一段時間后,單機游戲的模式由于不能滿足人們相互交流的愿望以及其內(nèi)容的簡單重復,面對電腦的獨孤求敗總讓人有一種自以為是而又百無聊賴的感覺。逐漸失去了對用戶的吸引力,游戲愛好者期待著新的游戲模式出現(xiàn)。于是,電腦游戲開始朝著網(wǎng)絡(luò)游戲發(fā)展,隨著網(wǎng)絡(luò)建設(shè)快速發(fā)展,人們生活方式隨著時代發(fā)展而改變,網(wǎng)絡(luò)游戲迅速取代單機游戲成為了游戲玩家新的寵兒。1.3本
12、文主要工作主要工作內(nèi)容如下:1設(shè)計程序良好的用戶界面,盡可能真實模擬象棋環(huán)境,雙方對局過程中所顯示的界面應(yīng)一致。2基于TCP/IP協(xié)議,結(jié)合象棋對弈的特點,設(shè)計一套切實可行網(wǎng)絡(luò)實時數(shù)據(jù)通信協(xié)議。3制定棋盤及狀態(tài)數(shù)據(jù)結(jié)構(gòu),方便實時通信及屏幕作圖及與用戶的交互。4制定出詳細的棋子操作規(guī)則。2系統(tǒng)介紹2.1系統(tǒng)簡介中國象棋,古代叫“象戲”是一種由兩人輪流走子,以“將死”或“困斃”對方將(帥)為勝的一種棋類運動。它不僅能豐富文化生活,陶冶情操,更有助于開發(fā)智力,啟迪思維,鍛煉辨證分析能力和培養(yǎng)頑強的意志。象棋是中華民族的傳統(tǒng)文化,不僅在國內(nèi)深受群眾喜愛,而且流傳國外。本系統(tǒng)為中國象棋網(wǎng)上對弈系統(tǒng),其以
13、網(wǎng)絡(luò)通信原理結(jié)合中國象棋的規(guī)則設(shè)計完成,是一款能夠?qū)崿F(xiàn)局域網(wǎng)內(nèi)雙人聯(lián)機對弈的電腦游戲程序,使用MicroSoft Visual C+ 6.0開發(fā),運行與Windows平臺。2.2 系統(tǒng)構(gòu)成中國象棋網(wǎng)上對弈系統(tǒng)是主要由:數(shù)據(jù)結(jié)構(gòu)、圖像繪制、規(guī)則設(shè)置、網(wǎng)絡(luò)通信、棋子操作五部分構(gòu)成。軟件本身即可以作為服務(wù)器端,又可以作為客戶端,雙方建立連接后即可以進行象棋對弈。2.3相關(guān)技術(shù)2.3.1 點對點通信從OSI參考模型的應(yīng)用層來看,可認為網(wǎng)絡(luò)是由工作站和服務(wù)器組成的,但從傳輸層和網(wǎng)絡(luò)層的角度看,工作站和服務(wù)器沒有本質(zhì)的區(qū)別,它們都是連接到網(wǎng)絡(luò)上的一臺機器,都可以用網(wǎng)絡(luò)地址或名稱來代替。它們之間的通信就是所
14、謂的點對點通信,也叫對等通信。在局域網(wǎng)上,點點通信意味著兩個工作站可以直接對話而不用經(jīng)過文件服務(wù)器中轉(zhuǎn)。通信的基礎(chǔ)是套接口(Socket),一個套接口是通訊的一端。socket通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄。應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。Socket實質(zhì)上提供了進程通信的端點。進程通信之前,雙方首先必須各自創(chuàng)建一個端點,否則是沒有辦法建立聯(lián)系并相互通信的。正如打電話之前,雙方必須各自擁有一臺電話機一樣。在網(wǎng)間網(wǎng)內(nèi)部,每一個socket用一個半相關(guān)描述:(協(xié)議,本地地址,本地端口)。一個完整的s
15、ocket有一個本地唯一的socket號,由系統(tǒng)分配。最重要的是,socket是面向客戶/服務(wù)器模型而設(shè)計的,針對客戶和服務(wù)器程序提供不同的socket 系統(tǒng)調(diào)用??蛻綦S機申請一個socket (相當于一個想打電話的人可以在任何一臺入網(wǎng)電話上撥號呼叫),系統(tǒng)為之分配一個socket號;服務(wù)器擁有全局公認的 socket ,任何客戶都可以向它發(fā)出連接請求和信息請求(相當于一個被呼叫的電話擁有一個呼叫方知道的電話號碼)。socket利用客戶/服務(wù)器模式巧妙地解決了進程之間建立通信連接的問題。服務(wù)器socket 半相關(guān)為全局所公認非常重要。假如通信雙方?jīng)]有任何一方的socket固定,就好比打電話的雙
16、方彼此不知道對方的電話號碼,要通話是不可能在這一端上你可以找到與其對應(yīng)的一個名字。一個正在被使用的套接口都有它的類型和與其相關(guān)的進程。套接口存在于通訊域中。通訊域是為了處理一般的線程通過套接口通訊而引進的一種抽象概念。套接口通常和同一個域中的套接口交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時一定要執(zhí)行某種解釋程序)。Windows Sockets規(guī)范支持單一的通訊域,即Internet域。各種進程使用這個域互相之間用Internet協(xié)議族來進行通訊。局域網(wǎng)中工作站之間的通信程序的開發(fā)一般通過四種途徑:第一種是通過改造網(wǎng)絡(luò)原有通信軟件來實現(xiàn)。但這種改造必須以對該軟件充分了解為基礎(chǔ),否則改造后很難
17、保證不影響網(wǎng)絡(luò)的整體性能,甚至會造成系統(tǒng)運行不可靠,而改造后的通信質(zhì)量不一定理想。第二種是利用Novell網(wǎng)本身的網(wǎng)絡(luò)協(xié)議IPX/SPX來實現(xiàn),由于這種方法開發(fā)比較麻煩,采用的并不多。第三種是通過NetBIOS功能調(diào)用來實現(xiàn),NetBIOS是PC LAN的通信接口標準,廣泛適用于多種微機網(wǎng)絡(luò),使得以它為基礎(chǔ)的設(shè)計和應(yīng)用開發(fā)可移植性好。它不依賴于任何網(wǎng)絡(luò)硬件,是一個介于網(wǎng)絡(luò)硬件和用戶應(yīng)用程序之間的接口協(xié)議。其通信原理是:兩個要進行通信的工作站通過名字建立一個虛電路,然后向相應(yīng)的虛電路號發(fā)送或接收信息,這樣通過虛電路實現(xiàn)了兩個工作站之間的對等通信。利用NetBIOS實現(xiàn)工作站之間的實時通信,功能比
18、較強,編程實現(xiàn)比較容易,所以應(yīng)用比較廣泛。第四種是通過TCP/IP協(xié)議來實現(xiàn)。2.3.2 TCP/IP協(xié)議TCP協(xié)議(Transmission Control Protocol 傳輸控制協(xié)議):是一種流傳輸控制協(xié)議,它提供可靠的、有序的、雙向的、面向連接的數(shù)據(jù)傳輸,是一種面向連接的協(xié)議。TCP協(xié)議是一種端對端的協(xié)議,使用TCP沒有任何廣播或類似的概念,要用TCP協(xié)議與另一臺計算機通信,兩臺機之間必須像打電話一樣連接在一起,每一端都為通話做好準備。TCP協(xié)議每發(fā)送一個數(shù)據(jù)包都將會收到一個確認信息,這種發(fā)送/應(yīng)答模式是提供可靠的協(xié)議的唯一方法:你必須讓對方知道你是否收到了數(shù)據(jù)。當然,這也會造成一些
19、性能損失,人們?yōu)榱烁纳葡到y(tǒng)效率不高的狀況,引入了“捎帶確認(piggybacking)”的方法。TCP協(xié)議之所以是全雙工的就是因為這個“捎帶確認”信息,因為它允許雙方同時發(fā)送數(shù)據(jù)。這是通過在當前的數(shù)據(jù)包中攜帶以前收到的數(shù)據(jù)的確認信息方式實現(xiàn)的,從提高網(wǎng)絡(luò)利用率的角度看,這比單純發(fā)送一個通知對方“信息已收到”的數(shù)據(jù)包要好得多。最后,還有一個批量確認的概念:也即一次確認一個以上的數(shù)據(jù)包,表示“我收到了包括這個數(shù)據(jù)包在內(nèi)的全部數(shù)據(jù)包”。在IP協(xié)議中,我們處理的單個數(shù)據(jù)包是一個更大的數(shù)據(jù)報的一部分,一個TCP段就是一個單個的TCP數(shù)據(jù)包。TCP是一個數(shù)據(jù)流,因此,除了“連接”之外,沒有任何需要真正擔心
20、的其它概念。最大報文段長度(MSS)是在連接的時候協(xié)商的,但是,它總是在不斷地改變。默認的最大報文段長度是536字節(jié),這是576字節(jié)(IP協(xié)議保證的最小數(shù)據(jù)包長度)減去用于IP頭的20個字節(jié)和用于TCP頭的20個字節(jié)以后的長度。TCP協(xié)議要設(shè)法避免在IP級別上的分段。因此,TCP協(xié)議總是從536字節(jié)開始的。TCP/IP協(xié)議的核心部分是傳輸層協(xié)議(TCP、UDP),網(wǎng)絡(luò)層協(xié)議(IP)和物理接口層,這三層通常是在操作系統(tǒng)內(nèi)核中實現(xiàn)。因此用戶一般不涉及,編程時,編程界面有兩種形式:一、是由內(nèi)核直接提供的系統(tǒng)調(diào)用;二、使用以庫函數(shù)方式提供的各種函數(shù)。前者為核內(nèi)實現(xiàn),后者為核外實現(xiàn)。用戶服務(wù)要通過核外的
21、應(yīng)用程序才能實現(xiàn),所以要使用套接字(socket)來實現(xiàn)。2.3.3 UPD基礎(chǔ)UDP協(xié)議(User Datagram Protocol 用戶數(shù)據(jù)報協(xié)議):是一種保護消息邊界的,不保障可靠數(shù)據(jù)傳輸?shù)臒o連接的協(xié)議。主要用來支持那些需要在計算機之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)連接。UDP協(xié)議從問世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天,UDP仍然不失為一項非常實用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。尤其是在需要很強的實時交互性的場合,如網(wǎng)絡(luò)游戲、視頻會議等,UDP協(xié)議更是顯示出極強的威力。UDP協(xié)議是一種面向非連接的協(xié)議,面向非連接指的是在正式通信前不必與對方先建立連接,不管對方
22、狀態(tài)就直接發(fā)送。至于對方是否可以接收到這些數(shù)據(jù)內(nèi)容,UDP協(xié)議無法控制,因此說UDP協(xié)議是一種不可靠的協(xié)議。與TCP協(xié)議一樣,UDP協(xié)議直接位于IP協(xié)議之上,實際上,IP協(xié)議屬于OSI參考模型的網(wǎng)絡(luò)層協(xié)議,而UDP和TCP都屬于傳輸層協(xié)議。UDP適用于一次只傳送少量數(shù)據(jù)、對可靠性要求不高的應(yīng)用環(huán)境。因為UDP協(xié)議是面向非連接的協(xié)議,沒有建立連接的過程,因此它的通信效率高;但也正因為如此,它的可靠性不如TCP協(xié)議高。UDP協(xié)議的主要作用是完成網(wǎng)絡(luò)數(shù)據(jù)流量和數(shù)據(jù)報之間的轉(zhuǎn)換:在信息的發(fā)送端,UDP協(xié)議將網(wǎng)絡(luò)數(shù)據(jù)流量封裝數(shù)據(jù)報,然后將數(shù)據(jù)報發(fā)送出去;在信息的接收端,UDP協(xié)議將數(shù)據(jù)報轉(zhuǎn)換成實際數(shù)據(jù)內(nèi)
23、容。實際上,我們可以認為基于UDP協(xié)議的Socket類似于一個碼頭,該碼頭的作用就是負責發(fā)送、接收集裝箱,一個數(shù)據(jù)報類似于一個集裝箱。因此對于基于UDP協(xié)議的通信雙方而言,沒有所謂的客戶端和服務(wù)器端的概念。2.3.4屏幕作圖與用戶交互屏幕作圖與用戶的交互為用戶提供了一個交互工作環(huán)境,稱交互界面。通常在圖形顯示方式,把屏幕劃分成圖形區(qū)、菜單區(qū)和提示區(qū)。菜單功能的好壞直接影響到交互界面的友好性。交互繪圖操作命令是通過某單表達,菜單的設(shè)計需考慮到交互方便和提高交互效率。常見的菜單有文宇菜單和圖標菜單兩大類,圖標菜單較為直觀、形象,不受文種不同的限制等優(yōu)點。屏幕作圖與用戶的交互的基本功能一般可歸結(jié)為繪
24、圖功能、圖形編輯、尺寸標準、作圖工具、顯示功能、詢問功能、信息轉(zhuǎn)換和二次開發(fā)工具等八大功能。繪圖功能是屏幕作圖與用戶的交互的核心部分,它主要包括繪圖環(huán)境的設(shè)置、實體繪圖命令和尺寸、文字標注等功能。繪圖環(huán)境的設(shè)置主要包括:圖層、線型、顏色、作圖單位和圖幅大小設(shè)定等。實體繪圖是生成圖形的基本命令集,如點、直線、圓、圓弧等的繪圖命令。信息轉(zhuǎn)換功能實現(xiàn)圖形到圖形文本文件的雙向轉(zhuǎn)換,圖形文件按圖形轉(zhuǎn)換文件的標準格式書寫。 開發(fā)工具是一種用戶編程語言,通常是由高級編程語言,如 C+、C#、VC、VB,通過繪圖系統(tǒng)接口調(diào)用圖形函數(shù)庫。用戶借助于軟件系統(tǒng)提供的用戶編程語言,建立常用的圖形庫、常用的
25、標準件圖庫和專用的應(yīng)用程序等二次開發(fā)工作,提高繪圖效率。2.3.5遠程控制原理遠程控制軟件一般分兩個部分:一部分是客戶端程序Client,另一部分是服務(wù)器端程序Server,在使用前需要將客戶端程序安裝到主控電腦上,將服務(wù)器端程序安裝到被控電腦上。它的控制的過程一般是先在主控電腦上執(zhí)行客戶端程序,像一個普通的客戶一樣向被控電腦中的服務(wù)器端程序發(fā)出信號,建立一個特殊的遠程服務(wù),然后通過這個遠程服務(wù),使用各種遠程控制功能發(fā)送遠程控制命令,控制被控電腦中的各種應(yīng)用程序運行,我們稱這種遠程控制方式為基于遠程服務(wù)的遠程控制。通過遠程控制軟件,我們可以進行很多方面的遠程控制,包括獲取目標電腦屏幕圖像、窗口
26、及進程列表;記錄并提取遠端鍵盤事件(擊鍵序列,即監(jiān)視遠端鍵盤輸入的內(nèi)容);可以打開、關(guān)閉目標電腦的任意目錄并實現(xiàn)資源共享;提取撥號網(wǎng)絡(luò)及普通程序的密碼;激活、中止遠端程序進程;管理遠端電腦的文件和文件夾;關(guān)閉或者重新啟動遠端電腦中的操作系統(tǒng);修改Windows注冊表;通過遠端電腦上、下載文件和捕獲音頻、視頻信號等。3設(shè)計與實現(xiàn)3.1數(shù)據(jù)結(jié)構(gòu)3.1.1棋盤圖3-1棋盤棋子活動的場所,叫作“棋盤”。在長方形的平面上,繪有九條平行的豎線和十條平行的橫線相交組成,共有九十個交叉點,棋子就擺在交叉點上。中間部分,也就是棋盤的第五,第六兩橫線之間末畫豎線的空白地帶稱為“河界”。兩端的中間,也就是兩端第四條
27、到第六條豎線之間的正方形部位,以斜交叉線構(gòu)成“米”字方格的地方,叫作“九宮”(它恰好有九個交叉點)。整個棋盤以“河界”分為相等的兩部分。為了比賽記錄和學習棋譜方便起見,現(xiàn)行規(guī)則規(guī)定:按九條豎線從右至左用中文數(shù)字一至九來表示紅方的每條豎線,用阿拉伯數(shù)字19來表示黑方的每條豎線。對弈開始之前,紅黑雙方應(yīng)該把棋子擺放在規(guī)定的位置。任何棋子每走一步,進就寫“進”,退就寫“退”,如果像車一樣橫著走,就寫“平”??v線方式,它是中國象棋常用的表示方法,即棋子從棋盤的哪條線走到哪條線。中國象棋規(guī)定,對于紅方來說的縱線從右到左依次用“一”到“九”表示,黑方則是“”到“”,這種表示方式體現(xiàn)了古代中國象棋研究者的智
28、慧。 坐標方式,它是國際象棋常用的表示方法,把每個格子按坐標編號,只要知道起始格子和到達格子,就確定了著法,這種表示方式更方便也更合理,而且還可以移植到其他棋類游戲中。中國象棋也可以用這種方法來表示,本程序?qū)⒉捎米鴺朔绞?。本系統(tǒng)定義了一個int型的二維數(shù)組xArray910用來表示棋盤上每個格點在窗口的橫坐標,和一個用來表示棋盤每個格點在窗口縱坐標的int型二維數(shù)組yArray910。兩個數(shù)組組合用來表示棋盤每個格點在整個窗口的具體位置。對xArray910、yArray910的初始化代碼如下:for(int i=0;i<9;i+) for(int j=0;j<10;j+) xAr
29、rayij=cX+50*i; yArrayij=cY+50*j; 其中(cX、cY)表示棋盤坐上就在窗口的坐標。如圖2-1中紅方帥的坐標可以用(xArray49,yArray49)來表示該棋子在窗口中實際的坐標,以便與在該位置準確繪制圖形。另外系統(tǒng)設(shè)置相臨坐標點的間隔增量為50個象素點,如|xArray00-xArray01|=50,這樣以來整個棋盤映射到主窗口的像素范圍被限制在(0,0)-(400,450)之間(單位:象素)。3.1.2棋子信息數(shù)組中國象棋作為一種雙方對陣的棋牌類競技項目,棋子共有三十二個,分為紅黑兩組,各有十六個,由對弈的雙方各執(zhí)一組。兵種是一樣的,分為七種:帥(將)、仕、
30、相(象)、車、馬、炮、兵(卒)。紅方持有棋子:帥一個,仕、相、車、馬、炮各兩個,兵五個。黑方持有棋子:黑方有將一個,士、象、車、馬、炮各兩個,卒五個。其中帥與將;仕與士;相與象;兵與卒的作用完全相同,僅僅是為了區(qū)別紅棋和黑棋而已。為了更加方便的表示棋子的類型,除了用于保存坐標信息的二維數(shù)組xArray910、yArray910外,我們還需要引進一個二維數(shù)組用來保存該坐標點的棋子信息,比如:在(xArray02、xArray02)上的是哪顆棋子?亦或著是空位?本系統(tǒng)引入了新的一個int型二維的數(shù)組InfoArray910,很顯然它也是一個9×10的數(shù)組,用來保存棋盤上所有90個格點的棋
31、子信息?,F(xiàn)將InfoArray數(shù)組的取值范圍極其定義列與下表:表3-1InfoArray01234567DEF空位紅車紅馬紅相紅士紅帥紅炮紅兵InfoArray011121314151617DEF空位黑車黑馬黑象黑仕黑將黑炮黑卒根據(jù)上表,位于坐標點(xArray49,yArray49)位置的紅帥的棋子類型表示為InfoArray49=5。當棋面改變,形成有效走棋時,只需更新對應(yīng)坐標點的InfoArray的值即可,如紅方走棋“炮二平五”對應(yīng)的原信息InfoArray77=6,InfoArray47=0改變?yōu)镮nfoArray77=0;InfoArray47=6,以實現(xiàn)走棋的數(shù)據(jù)更新。3.1.3變
32、量與函數(shù)表3-1 部分變量定義變量類型定義xArrayInt型二維數(shù)組保存棋盤格點的橫坐標yArrayInt型二維數(shù)組保存棋盤格點的縱坐標InfoArrayInt型二維數(shù)組保存棋盤格點的棋子類型GetChessmanstatic int判斷棋子是否選中RedOrBlackstatic int判斷輪到哪方走棋Prei,Prejstatic int前一個坐標點preceding i,jMytrunstatic int聯(lián)機時用于判斷是否本方走棋UpdateAllDatalong int棋盤更新的信息ReplayX1-Y2Int保存棋子行走路徑,回看之用CUpdateAllDataChar轉(zhuǎn)換成cha
33、r型的UpdateAllData,用做網(wǎng)絡(luò)傳輸WinBool判斷是否已有一方勝利OnlineBool判斷是否聯(lián)機AcceptBool網(wǎng)絡(luò)聯(lián)機接受對方邀請Accept=trueAccept2Bool網(wǎng)絡(luò)聯(lián)機邀請對方,對方接受Accept2=trueNetExitBool當用戶強行退出時,這個變量決定是否向?qū)Ψ桨l(fā)送消息表3-2 部分函數(shù)定義函數(shù)定義bool ChessRule(int x1,int y1,int x2,int y2,int info1,int info2)判斷走棋規(guī)則bool Connect()網(wǎng)絡(luò)聯(lián)接void Draw(int x,int y,int info)繪圖函數(shù)void
34、DrawChessman()繪制棋位對應(yīng)棋子void DynamicChessman(int x,int y)實現(xiàn)拿起的棋子動態(tài)顯示void Graphics(int x,int y,int RorB,LPCTSTR ChessmanName)繪制棋子void InitChessBoard()初始化棋盤函數(shù)bool Listen(int PortNum)Ccomm類數(shù)據(jù)接受函數(shù)bool SendMsg(char *Msg,int Len,char *host,short port)Ccomm類數(shù)據(jù)發(fā)送函數(shù)3.2圖像繪制3.2.1主窗口VC+6.0提供了多種窗口樣式,這里選用比較簡潔的WS_PO
35、PUPWINDOW樣式,WS_POPUPWINDOW 創(chuàng)建一個和WS_BORDER, WS_POPUP和WS_SYSMENU一起使用的彈出式窗體,WS_DISABLED創(chuàng)建一個初始不可用的窗體,WS_POPUP創(chuàng)建一個彈出式窗體,WS_SYSMENU創(chuàng)建一個在標題欄有控件菜單框的窗體,窗口大小為650×550象素,在InitInstance()中交由CreateWindow()實現(xiàn)。至于棋盤底紋在PhotoShop中手工繪制保存為bmp格式(注意:格點間距應(yīng)保持50象素),在WM_PAINT消息響應(yīng)中交由BitBlt()函數(shù)輸出至窗口。窗口中的按鈕,對話框等則在WM_CRE
36、ATE消息響應(yīng)中創(chuàng)建。3.2.2棋盤的繪制使用photoshop繪制帶有底紋棋盤,保存為bmp格式,并且設(shè)置每一格的增量為50像素,便于棋盤上每個格點坐標的表示。在WM_PAINT消息響應(yīng)中交由BitBlt()函數(shù)輸出至窗口。如圖:圖3-2 棋盤3.2.3棋子的繪制及初始化在Windows中有各種圖形用戶界面GUI(Graphics User Interface)對象,當我們在進行繪圖時就需要利用這些對象。窗口中的"開始(重設(shè))"按鈕負責初始化棋盤,通過調(diào)用InitChessBoard()函數(shù)來實現(xiàn):InitChessBoard()函數(shù)中首先通過一個for循環(huán)將棋盤90個格
37、點的屏幕坐標賦值給xArrayij和yArrayij,同樣用一個for循環(huán)給InfoArrayij賦值全部清零,再按照棋盤棋子的初始位置給InfoArrayij賦上相應(yīng)的值(如InfoArray00=InfoArray80=11,表示黑方兩個車位)。完成上述操作后調(diào)用InvalidateRect(hWnd,NULL,1)函數(shù)更新視圖,當調(diào)用這個函數(shù)的時候,Windows會在WM_PAINT消息響應(yīng)中完成對窗口的重繪,我們在此加入繪制棋子函數(shù)DrawChessman()。這個函數(shù)只是繪制棋子的一個入口,具體過程如下:DrawChessman()Draw()Graphics()開始其中DrawCh
38、essman()函數(shù)通過一個for循環(huán)遍歷數(shù)組InfoArray,傳遞InfoArrayij數(shù)值并調(diào)用Draw()函數(shù)Draw()函數(shù)根據(jù)InfoArrayij的數(shù)值選擇所要繪制的棋子,并將信息傳遞給函數(shù)Graphics()Graphics()根據(jù)傳遞過來的信息(包括繪制點坐標信息,所繪棋子信息)調(diào)用繪圖函數(shù)Ellipse()和TextOut()來完成棋子最終在窗口中的顯示。Ellipse()和TextOut()均為系統(tǒng)函數(shù),前者用來繪制橢圓,后者用與輸出字符,兩個函數(shù)配合即可繪制出棋子。void InitChessBoard()實現(xiàn)對棋盤各格點初始化(InfoArray賦值)Invalida
39、teRect(hWnd,NULL,1)刷新視圖WM_PAINT消息響應(yīng)中調(diào)用繪制棋子入口函數(shù)DrawChessman()繪制棋位對應(yīng)棋子繪制棋位對應(yīng)棋子void Draw(int x,int y,int info)傳遞繪制信息void Graphics()完成最終圖形繪制圖3-3 棋盤初始化3.2.4動態(tài)顯示有時候當用戶拿起棋子后,不一定急著放下去,而短暫的思考后未必能記得住剛剛拿起的棋子是哪顆,應(yīng)該給拿起的棋子做非常規(guī)顯示,本系統(tǒng)采用動態(tài)顯示。這段動態(tài)顯示的代碼應(yīng)該放在WM_MOUSEMOVE消息響應(yīng)中,如果一時忘記自己選擇了那顆棋子,只要移動一下鼠標,拿起的棋子就會動態(tài)顯示,而條件就是變量
40、get=1(在操作時為其賦值)。當用戶移動鼠標時,根據(jù)get是否為1判斷是否調(diào)用DynamicChessman來實現(xiàn)棋子動態(tài)顯示。來看一下DynamicChessman,它帶有兩個參數(shù)Prei和Prej,即棋子的坐標i,j值,根據(jù)這個值可以得到該棋子屏幕坐標ArrayPreiPrej,棋子信息InfoArrayPreiPrej。動態(tài)顯示就是通過一個for循環(huán)將棋子的底格半徑(EllipseSize)由23以步進1增長至28,字體大小FontSize由30以步進2增長至40,如此循環(huán)。3.2.5回看功能為了方便玩家,本系統(tǒng)還加入了會看功能,使玩家可以回看對方剛走過的起步。玩家落棋后,將棋子原坐標
41、(xArrayPrei Prej,yArrayPrej Prei)和更新后的坐標(xArrayij,xArrayij),分別保存在(xArrayReplayX1ReplayY1,yArrayReplayX1ReplayY1)和(xArrayReplayX2ReplayY2,yArrayReplayX2ReplayY2),玩家選擇回看時系統(tǒng)調(diào)用所保存的兩個坐標點,調(diào)用函數(shù)Polyline()將其用白線連接,以提示玩家。圖3-4 回看3.3規(guī)則設(shè)置3.3.1棋子規(guī)則在對局時,由執(zhí)紅棋的一方先走,雙方輪流各走一步,直至分出勝負為止。輪到走棋的一方,將某個棋子從一個交叉點到另一個交叉點,或者吃掉對方棋
42、子而占領(lǐng)交叉點,都算走了一步。雙方各走一步,成為一回合。任何棋子在走動時,如果一方棋子可以到達的位置有對方的棋子,就可以把對方棋子拿出棋盤(稱為吃子)而換上自己的棋子。只有炮的"吃子"方式與它的走法不同:它和對方棋子之間必須隔一個子(無論是自己的還是對方的),具備此條件才能"吃掉"人家。一定要注意,中隔一個棋子,這個棋子俗稱“炮架子”。一方的棋子攻擊對方的將(帥),并且在下一步能把它吃掉,俗稱“將軍”。被“將軍”的一方必須立即“應(yīng)將”,即用自衛(wèi)的步法曲化解被“將軍”的狀態(tài)。如果被“將軍”而無法“應(yīng)將”,就算被“將死”,輸?shù)舯揪?。輪到走棋的一方將(帥)雖沒
43、被對方“將軍”,卻被禁在一個位置上無路可走,同時己方其他棋子也都不能動,就算被“困死”,同樣輸?shù)舯揪帧ⅲ◣洠簩⒑蛶浭瞧逯械氖啄X,是雙方竭力爭奪的目標。它只能在“九宮”之內(nèi)活動,可上可下,可左可右,每次走動只能按豎線和橫線走動一格。江河帥不能在同一豎線上直接面對,否則判走方輸棋。士(仕):士(仕)是將(帥)的貼身保鏢,它也只能在“九宮”內(nèi)走動。它的行棋路徑只能是“九宮”內(nèi)的斜線。象(相):象(相)的主要作用是防守,保護自己的將(帥)。它的走法是每次循對角線走兩格。俗稱“象走田”。象(相)的活動范圍限于“河界”以內(nèi)的本方陣地,不能過河,且如果它走的“田”字中央有一個棋子的時候,就不能走,俗稱“
44、塞象眼”。車:車在象棋中威力最大,無論橫線、豎線均可行走,只要無子阻攔,部署不受限制。因此一車可以控制十七個點,故有“一車十子寒”之稱。炮:炮在不吃子的時候,走動與車完全相同。馬:馬在走動的方法是一直一斜,即先橫著或豎著走一格,然后再斜著走一個對角線,俗稱“馬走日”。馬一次可走的選擇點可以達到四周的八個點。故有“八面威風”之說。如果在要去得方向有別的棋子擋住,馬就無法走過去,俗稱“蹩馬腿”。卒(兵):兵(卒)在未過河前,只能向前一步步走,過河以后,除不能后退外,允許左右移動,但也只能一次一步,即使這樣,兵(卒)的威力也大大增強,故有“過河的卒子頂半個車”之說3.3.2規(guī)則算法馬走日字,相飛田字
45、,七種棋子,七種不同的走法,映射到程序中來,必須有一個函數(shù)來約束其行動。本系統(tǒng)中的運用bool型ChessRule()函數(shù)來設(shè)置規(guī)則約束,當用戶點擊拿起棋子,在再次點擊目的地時程序?qū)⒄{(diào)用函數(shù)ChessRule()來判斷著法是否可行,不可行返回false,反之則返回true。函數(shù)的參數(shù)(x1,y1)為原棋子坐標,(x2,y2)為目的坐標,info1,2 為兩坐標點信息,當info1表示的棋子顏色同與info2時(紅色值:1-7,黑色值:11-17),即“吃”己方子,直接返回false。將(帥):首先判斷走步是超出活動范圍,將(帥)的活動范圍為“九宮”,當x2<3或x2>5超出活動范圍
46、,同理y2>2、y2<7時,系統(tǒng)提示玩家走棋出錯。若在活動范圍之內(nèi),根據(jù)規(guī)則,當|x2-x1|=1且y1=y2時,走棋成功。同理,當|y1-y2|=1且x1=x2時,走棋成功。其他走棋系統(tǒng)提示走棋出錯。士(仕):同將(帥)相同,判斷是否在在“九宮”之內(nèi)。若超出活動范圍,系統(tǒng)提示走棋錯誤。若在活動范圍之內(nèi),根據(jù)規(guī)則,當|x2-x1|=1且|y2-y1|=1時走棋成功。其他走棋系統(tǒng)提示走棋出錯。象(相):首先判斷走步是否超出活動范圍,象(相)的活動范圍為本方陣地,紅相得活動范圍為x2>4,黑象的活動范圍為x2<5。若超出活動范圍,系統(tǒng)提示走棋錯誤。若在活動范圍之內(nèi),根據(jù)規(guī)則
47、,當|x2-x1|=2、|y2-y1|=2時,判斷是否“塞象眼”,InfoArray(x1+x2)/2(y1+y2)/2=0時,表示沒有塞象眼,走棋成功,否則系統(tǒng)提示走棋錯誤。車:當不滿足x1=x2或y1=y2時,系統(tǒng)提示走棋錯誤。當滿足條件時,判斷兩子之間是否還有其他棋子存在,用for循環(huán)語句對格點(xArrayx1y1,yArrayx1y1)和格點(xArrayx2y2,yArrayx2y2)之間的所有格點進行掃描,若之間所有格點的類型值InfoArrayij=0,表示兩子之間沒有其他棋子,則走棋成功,反之提示走棋錯誤。馬:當不滿足|x2-x1|=1、|y2-y1|=2或|x2-x1|=2
48、、|y2-y1|=1時,系統(tǒng)提示走棋錯誤。當滿足條件時,判斷是否蹩馬腿,蹩馬腿則提示走棋錯誤。x2-x1=2時,InfoArrayx2-1y1=0表示沒有蹩馬腿,可以走棋;x2-x1=-2時,InfoArrayx1-1y1=0表示沒有蹩馬腿,可以走棋;y2-y1=2時,InfoArrayx1y2-1=0表示沒有蹩馬腿,可以走棋;y2-y1=-2時,InfoArrayx1y1-1=0表示沒有蹩馬腿,可以走棋。炮:當沒有吃子時,InfoArrayx2y2=0算法與車相同。當吃子時,InfoArrayx2y2的值不為0,用for循環(huán)語句對格點(xArrayx1y1,yArrayx1y1)和格點(xA
49、rrayx2y2,yArrayx2y2)之間的所有格點進行掃描,若兩格點之間有一個格點有棋子,即只存在一個InfoArrayij的值不為0,則走棋成功,反之提示走棋錯誤。卒(兵):紅兵因為不能后退,則y1>y2。當過界后可以左右移動,但每次只能移動一個格點,所以當y1<5時,滿足x1=x2、y1-y2=1或|x1-x2|=1、y1=y2。當不過界即y1>4時,滿足x1=x2、y1-y2=1。同理可以指定黑卒的規(guī)則。當調(diào)用函數(shù)ChessRule()時根據(jù)的InfoArray的值用一個switch選擇語句來選擇棋子對應(yīng)的規(guī)則,規(guī)則正確返回true值,程序更新InfoArray信息
50、(InfoArrayPrei Prej=0;InfoArrayij=info1)調(diào)用InvalidateRect函數(shù)來更新視圖,并等待用戶的下一步操作。定義info2表示移動前InfoArrayij的值,當info2的值為5或15,即吃掉的是對方將(帥),則一方勝利,變量win=true,哪方勝利根據(jù)info2的值判斷:5黑方勝利,15紅方勝利,且此局結(jié)束。3.4網(wǎng)絡(luò)通信3.4.1CCOM類本程序通過類CComm來實現(xiàn)通信功能:class CCommprivate:static void *ListenThread(void *data);SOCKET ListenSocket;sockadd
51、r_in srv;sockaddr_in client;public: bool NewMsg;CComm();CComm();bool SendMsg(char *Msg,int len,char *host,short port);bool Listen(int PortNum);類中函數(shù)SendMsg和Listen分別負責發(fā)送和接收數(shù)據(jù),是實現(xiàn)聯(lián)機通信的關(guān)鍵。網(wǎng)絡(luò)通信類Ccomm(基于winsock類)Listen()函數(shù)接收數(shù)據(jù)SendMsg()函數(shù)發(fā)送數(shù)據(jù)圖3-5 網(wǎng)絡(luò)通信3.4.2數(shù)據(jù)代碼當一方走棋后,通過CComm類的成員函數(shù)SendMsg發(fā)送數(shù)據(jù)通知對方,發(fā)送的數(shù)據(jù)很簡單:起始
52、坐標,終點坐標和棋子信息。這組信息被保存在int型變量UpdateAllData中,并用itoa函數(shù)將其轉(zhuǎn)換成char型的CUpdateAllData再通過SendMsg發(fā)送出去。UpdateAllData數(shù)據(jù)定義:共7位,最高位固定為1,其后依次是i ,j, InfoArrayij, Prei, Prej。其中InfoArrayij為兩位數(shù),不足兩位十位加0(如紅方炮InfoArray代碼是6,此處應(yīng)為06)。(i,j),(Prei,Prej)表示終點和起始坐標,如“炮二平五”的代碼可表示為 1770647(紅方炮(InfoArrayPreiPrej=6)從坐標(7,7)走至 (4,7) )
53、。表3-3 通信代碼一覽代碼含義10000邀請對方聯(lián)機而定義的專用代碼10001接受對方邀請而返回的專用代碼10002一方強行退出時發(fā)消息反饋通知另一方的專用代碼10001011891679著法的代碼范圍其他聊天信息已經(jīng)給出了發(fā)出邀請和接受邀請的代碼:10000和10001。要與局域網(wǎng)內(nèi)其他機器通信,必須知道對方IP地址(或主機名),在窗口中加入一個編輯框用于接收用戶輸入的IP地址(或主機名),除此之外還需要增加一個編輯框用于獲得與程序綁定的端口,用于傳輸數(shù)據(jù)(本程序默認綁定的端口是:5050)。當甲方向乙方發(fā)出邀請后,乙方收到信息并彈出對話框詢問用戶是否接受,如選擇接受,乙方將自動保存甲方I
54、P地址至變量ClientAddr,同時返回10001給甲方并初始化棋盤等待甲方走棋,甲方收到10001將提示用戶對方已接受,并初始化棋盤等待甲方走棋。3.4.3數(shù)據(jù)更新在WM_LBUTTONDOWN消息響應(yīng)中,對于正確的行棋,將通過一個if語句來判斷是否處于聯(lián)機狀態(tài)以決定是否發(fā)送著法數(shù)據(jù);成功聯(lián)機bool型的變量Online將被賦值為true。UpdateAllData的值取法:UpdateAllData=1*1000000+i*100000+j*10000+InfoArrayPreiPrej*100+Prei*10+Prej; 將UpdateAllData用itoa轉(zhuǎn)換成char型的CUpd
55、ateAllData通過SendMsg發(fā)送給對方。接受方根據(jù)對方發(fā)送數(shù)據(jù)的范圍判斷應(yīng)該執(zhí)行哪步操作(具體參見表6.1通信代碼一覽),對于10001011891679范圍的代碼(即著法代碼),通過下面語句與i ,j, InfoArrayij, Prei, Prej一一對應(yīng):i=(ibuf/100000)%(ibuf/1000000*10);j=(ibuf/10000)%(ibuf/100000*10);ijvalue=(ibuf/100)%(ibuf/10000*10);Prei=(ibuf/10)%(ibuf/100*10);Prej=ibuf%(ibuf/10*10);其中ibuf=UpdateAllData,ijvalue= InfoArrayij,簡單來說就是UpdateAllData取值的逆運。下面的操作只需更改相關(guān)InfoArray的值(InfoArrayij=ijvalue;InfoArrayPreiPrej=0),并調(diào)用InvalidateRect函數(shù)來刷新視圖即可。3.4.4聊天功能在平臺中加入聊天功能可增加雙方對弈時的樂趣,而且本身實現(xiàn)起來并不難。信息收發(fā)和著法數(shù)據(jù)的收發(fā)較為類似。首先,在窗口中加入兩個編輯框分別用來顯示接收的聊天信息和輸入發(fā)送的信息,再添加一個發(fā)送按
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026黑龍江鶴崗市工農(nóng)區(qū)招聘公益性崗位人員34人筆試備考題庫及答案解析
- 2026年保山市市直事業(yè)單位遴選管理人員和專業(yè)技術(shù)人員(18人)考試參考題庫及答案解析
- 2026上海分子細胞卓越中心陳玲玲組招聘實驗技術(shù)員2人考試備考題庫及答案解析
- 2026年黃山市徽州區(qū)事業(yè)單位統(tǒng)一公開招聘工作人員18名筆試模擬試題及答案解析
- 2026年湖南衡陽日報社招聘事業(yè)單位工作人員16人筆試參考題庫及答案解析
- 2026年新員工融入與帶教培訓
- 2026年工程地質(zhì)三維建模的可視化展示技術(shù)
- 2026年工程地質(zhì)工程測試與評價
- 2026年年關(guān)鍵趨勢可持續(xù)與房地產(chǎn)市場
- 2026年殼體結(jié)構(gòu)的受力分析
- 中資企業(yè)在泰國發(fā)展報告(2024-2025)-境外商會聯(lián)席會議-202509
- 企業(yè)辦公室主任年終總結(jié)
- 馬鈴薯脫毒試管苗繁育技術(shù)規(guī)程
- 2025人教版四年級數(shù)學上學期杭州市期末真題卷(含答案)
- 養(yǎng)老院護理等級標準實施細則
- 院感新規(guī)范解讀
- 醫(yī)務(wù)人員感染標準預(yù)防
- 專題08 無刻度直尺作圖(35題)(江西專用)5年(2021-2025)中考1年模擬《數(shù)學》真題分類匯編
- GB/T 9750-2025涂料和顏料產(chǎn)品包裝、標志、運輸和貯存通則
- 口腔醫(yī)護管理辦法
- 山東省青島市2024–2025學年高三生物上學期期末試題【含答案】
評論
0/150
提交評論