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

正文內(nèi)容

基于mfc的對(duì)戰(zhàn)象棋設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)(文件)

 

【正文】 個(gè)且只能有一個(gè)派生于 CWinApp 的類對(duì)象。 ( CChess_mDoc) 文檔類實(shí)際上是一種數(shù)據(jù)結(jié)構(gòu),該類實(shí)現(xiàn)了對(duì)這種結(jié)構(gòu)的封裝以利于管理,通常,它不但包含應(yīng)用中所需的數(shù)據(jù),而且也包含了處理這些數(shù)據(jù)的方法,另外,文檔類還可以為應(yīng)用提供與其存儲(chǔ)的數(shù)據(jù)相關(guān)的服務(wù)。而只需要使用對(duì)話框資源 編輯器對(duì)對(duì)話框模板進(jìn)行簡(jiǎn)單的編輯即可。這實(shí)現(xiàn)了程序開(kāi)發(fā)者與硬件設(shè)備 的隔離,大大方便了開(kāi)發(fā)工作。 一旦獲得設(shè)備描述表的句柄,系統(tǒng)就是使用默認(rèn)的屬性值填充設(shè)備描述表結(jié)構(gòu)。 消息機(jī)制 MFC 傳輸?shù)南⒂腥N類型:命令消息,控件通知和窗口消息。通常,消息是從系統(tǒng)發(fā)送到窗口,或從窗口發(fā)送到窗口。 發(fā)送消息時(shí),直接調(diào)用窗口的窗口進(jìn)程,通信是即時(shí)的,直到窗口進(jìn)程為調(diào)用函數(shù)返回一個(gè)結(jié)果時(shí),應(yīng)用程序才能繼續(xù)。 在消息隊(duì)列中,寄送的消息接受特殊的鼠標(biāo)和鍵盤處理。 32 個(gè)棋子由一個(gè)統(tǒng)一的棋子型 CChess 數(shù)組存儲(chǔ),統(tǒng)一管理顯示。如果下一步坐標(biāo)的位置上有棋子,則將該棋子的 type 改為 15,這樣繪圖時(shí)就不會(huì)顯示該棋子的位圖。 Socket 編程分為兩種:面向連接協(xié)議網(wǎng)絡(luò)通信編程和面向無(wú)連接的網(wǎng)絡(luò)通信編程。 1) 可以采用鼠標(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ī)。 紅方、黑方在到自己狀態(tài)時(shí),可以移動(dòng)自己的棋子 ,悔棋,還原,認(rèn)輸?shù)鹊?。 具體流程 , 見(jiàn)圖 22程序流程圖。它是一個(gè)棧,可以記錄,刪除,提取每步棋子的信息。 本 設(shè)計(jì) 有 6 種棋盤, 3 種棋子可以搭配。 HBITMAP CChess_mView::LoadFileBmp(CString filePath) { Return(HBITMAP)LoadImage(AfxGetInstanceHandle(),filePath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE)。 ChessList[10] = LoadFileBmp(strPiece + )。 ChessList[6] = LoadFileBmp(strPiece + )。 ChessList[2] = LoadFileBmp(strPiece + )。//光標(biāo)位圖 ChessList[15] = LoadFileBmp(strBoard)。 每按一個(gè)按鈕,其實(shí)是改變了存放棋盤或棋子的函數(shù) SetBoardandPiece(CString 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 14 strBoard , CString strPiece)中的 strBoard 或 strPiece,即棋譜棋子的存放文件夾相對(duì)物理地址 ,完成了棋盤棋子的種類切換,并用 Invalidate(FALSE)及時(shí)更新顯示。 } 運(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í)間。 具體代碼見(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è)類。//0 紅兵 1 紅袍 2 紅車 3 紅馬 4 紅相 5 紅士 6 紅帥 7 黑兵 8 黑袍 9 黑車10 黑馬 11 黑象 12 黑士 13 黑將 大于 13 不是棋子 CString name。 Type 即棋子的類別用于判定屬于哪種棋子。 class CManager { public: CChess nChessinfo[32]。//數(shù)據(jù)初始化 int m_State。 //記錄游戲步數(shù),為了還原時(shí)能夠判斷 int count。 //是關(guān)于將帥問(wèn)題的能否到達(dá)判斷,將帥不共線 }。 CNetControl *m_pControl。 //記錄前一個(gè)棋子的橫坐標(biāo) int OldY。 //記錄前一個(gè)棋子的縱坐標(biāo) //變量定義 HBITMAP ChessList[17]。 //背景設(shè)置選擇 //定義畫圖用 CDC CDC Background。 //用于 記錄每步棋子走棋 的信息 和聊天信 息 CButton m_ok。 //認(rèn)輸按鈕 CButton m_send。 //用于鼠標(biāo)彈上時(shí)的控制 int goback_huanyuan。//還原 void OnRenShu()。 //新游戲 void TextOutTop()。//用于網(wǎng)絡(luò)動(dòng)棋子的時(shí)候整體刷新 HBITMAP LoadFileBmp(CString filePath)。 cs)。 //}}AFX_VIRTUAL // Implementation public: virtual ~CChess_mView()。 endif protected: //{{AFX_MSG(CChess_mView) ????? .(省略 ) //}}AFX_MSG DECLARE_MESSAGE_MAP() }。 首先,不管是什么棋子,都不能吃自己一方的棋子。若只有一個(gè),則表示目標(biāo)位置沒(méi)有棋子,可以直達(dá)。 int n=0。 } if(1==n) return true。 else return false。 for(int i=minrow。 else if((2==n)amp。 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 20 } } 馬 馬 走日,所以要判斷始末位置的 X和 Y的差值的乘積是不是 2或者 2。 //日字的范圍 if((2!=row*col)amp。 else return false。 else return false。 } 相(象) 相 和 象 活動(dòng)范圍不同,所以要分開(kāi)判斷。(Now_Point_y=4)) { int row=Now_Point_xOld_Point_x。(2==col)amp。amp。 } else if((2==row)amp。(14==map[Old_Point_x+1][Old_Point_y1])) { return true。amp。 } //紅象 else if(4==chesstype) { 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 22 if ((Now_Point_y=5)amp。 //田字范圍 if ((2==row)amp。(14==map[Old_Point_x1][Old_Point_y1])) { return true。amp。(2==col)amp。amp。 } else return false。(Now_Point_x=5)amp。(Now_Point_y=2)) { int row=abs(Now_Point_yOld_Point_y)。(row==1)) { return true。amp。amp。amp。 } 帥(將) 帥或者將只能在自己的 九宮內(nèi) 左右上下走一格。(Now_Point_x=5)amp。(Now_Point_y=2)) { int row=abs(Now_Point_yOld_Point_y)。1==col)||(1==rowamp。 } else return false。amp。 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 24 int col=abs(Now_Point_xOld_Point_x)。amp。 } 炮( 砲 ) 炮不僅可以和車一樣直走多步,還可以跳子吃子。 int n=0。 } //無(wú)子,可以放置 if(1==n) return true。 else return false。 淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 25 for (int i=minrow。 else if((3==n)amp。 } else return false。如黑卒 ,未過(guò)河前, X前后不變 , Y比之前多 1, 可達(dá)。(Old_Point_y=4)) { if ((Old_Point_x==Now_Point_x)amp。 } //已過(guò)河 else if ((Old_Point_y=5)amp。(Now_Point_yOld_Point_y==1)) { return true。 } else return false。amp。amp。 } else if((abs(Old_Point_xNow_Point_x)==1)amp。 } } 功能 走棋 走棋 功能包括三個(gè)部分,第一是選棋子,第二是移動(dòng)棋子,第三是選擇目的地。 void CChess_mView::OnLButtonDown(UINT nFlags, CPoint point) { if (==) { if ((=BOARD_EDGE+CHESS_SIZE*9)amp。(=BOARD_HEIGHTBOARD_EDGE)amp。 if ((==0amp。[OldX][OldY]=0)||(==1 amp。[OldX][OldY]6))) { if (==0)//紅方 { if ([OldX][OldY]=6) { choosed=(,)。 } } if(==1) //黑方 { if([OldX][OldY]14amp。 [choosed].type=15。 } ( 2) LButtonMove 操作 為了美觀, LButtonMove 操作需要做的就是選中的棋子跟著鼠標(biāo)移動(dòng),主要要用到雙淮陰師范學(xué)院畢業(yè)論文(設(shè)計(jì)) 28 緩沖技術(shù),這個(gè)在關(guān)鍵技術(shù)那部分做詳細(xì)介紹。amp。 Marry[top][3]=OldY。 Marry[top][7]=int ()/CHESS_SIZE。 nChessinfo[choosed].y=Marry[top][7]。 //listbox 顯示 CString str。 if (nChessinfo[15].type!=6) { Mess。 (str)。 PrintAll()。 } //把棋譜的 map[OldX][OldY] 變空 map[OldX][OldY]=14。 Marry[top][5]=nChessinfo[Search(,)].type。 Marry[top][1]=OldType。 void CChess_mView::OnLButtonUp(UINT nFlags, CPoint point) { [choosed].type=OldType。 down_move=1。[OldX][OldY]6) { choosed=(,)。 [choosed].type=15。([OldX][OldY]14amp。[OldX][OldY]=6 amp。(=BOARD_EDGE)) { OldX=()/CHESS_SIZE。(=BOARD_EDGE) amp。移動(dòng)棋子到達(dá)目的地時(shí),要判斷棋子是否能到達(dá)這里,即調(diào)用 CanGoTo()和 ShuaiCanGoTo()函數(shù),若可以則讓該棋子落在此處。(0==Old_Point_yNow_Point_y)) { return true。amp。 } else return false。amp。amp。(Old_Point_y=9)) { if ((Old_Point_x==Now_Point_x)amp。(Now_Point_yOld_Point
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1