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

正文內(nèi)容

基于mfc的對戰(zhàn)象棋設(shè)計與實現(xiàn)畢業(yè)論文-資料下載頁

2025-06-19 18:42本頁面
  

【正文】 yTop][7])。 m_pControlSendMsg(st)。//傳送本方操作給對方 } else { MessageBeep(1)。 //顯示聲音 nChessinfo[choosed].x=OldX。 nChessinfo[choosed].y=OldY。 map[nChessinfo[choosed].x][nChessinfo[choosed].y]=nChessinfo[choosed].type。 PrintAll()。}} ReleaseDC(pDC)。 OldX=1。 OldY=1。 down_move=0。 move_up=0。 CView::OnLButtonUp(nFlags, point)。} 悔棋悔棋功能靠的就是二維數(shù)組Marry記錄的每步棋子的走棋步驟。Marry[500][8]記錄 前一個的標(biāo)號,type,x,y 后一個的標(biāo)號,type,x,y,即記錄走棋前的前一點的信息,和后一點的信息。這樣只要用當(dāng)前的Marry[][]的數(shù)據(jù)去重新賦值,即完成悔棋。void CChess_mView::OnGoBack(){ if (==(+1)%2||goback_huanyuan==1) { if (1) { count。 top。 nChessinfo[Marry[top][0]].type=Marry[top][1]。 nChessinfo[Marry[top][0]].x=Marry[top][2]。 nChessinfo[Marry[op][0]].y=Marry[top][3]。 map[Marry[top][2]][Marry[mtop][3]]=Marry[top][1]。 nChessinfo[Marry[top][4]].type=Marry[top][5]。 nChessinfo[Marry[top][4]].x=Marry[top][6]。 nChessinfo[Marry[top][4]].y=Marry[top][7]。 map[Marry[top][6]][Marry[top][7]]=mMarry[top][5]。 PrintAllMsg()。//重繪位圖 CString str。 int i=。 (i,str)。 while(!(strncmp(str,你,2)amp。amp。strncmp(str,他,2))) { i。 (i,str)。 } (i)。 =(+1)%2。 m_pControlSendMsg(HQ)。 goback_huanyuan=1。 } else { MessageBeep(1)。 } } } 還原還原功能也是借助Marry保存的記錄,把第一個標(biāo)號的屬性換成第二個標(biāo)號的數(shù)據(jù),第一個標(biāo)號的type設(shè)為無。void CChess_mView::OnHuanYuan(){ if (goback_huanyuan==1) { if (=MarryTop) { nChessinfo[Marry[top][4]].type=15。 nChessinfo[Marry[top][4]].x=Marry[top][2]。 nChessinfo[Marry[top][4]].y=Marry[top][3]。 map[Marry[top][2]][Marry[top][3]]=14。 nChessinfo[Marry[top][0]].type=Marry[top][1]。 nChessinfo[Marry[top][0]].x=Marry[top][6]。 nChessinfo[Marry[top][0]].y=Marry[top][7]。 map[Marry[top][6]][Marry[top][7]]=Marry[top][1]。 PrintAllMsg()。 CString str。 (%d:%s(%d,%d)(%d,%d),top++,nChessinfo[Marry[top][0]].name,Marry[top][2],Marry[top][3],Marry[top][6],Marry[top][7])。 (str)。 (++)。 =(+1)%2。 m_pControlSendMsg(HY)。 } else { MessageBeep(1)。 goback_huanyuan=0。 } }} 認(rèn)輸認(rèn)輸比較簡單,只需把游戲狀態(tài)設(shè)為1; 擺棋你們雙方其中有一個人很厲害嗎?你想來點怪棋玩玩嗎?那么你就右擊鼠標(biāo)。你可以擺棋,可以修改、刪除任意棋子(除了將帥,不能修改,不能刪除,因只此一個)。 網(wǎng)絡(luò)Socket的使用是基于CS系統(tǒng)的(客戶機(jī)、服務(wù)器),客戶機(jī)和服務(wù)器的Socket使用不太一樣,分別有以下幾個步驟。服務(wù)器:(1) 創(chuàng)建服務(wù)器Socket(Create);(2) 服務(wù)器Socket進(jìn)行信息綁定(Bind),并開始監(jiān)聽連接(Listen);(3) 接受來自客戶端的連接請求(Accept),創(chuàng)建接受進(jìn)程;(4) 開始交換數(shù)據(jù)(Send,Receive);(5) 關(guān)閉Socket(Close)??蛻魴C(jī):(1) 創(chuàng)建客戶機(jī)Socket(Create);(2) 連接服務(wù)器(Connect),如果接收,創(chuàng)建接受進(jìn)程;(3) 開始交換數(shù)據(jù)(Send,Receive)(4) 關(guān)閉Socket(Close)。對于Socket對象,本設(shè)計對它進(jìn)行繼承,并重寫函數(shù),改造使它擁有更多功能。在Socket原有的基礎(chǔ)上加入了virtual OnAccept(int nErrorCode)和virtual void OnReceive(int nErrorCode)的重寫,同時加入了NetControl的指針*m_Nc,并用*m_Nc初始化CNet。改寫后的函數(shù)其實是對NetControl進(jìn)行操作,這樣的好處就是直接把信息傳入到了NetControl進(jìn)行具體的響應(yīng)。class CNet : public CSocket{public: CNetControl *m_Nc。 void OnAccept(int nErrorCode)。 void OnReceive(int nErrorCode)。 CNet()。 CNet(CNetControl *m_Ncc)。 virtual ~CNet()。}。class CNetControl {public: CNetControl(CChess_mView *p)。//用視圖類指針作為參數(shù)初始化,為的就是可以在網(wǎng)絡(luò)端控制顯示 void SendMsg(char const *pMsg)。 //發(fā)送操作消息 void OnSorc()。//開始選擇做服務(wù)器還是客戶機(jī) void OnSet()。//設(shè)定服務(wù)器 void OnOpen()。//判斷Socket是否已經(jīng)建立,是否連接到服務(wù)器 void FetchMsg(CNet *pRequest)。//消息處理函數(shù) CNet * ConnectServer()。//連接服務(wù)器 CNetControl()。 virtual ~CNetControl()。 UINT m_port。 //端口 LPCTSTR m_server。//服務(wù)器名稱 CNet *m_pSocket。//請求連接 CNet *m_pListening。//監(jiān)聽Socket CChess_mView *m_pView。//繪圖指針 bool m_Ready[2]。//用戶雙方判斷開始準(zhǔn)備的}。其中,其他的幾個函數(shù)建立時都是大體一致,而消息處理函數(shù)要配合著消息發(fā)送函數(shù)一起。其中消息處理函數(shù)FetchMsg(CNet *pRequest)是網(wǎng)絡(luò)編程的重點。這個函數(shù)要包括幾乎所有的功能,走棋,悔棋,判斷,聊天功能等等。void CNetControl::FetchMsg(CNet *pRequest){//接收數(shù)據(jù) char Msg[10000],tempMsg[1000]。 int ByteCount。 int End=0。 CStringArray *temp=new CStringArray。 strcpy(Msg,)。 do { strcpy(tempMsg,)。 ByteCount=pRequestReceive(tempMsg,1000)。 if(ByteCount1000||ByteCount=0) { MessageBox(GetActiveWindow(),接受網(wǎng)絡(luò)信息發(fā)生錯誤,警告信息,MB_OK)。 return 。 } else if(ByteCount1000amp。amp。ByteCount0) { End=1。 } tempMsg[ByteCount]=0。 strcat(Msg,tempMsg)。 } while(End==0)。 //處理相應(yīng)的函數(shù) 代碼省略 if(!strncmp(Msg,ZQ,2)) 走棋 if(!strncmp(Msg,HQ,2)) 悔棋 if(!strncmp(Msg,HY,2)) 還原 if(!strncmp(Msg,ok,2)) 開始 if(!strncmp(Msg,RH,2)) 認(rèn)輸 if(!strncmp(Msg,LT,2)) 聊天 if(!strncmp(Msg,XG,2)) 右擊鼠標(biāo) 設(shè)置任何棋譜 修改棋子 if(!strncmp(Msg,SC,2)) 右擊鼠標(biāo) 設(shè)置任何棋譜 刪除棋子} 關(guān)鍵技術(shù) 遮罩技術(shù)所謂“遮罩”就是一張和要透明繪制的位圖相應(yīng)的黑白雙色的位圖。原位圖的透明部分即是“遮罩”的黑色部分,而不透明的部分在“遮罩”中是白色,我們可以先將“遮罩”和棋盤的位圖做“MERGEPAINT”操作,然后再和要透明繪制的位圖做“SRCAND”操作。這樣就可以獲得沒有邊框的棋子,圓潤的附在棋子上了。(ChessList[16])。(,CHESS_SIZE,CHESS_SIZE,amp。ChessAll,0,0,MERGEPAINT)。(ChessList[OldType])。 (,CHESS_SIZE,CHESS_SIZE,amp。ChessAll,0,0,SRCAND)。pDCBitBlt(0,0,BOARD_WIDTH,BOARD_HEIGHT,amp。Buffer,0,0,SRCCOPY)。ReleaseDC(pDC)。說明:MERGEPAINT使用布爾OR操作符合并特征與源位圖SRCCOPY 拷貝源位圖到目標(biāo)位圖。 雙緩沖技術(shù)當(dāng)我們想要選中的棋子黏在鼠標(biāo)上面跟著移動時,我們發(fā)現(xiàn)界面會閃爍。我們知道GDI繪圖過程大多放在OnDraw函數(shù)中,OnDraw在進(jìn)行屏幕顯示時是由OnPaint進(jìn)行調(diào)用的。當(dāng)窗口由于任何原因需要重繪時,比如MouseMove事件,總是先用背景色將顯示區(qū)清除,然后才調(diào)用OnPaint,而背景色一般與重繪的內(nèi)容相差很大,這樣在很短的時間內(nèi)背景色和重繪內(nèi)容會反復(fù)出現(xiàn),窗口看起來就像在閃。不過若將背景刷設(shè)置為NULL,這樣就沒有背景和重繪圖形的交替,即沒有閃爍。但是,這樣重繪圖形會反復(fù)疊加,效果很差。因為重繪時沒有用背景色對繪圖區(qū)域進(jìn)行刷新,而僅是在原來圖形上疊加上了新的圖形。利用雙緩沖技術(shù),在內(nèi)存DC中事先把要顯示的圖畫好,然后再一次性將內(nèi)存中畫好的圖貼到窗口中。由于這種方法沒有直接窗口上繪圖、擦寫,就是一整張一整張的貼上去的,沒有閃爍。void CChess_mView::OnMouseMove(UINT nFlags, CPoint point) { if (1==down_move) { CDC *pDC=GetDC()。 PrintAll()。 (ChessList[14])。//光標(biāo) (OldX*CHESS_SIZE+BOARD_EDGE,OldY*CHESS_SIZE+BOARD_EDGE,CHESS_SIZE,CHESS_SIZE,amp。ChessAll,0,0,SRCAND)。 (ChessList[16])。//遮罩 (,CHESS_SIZE,CHESS_SIZE,amp。ChessAll,0,0,MERGEPAINT)。 (ChessList[OldType])。 (,CHESS_SIZE,CHESS_SIZE,amp。ChessAll,0,0,SRCAND)。//利用Buffer提前在內(nèi)存中把想要繪制的圖形畫好,然后一次性的讓pDC貼上去。 pDCBitBlt(0,0,BOARD_WIDTH,BOARD_HEIGHT,amp。Buffer,0,0,SRCCOPY)。 ReleaseDC(pDC)。 } CView::OnMouseMove(nFlags, point)。}4 總結(jié)和進(jìn)一步的研究工作本設(shè)計相對完善的完成了局域網(wǎng)內(nèi)的對戰(zhàn)象棋的功能,界面友好,操作簡單。象棋的設(shè)計當(dāng)然還可以進(jìn)一步的完善。進(jìn)一步的工作可以從以下幾個方面展開:(1)人工智能局域網(wǎng)雙人對戰(zhàn)還是需要有伙伴才能開始游戲,一個人的時候難免會有傷感,若能既有雙人版,又有單機(jī)版,肯定就更好了。而且現(xiàn)在人工智能這么火熱,人工智能的發(fā)展將給人類社會帶來翻天覆地的變化,適應(yīng)潮流
點擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1