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

正文內(nèi)容

五子棋游戲的設計與開發(fā)—免費計算機(編輯修改稿)

2025-01-12 10:07 本頁面
 

【文章內(nèi)容簡介】 String。 基于消息命令接口函數(shù)的編程方式,也就是游戲設計中采用的方式。一條基于消息的 MCI 命令包括四部分: MCI設備標記、控制消息參數(shù)、消息標記、消息數(shù)據(jù)結構指針。這種方式有三個核心函數(shù) MciSendCommand、 MciGetDeviceID、MciGetErrorString。 就 MCI 的使用五子棋游戲中,使用基于消息命令接口函數(shù)的編程方 式, MCI編程具體實現(xiàn)如下: //音樂文件選擇對話框 CString strFileName。 CString sFilter=MP3 文件 (*.mp3)|*.mp3|Wav 文件 (*.wav)|*.wav|WMA 文件(*.wma)|*.wma||。 CFileDialog file(TRUE,OFN_FILEMUSTEXIST,(LPCTSTR)sFilter)。 if(()==IDOK)//打開對話框 { strFileName=()。//變量取得文件路徑 } = (())。//傳遞給 MCI 標準控件文件路徑 mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)(LPVOID)amp。mciOpen)。//打開文件 m_wDeviceID = 。//取得播放設備 mciSendCommand(m_wDeviceID,MCI_PLAY,0,(DWORD)(LPVOID)amp。mciPlay)。// 播放音樂 mciSendCommand(m_wDeviceID,MCI_STOP,0,NULL)。//停止播放音樂 3 五子棋游戲(網(wǎng)絡版)研究方法 五子棋游戲(網(wǎng)絡版)需求分析 ? 五子棋游戲基本功能 該功能為程序設計的最基本的功能,程序有服務器端和客戶端。當服務器端運行時會自動偵察是否有客戶端運行,并自動接入開始游戲。當用戶五子連成一線時即贏。 ? 音樂播放 現(xiàn)在游戲中已經(jīng)很難找到是無聲游戲的,多媒體就成了一個游戲 不可缺少的一部分。該功能是多媒體播放功能,在用戶游戲時候能隨意播放自己喜歡的音樂。聲音是提高游戲娛樂性中不可缺少的一環(huán)。 ? 擴展功能 在游戲中當下棋位置不對或者還沒有輪到本機下棋能提示用戶相應信息。當游戲中用戶長時間沒有下棋會提示用戶該下棋,當對方長時間沒有下棋會提示用戶是否繼續(xù)。 設想如下圖 31: 圖 31 五子棋設想圖 五子棋游戲(網(wǎng)絡版)研究思路 本畢業(yè)設計是利用 VC 這一集成開發(fā)工具,在 Windows 環(huán)境下開發(fā)一款休閑網(wǎng)絡游戲。本畢業(yè)設計通過策劃、實現(xiàn)、測試等游戲開發(fā)的一般流程。游戲設 計是按如下功能模塊的設計思路來安排的: ? 五子棋游戲設計可以分成如下幾個模塊: 服務器模塊:負責建立游戲服務器并接受客戶端的連接和處理客戶端的數(shù)據(jù)。 客戶端模塊:負責連接到服務器并處理和服務器的會話。 游戲規(guī)則模塊:負責游戲的控制和結果的判斷,使游戲按規(guī)則進行。 視圖控制模塊:負責控制整個程序的操作,負責處理用戶的輸入和游戲的界面繪制。 ? 多媒體功能設計模塊: 音頻播放模塊:負責播放 MP3, WMA等格式的音樂。 效果如圖 32: 圖 32 五子棋游戲(網(wǎng)絡版)效果圖 4 五子棋游戲(網(wǎng)絡版)設計 五子棋游戲( 網(wǎng)絡版)流程 圖 41 五子棋游戲(網(wǎng)絡版)流程圖 五子棋游戲(網(wǎng)絡版)功能設計方案 主要類介紹 CServerSocket 類:是一個專門用來監(jiān)聽客戶端連接的 Socket 類。當游戲運行,選擇了開啟服務器之后,即調(diào)用本類來初始一個 Socket 對象。這個 Socket對象將負責監(jiān)聽網(wǎng)絡上有沒有客戶端連接到來。 CClientSocket 類:是一個專門用做會話類,它負責數(shù)據(jù)的發(fā)送和接受。當游戲運行,選擇了連接服務器之后,即調(diào)用本類來初始一個 Socket 對象。這個對象是用來連接服務器,它連接上以后,就可以通過 他進行數(shù)據(jù)的交換。 CMessg 類:是一個數(shù)據(jù)類,它發(fā)揮串行化數(shù)據(jù)的作用。它就是用來在網(wǎng)絡上傳輸?shù)男畔ⅰ? Match 類:是一個規(guī)則類,它負責游戲規(guī)則的處理。在游戲運行中,它保存著一個二維數(shù)組記錄當前棋盤的信息,它還負責判斷能否在某個位置下棋,是否有人贏棋。 CFiveChessView 類:是游戲的主視圖類。在游戲中它負責在主窗口中繪制盤和棋子。以及鼠標消息的處理。 CClientDlg 類:是游戲中客戶端設置的對話框類。在游戲中,選擇打開連接服務器時,彈出來的連接服務器對話框。 CServerDlg 類:是游戲 中服務器端設置的對話框類。在游戲中,選擇打開開啟服務器時,彈出的開啟服務器對話框。 CSoundThread 類:是游戲中負責多媒體播放的線程類,主要負責音樂播放。當然了它實現(xiàn)了播放和關閉,也就是線程的開啟和終止。 主要類的工作 示意圖 圖 42 主要類工作 示意圖 五子棋游戲實現(xiàn) 游戲連接 —— CServerSocket 類的實現(xiàn) 這是一個專門用來監(jiān)聽客戶端連接的 Socket 類,它繼承于 CSocket,響應OnAccept 消息。所需要的參數(shù)從對話框中取得,如圖 43: 圖 43 服務器端設置圖 CServerSocket 類需要聲明一個主視圖指針,為接受連接函數(shù)服務。并且在類成員函數(shù) Init(UINT port, CFiveChessView* dlg)中負責監(jiān)聽 SOCKET 和創(chuàng)建SOCKET。當用戶選擇“開啟服務器”功能時,程序就會工作在服務器端模式,并且不停的監(jiān)聽是否有客戶端的連接。當有監(jiān)聽客戶端的連接消息時, OnAccept函數(shù)響應。 BOOL CServerSocket::Init(UINT port, CFiveChessView* view) { m_uPort=port。 m_view=view。 if(Create(m_uPort)==FALSE) //創(chuàng)建 SOCKET {AfxMessageBox(Server Socket Create Error)。 return FALSE。 } if(thisListen()==FALSE) //監(jiān)聽 SOCKET { AfxMessageBox(Server Listen Error)。 return FALSE。 } return TRUE。 } void CServerSocket::OnAccept(int nErrorCode) //授受客戶端請求 { CSocket::OnAccept(nErrorCode)。 m_viewProcessPendingAccept()。//調(diào)用視圖類中連接處理函數(shù) } 游戲連接 —— CClientSocket 類的實現(xiàn) 這是一個專門用做會話類,它負責數(shù)據(jù)的發(fā)送和接受。她繼承于 CSocket,負責響應 OnReceive 和 OnClose 消息。另外,作為 CSocket 類的繼承類,當然采用了串行化方式來處理網(wǎng)絡數(shù)據(jù)。網(wǎng)絡數(shù)據(jù)由 CMessg 對象構成。連接服務器所需參數(shù)通過對話框 獲得,如圖 44: 圖 44 客戶端設置圖 CClientSocket 類中需要數(shù)據(jù)串行化網(wǎng)絡數(shù)據(jù)。類初始化成員 Init 函數(shù)負責 Socket 和串行化相關的初始化;成員函數(shù) GetIpAddress 用于獲得本地 IP;成員函數(shù) GetLocalHostName 用于獲得本地計算機名稱;當連接上服務器以后,使用 SendMessage(CMessg * msg) 發(fā)送消 息, 或者 使用 OnReceive(int nErrorCode)接收對方發(fā)送過來的數(shù)據(jù),并對數(shù)據(jù)進行處理。當關閉客戶端Socket 是使用成員函數(shù) CloseSocket 關閉。 void CClientSocket::OnReceive(int nErrorCode) { CSocket::OnReceive(nErrorCode)。 do { CMessg temp。 (*m_aSessionIn)。//輸入數(shù)據(jù)串行化 //判斷對方發(fā)送過來的數(shù)據(jù)是否是落子的位置 if(m_view(,m_viewm_who%2+1)) {//是對方落 子的信息 m_viewm_turn=。//輪到我下 m_viewInvalidate(FALSE)。//刷新視圖,顯示對方的走子位置 if(m_view(m_viewm_who%2+1,m_viewm_winpos)) { m_viewm_bWin=TRUE。//對方贏 m_viewm_bOver=TRUE。 m_viewInvalidate(FALSE)。 AfxMessageBox(SORRY,你輸了 )。 } } } while (!m_aSessionInIsBufferEmpty())。 } BOOL CClientSocket::SendMessage(CMessg * msg) { if (m_aSessionOut != NULL) { msgSerialize(*m_aSessionOut)。//輸出串行化 m_aSessionOutFlush()。//直接發(fā)送 return TRUE。 } else { //對方關閉了連 接 m_bClose=true。 CloseSocket()。 return FALSE。 } } 網(wǎng)絡信息 —— CMessg 類的實現(xiàn) 這是一個數(shù)據(jù)類,繼承于 。 CMessg類主要的成員變量: int m_turn。 int m_x。 int m_y。 其中 m_turn 表示輪到誰走棋; m_x 表示落子的水平位置; m_y 表示落子的豎直位置。這 3個數(shù)據(jù)就是網(wǎng)絡要傳的數(shù)據(jù)。 其中數(shù)據(jù)串行化實現(xiàn)如下: void CMessg::Serialize(CArchiveamp。 ar) { if (()) { ar m_turn。 ar m_x。 ar m_y。 } else { ar m_turn。 ar m_x。 ar m_y。 } } 下棋算法 —— Match 類的實現(xiàn) 這是一個規(guī)則類,它負責規(guī)則的處理。在 Match 中保存著一個當前的棋盤,用的一個 chessboard[LW][LW]。如果數(shù)組元素為 0,則表示沒有棋子;如果為 1,則表示有黑子,如果為 2,則為白子。 Match負責是否能下子,是否有人贏棋。 Match 中類 LW 定為 19,表示有 19行 19列。既然 Match 中保存著一個當前棋盤,那就需要有一個判斷的成員函數(shù),只有 chessboard 為 0 時才能落子,類中使用成員函數(shù) CanDown(int x,int y,int who)判斷能否落子。并且有一個判斷是否贏的成員函數(shù) IsWin(int who,int pos[5][2]);其中 pos[5][2]為記錄贏的關鍵棋子。最后還有一個清除棋盤也就是把所有的 chessboard 全部設置為 0的函數(shù) Clear。算法執(zhí)行出來的結果,如圖 45: 圖 45 贏棋圖 五子棋的核心算法 IsWin 主要是判斷了水平、垂直、東南、東北四個方向是否有五子相連;它們判定條件可以表示為; 水平: chessboard[i][j+1]==whoamp。amp。chessboard[i][j+2]==whoamp。amp。chessboard[i][j+3]==whoamp。amp。chessboard[i][j+4]==who 垂直 : chessboard[i+1][j]==whoamp。amp。chessboard[i+2][j]==whoamp。amp。chessboard[i+3][j]==whoamp。amp。chessboard[i+4][j]==who 東南 : chessboard[i+1][j+1]==whoamp。amp。chessboard[i+2][j+2]==whoamp。amp。chessboard[i+3][j+3]==whoamp。amp。chessboard[i+4][j+4]==who 東北 : chessboard[i1][j+1]==whoamp。amp。chessboard[i2][j+2]==whoamp。amp。chessboard[i3][j+3]==whoamp。amp。chessboard[i4][j+4]==who 作為說明,以水平方向判定 為例子; BOOL Match::IsWin(int who,int pos[5][2]) {int i,j。 for(i=0。iLW。i++) for(j=0。jLW。j++) { if(chessboard[i][j]==who) { if(j+4LW)//水平 { if(chessboa
點擊復制文檔內(nèi)容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1