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

正文內(nèi)容

基于mfc的對(duì)戰(zhàn)象棋設(shè)計(jì)與實(shí)現(xiàn)_畢業(yè)論文(編輯修改稿)

2024-10-04 13:40 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 以采用鼠標(biāo)操作進(jìn)行對(duì)弈; 2) 可以實(shí)現(xiàn)走 棋 、悔棋、還原 、認(rèn)輸 功能 ; 3) 可以滿足兩人 局域網(wǎng)內(nèi) 對(duì)弈; 4) 可以在任意時(shí)間重新開(kāi)始游戲; 5) 可以進(jìn)行簡(jiǎn)單錯(cuò)誤判斷,并直接返回到前一步棋子狀態(tài); 6) 可以進(jìn)行背景棋盤和棋子種類的變換; 7) 可以實(shí)現(xiàn)自由設(shè)置棋譜(怪棋); 8) 可以實(shí)現(xiàn)棋子黏在鼠標(biāo)上移動(dòng),增加美感 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 10 軟件信息 1) 軟件名稱:基于 MFC的局域網(wǎng)內(nèi)對(duì)戰(zhàn)象棋設(shè)計(jì)與實(shí)現(xiàn) 2) 開(kāi)發(fā)平臺(tái): Microsoft Visual C++ 3) 用戶:象棋愛(ài)好者 4) 本設(shè)計(jì) 在各個(gè)方面均具有可行性,方便易用,無(wú)需安裝即可使用 流程圖 ( 1) 游戲交互圖 ,如 圖 21所示 圖 21 游戲交互圖 ( 2)程序流程圖 首先,選擇是否建立主機(jī),否則為客戶機(jī)。若建立主機(jī) ,則建立一個(gè)端口,用于和客戶機(jī)的交互連接,然后等待知道有客戶機(jī)連上??蛻魴C(jī)建立,則選擇主機(jī)的 ip 地址和端口。游戲雙方先后點(diǎn)擊開(kāi)始,開(kāi)始游戲。 紅方、黑方在到自己狀態(tài)時(shí),可以移動(dòng)自己的棋子 ,悔棋,還原,認(rèn)輸?shù)鹊?。 走棋, 點(diǎn)擊鼠標(biāo)左鍵選中棋子,移動(dòng),放到想到達(dá)的地方,系統(tǒng)調(diào)用 CanGoTo 函數(shù),判斷是否可到,若可到,則棋子放到目的地,否則返回棋子原來(lái)的地方能夠。走棋成功后,發(fā)送消息給對(duì)方,對(duì)方接收消息后,進(jìn)行相應(yīng)的操作。進(jìn)行若干步之后, 若帥或者將被吃掉,則判定勝負(fù)。 具體流程 , 見(jiàn)圖 22 程序流程圖。 游戲界面 網(wǎng)絡(luò) 游戲內(nèi)核 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 11 圖 22 程序流程圖 開(kāi)始 結(jié)束 等待直到收到消息 調(diào)用 FetchMsg 處理相應(yīng)的信息 如果帥編號(hào)屬性不是 帥 等待直到收到消息 調(diào)用 FetchMsg 處理相應(yīng)的信息 如果將編號(hào)屬性不是將 Y 輸入主機(jī) IP 地址 和端口號(hào) N m_State=1 建立主機(jī) 建立端口 m_State=0 走棋 ,悔棋 ,還原 操作 SendMsg 相應(yīng)消息 Y N Y (m_State+1)%2 Y Y N N N 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 12 3 程序詳細(xì)設(shè)計(jì)說(shuō)明 界面設(shè)計(jì) 本程序界面簡(jiǎn)單明了,包括棋盤顯示, listbox,開(kāi)始、悔棋、還原、認(rèn)輸四個(gè)按鈕,還有用于聊天的 edit 和發(fā)送按鈕 。 菜單欄包括文件,控制 ,背景,幫助。 其中 listbox 是記錄每步棋子走棋 的信息 和聊天信息 ,也是實(shí)現(xiàn)悔棋功能的一個(gè)重要存儲(chǔ)器。它是一個(gè)棧,可以記錄,刪除,提取每步棋子的信息?;谄宀僮骺梢詮闹械玫较鄳?yīng)的數(shù)據(jù)來(lái) 實(shí)現(xiàn)悔棋功能。 文件內(nèi)有新游戲、擺棋操作,控制內(nèi)有悔棋、還原、認(rèn)輸操作,背景內(nèi)有棋盤和棋子的切換操作。 主界面,如圖 31所示 圖 31 主界面 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 13 棋盤、棋子的位圖載入與切換 ( 1) 棋盤、棋子的位圖載入 本設(shè)計(jì) 實(shí)現(xiàn)了棋盤和棋子的自由無(wú)限制轉(zhuǎn)換,采用了外部圖片載入的方式,加載的位圖,棋盤棋子一起加載,沒(méi)有自己繁瑣的自繪棋盤棋子過(guò)程。 本 設(shè)計(jì) 有 6 種棋盤, 3 種棋子可以搭配。若程序在開(kāi)始時(shí)就全部加載,會(huì)浪費(fèi)大量?jī)?nèi)存,因?yàn)橛螒蜻^(guò)程中只需要一副棋盤棋子,且不利于更多棋盤和棋子種類的更新,也不利于后期維護(hù)。故 本程序采用外部圖片載入的方式,載入棋盤棋子,每次切換調(diào)用SetBoardandPiece(CString strBoard , CString strPiece)重新對(duì)棋盤棋子的位圖進(jìn)行賦值。 strBoard, strPiece 代表棋盤, 棋子 的存放文件夾相對(duì)物理地址 。 HBITMAP CChess_mView::LoadFileBmp(CString filePath) { Return(HBITMAP)LoadImage(AfxGetInstanceHandle(),filePath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE)。 } void CChess_mView::SetBoardandPiece(CString strBoard, CString strPiece ) { //0 紅兵 1 紅袍 2紅車 3 紅馬 4紅相 5紅士 6 紅帥 7黑兵 8 黑袍 9黑車 10黑馬 11 黑象 12黑士 13 黑將 大于 13 不是棋子 ChessList[13] = LoadFileBmp(strPiece + )。 ChessList[12] = LoadFileBmp(strPiece + )。 ChessList[11] = LoadFileBmp(strPiece + )。 ChessList[10] = LoadFileBmp(strPiece + )。 ChessList[9] = LoadFileBmp(strPiece + )。 ChessList[8] = LoadFileBmp(strPiece + )。 ChessList[7] = LoadFileBmp(strPiece + )。 ChessList[6] = LoadFileBmp(strPiece + )。 ChessList[5] = LoadFileBmp(strPiece + )。 ChessList[4] = LoadFileBmp(strPiece + )。 ChessList[3] = LoadFileBmp(strPiece + )。 ChessList[2] = LoadFileBmp(strPiece + )。 ChessList[1] = LoadFileBmp(strPiece + )。 ChessList[0] = LoadFileBmp(strPiece + )。 ChessList[14] = LoadFileBmp(strPiece + )。//光標(biāo)位圖 ChessList[15] = LoadFileBmp(strBoard)。 ChessList[16] = LoadFileBmp(strPiece + )。 //用于遮罩技術(shù)(見(jiàn)關(guān)鍵技術(shù)) } ( 2) 棋盤、棋子的 切換 當(dāng)點(diǎn)擊菜單欄背景的棋盤或者 棋子,可以選擇不同的 棋盤和棋子。減少玩家的 視覺(jué)審美疲勞。 每按一個(gè)按鈕,其實(shí)是改變了存放棋盤或棋子的函數(shù) SetBoardandPiece(CString 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 14 strBoard , CString strPiece)中的 strBoard 或 strPiece,即棋譜棋子的存放文件夾相對(duì)物理地址 ,完成了棋盤棋子的種類切換,并用 Invalidate(FALSE)及時(shí)更新顯示。 例如點(diǎn)擊棋盤的水滴棋盤 void CChess_mView::OnDrop() { m_strBoard = res\\images\\。 SetBoardandPiece(res\\images\\,m_strPiece)。 Invalidate(FALSE)。 } 運(yùn)行圖 ,如圖 31 所示 : 圖 32 棋盤、棋子的 切換 光標(biāo)生成 雙方局域網(wǎng)內(nèi)對(duì)戰(zhàn),消息傳遞過(guò)來(lái),執(zhí)行操作了,但是我 不 能馬上知道對(duì)方動(dòng)了哪個(gè)棋子 ;可能已經(jīng)動(dòng)了,但是我不知道,浪費(fèi)時(shí)間。 光標(biāo)的生成 ,可以起到提醒對(duì) 方我已經(jīng)走過(guò)棋了, 也利于在我方還沒(méi)有出招之前始終知道對(duì)方的上一步是怎么走的,只有在我方出招之后對(duì)方的操作痕跡才可能被銷毀,這樣的設(shè)計(jì)增強(qiáng)了棋譜的可讀性,也減輕了玩家的記憶負(fù)擔(dān)。 光標(biāo)在棋盤載入的時(shí)候就一起載入了 ChessList[14] = LoadFileBmp(strPiece + )。 在選中棋子時(shí),即鼠標(biāo)左鍵按下后,鼠標(biāo) move 的時(shí)候就把光標(biāo)位圖貼到選中子的周圍,鼠標(biāo) up 再把位圖貼到 up 的位置上。 具體代碼見(jiàn)鼠標(biāo)的消息處理函數(shù), OnLButtonDown(), OnMouseMove(), OnLButtonUp() 運(yùn)行結(jié)果,如圖 32 所示 : 圖 33 光標(biāo)生成 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 15 數(shù)據(jù)結(jié)構(gòu) 本設(shè)計(jì) 主要包含 CChess, CChess_mView, Cmanager, CNet, CNetControl 四個(gè)類。 CNet, CNetControl 兩個(gè)類用于網(wǎng)絡(luò)部分,后面網(wǎng)絡(luò)功能部分再詳解。 ( 1) CChess 類是棋子類,存儲(chǔ)了棋子的相關(guān)屬性信息。 class CChess { public: int type。//0 紅兵 1 紅袍 2 紅車 3 紅馬 4 紅相 5 紅士 6 紅帥 7 黑兵 8 黑袍 9 黑車10 黑 馬 11 黑象 12 黑士 13 黑將 大于 13 不是棋子 CString name。 int x。 int y。 }。 Type 即棋子的類別用于判定屬于哪種棋子。 name 棋子的名字,例如“炮”。 x, y 是棋子在邏輯坐標(biāo)軸上的坐標(biāo)。 ( 2) Cmanager 類是棋子控制類 ,是游戲內(nèi)核 。 class CManager { public: CChess nChessinfo[32]。//記錄 32 個(gè)棋子的信息 int map[9][10]。//記錄棋盤上的信息 int PlayerAc。//用來(lái)判斷是哪個(gè)棋手 void InitData()。//數(shù)據(jù)初始化 int m_State。// 游戲狀態(tài) 游戲等待中 ,等待開(kāi)始 0、游戲中 紅方走棋 游戲中 黑方走棋 int top。 //記錄游戲步數(shù) int Marry[500][8]。 //記錄 前一個(gè)的標(biāo)號(hào) ,type,x,y 后一個(gè)的標(biāo)號(hào) ,type,x,y 共八個(gè)信息 int MarryTop。 //記錄游戲步數(shù),為了還原時(shí)能夠判斷 int count。 //記錄 listbox 的步數(shù) 包括游戲步奏和聊天記錄 public: 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 16 int Search(int x,int y)。//找是第幾顆棋子 共 32 顆( 0~31),若不存在棋子,返回 32 bool CanGoTo(int Old_Point_x,int Old_Point_y,int Now_Point_x,int Now_Point_y,int chesstype)。//判斷棋子能否到達(dá),是每個(gè)棋子的走法判斷 bool ShuaiCanGoTo(int Old_Point_x,int Old_Point_y,int Now_Point_x,int Now_Point_y,int chesstype)。 //是關(guān)于將帥問(wèn)題的能否到達(dá)判斷,將帥不共線 }。 ( 3) CChess_mView 類是程序的顯示類,也包含少部分的棋子控制操作功能和很多消息響應(yīng)函數(shù),由于篇幅問(wèn)題沒(méi)有全部顯示。 class CChess_mView : public CView { protected: CChess_mView()。 DECLARE_DYNCREATE(CChess_mView) // Attributes public: CChess_mDoc* GetDocument()。 CNetControl *m_pControl。 //網(wǎng)絡(luò)控制顯示 int choosed。 //記錄前一個(gè)棋子是第幾個(gè)棋子 int OldType。 //記錄前一個(gè)棋子的類型 int OldX。 //記錄前一個(gè)棋子的橫坐標(biāo) int OldY。 //記錄前一個(gè)棋子的縱坐標(biāo) ///用于右鍵功能 int Rchoosed。 //記錄當(dāng)前一個(gè)棋子是第幾個(gè)棋子 int ROldX。 //記錄前一個(gè)棋子的橫坐標(biāo) int ROldY。 //記錄前一個(gè)棋子的縱坐標(biāo) //變量定義 HBITMAP ChessList[17]。 //位圖數(shù)組 CString m_strPiece。//棋子根目錄 CString m_strBoard。//棋盤根目錄 int m_nBoardIndex,m_nPieceIndex。 //背景設(shè)置選擇 //定義畫圖用 CDC CDC Background。//背景句柄 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 17 CDC ChessAll。 //最終刷新句柄 CDC Buffer。//緩沖句柄 用于雙緩沖 CListBox m_listbox。 //用于 記錄每步棋子走棋 的信息 和聊天信息 CButton m_ok。 //開(kāi)始按鈕 CButton m_goback。 //悔棋按鈕 CButton m_huanyuan。 //還原按鈕 CButton m_renshu。 //認(rèn)輸按鈕 CButton m_send。//聊天發(fā)送 按鈕 CEdit m_edit。//用于聊天的 edit int down_move。//用于鼠標(biāo)按下時(shí)的控制 int move_up。 //用于鼠標(biāo)彈上時(shí)的控制 int goba
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1