版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計》</p><p><b> ————五子棋</b></p><p><b> 學號: </b></p><p> 學院:信息科學與工程學院</p><p><b> 班級:網(wǎng)絡(luò)工程2班</b></p>&l
2、t;p><b> 指導(dǎo)老師:</b></p><p><b> 學生姓名:</b></p><p> 日期:2013 年 06 月 24 日</p><p> C++課程設(shè)計——五子棋</p><p><b> 功能描述</b></p><
3、p> 設(shè)計一個五子棋游戲,實現(xiàn)雙人對戰(zhàn),通過鼠標進行操作,具有悔棋功能,可以多次進行游戲,界面美觀,有音效。重要的是按鍵進行彈窗提醒,由用戶進行確認。</p><p><b> 概要設(shè)計</b></p><p> 窗口注冊:向系統(tǒng)注冊窗口。</p><p> 建立窗口:初始化并建立窗口。</p><p>
4、 處理消息:等待消息傳入,調(diào)用處理函數(shù)。</p><p> POINT_類:記錄一個點及其處理函數(shù),包括點的位置規(guī)范化函數(shù)。</p><p> Chess類:記錄棋子相關(guān)信息及其處理函數(shù),包括落子,起子函數(shù)。</p><p> GameGolbal類:記錄一個五子棋游戲的整體信息及其處理函數(shù),包括定義了POINT_類,Chess類的成員,及一些
5、游戲中會用到的整體變量。主要函數(shù)包括如下:</p><p> 窗口刷新函數(shù):通過儲存的數(shù)據(jù)重新繪制窗口。</p><p> 新游戲函數(shù):對游戲的變量進行初始化的處理。</p><p> 悔棋函數(shù):對儲存數(shù)據(jù)修改,達到悔棋的目的,會調(diào)用窗口刷新函數(shù)。</p><p> 聲音播放函數(shù):播放效果聲音。</p><
6、;p> 結(jié)果判斷函數(shù):每次落子后判斷結(jié)果。</p><p> 結(jié)果顯示函數(shù):繪制游戲勝利的結(jié)果。</p><p> 程序運行流程及函數(shù)調(diào)用關(guān)系如下:</p><p><b> 詳細設(shè)計</b></p><p> 窗口注冊:聲明窗口結(jié)構(gòu)與類別,對窗口的信息進行描述</p><p>
7、 建立窗口:通過窗口的描述,初始化窗口,顯示窗口。</p><p> 處理消息:等待消息傳入,調(diào)用處理函數(shù)處理信息。</p><p> POINT_類:儲存棋子在棋盤上的位置,其中的void STAND(int X,int Y)函數(shù)負責將輸入的點規(guī)范為棋盤格上對應(yīng)位置。</p><p> Chess類:棋子類儲存棋子信息,包括棋子顏色,陰線陽線上的棋
8、子個數(shù),同時其中包含落子函數(shù),起子函數(shù)來對相應(yīng)的數(shù)據(jù)進行操作。落子函數(shù)除了對數(shù)據(jù)進行記錄之外,還負責棋子的繪制,繪制棋子時,主要是加載棋子貼圖,由于為了使棋子落在邊緣時不會遮擋棋盤邊緣的紋理,所以對貼圖邊緣要進行透明化處理,應(yīng)用的是簡單的圖形運算,通過異或處理,使圖片與背景貼合。最后悔棋函數(shù)用棋子類建立一個二維矩陣,其橫縱坐標與棋盤上的位置對應(yīng)。</p><p> GameGolbal類
9、:記錄一個五子棋游戲的整體信息及其處理函數(shù),包括定義了POINT_類,Chess類的成員,及一些游戲中會用到的整體變量。主要函數(shù)包括如下:</p><p> 窗口刷新函數(shù):通過儲存的數(shù)據(jù)繪制窗口,屏幕刷新時調(diào)用,或者主動調(diào)用,比如開始新的一局,悔棋時。</p><p> 新游戲函數(shù):對游戲的變量進行初始化的處理,之后調(diào)用窗口刷新函數(shù)。</p><
10、;p> 悔棋函數(shù):對儲存數(shù)據(jù)修改,將棋盤矩陣的相應(yīng)縱坐標減一,同時調(diào)用棋子類二維數(shù)組中對應(yīng)的元素起子函數(shù)。之后調(diào)用窗口刷新函數(shù),棋子會在棋盤上消失。</p><p> 聲音播放函數(shù):主要是產(chǎn)生落子聲音和勝利的聲音,播放聲音函數(shù)將完成建立DirectSound對象,創(chuàng)建緩存區(qū),設(shè)置文件格式,讀取文件,播放聲音,清空緩存區(qū)等一系列操作,完成聲音的播放。</p><p>
11、結(jié)果判斷函數(shù):每次落子后調(diào)用,通過判斷相鄰的陰線,陽線上是否存在5個連續(xù)的同色棋子,判斷是否一方已勝利,若存在勝利的一方,返回的結(jié)果是勝利的一方的整形數(shù)據(jù)代號,否則返回的是無關(guān)整形數(shù)據(jù)。</p><p> 結(jié)果顯示函數(shù):繪制游戲勝利的結(jié)果,加載貼圖。</p><p> 彈窗:彈窗的目的主要是對讓用戶先前做出的行為進行確認,通過調(diào)用系統(tǒng)的int MessageBox(HWND
12、hWnd,LPCTSTR lpText,LPCTSTRlpCaption,UINT uType)函數(shù),彈出一個窗口,由用戶對輸入消息確認,通過返回值獲取用戶結(jié)果,進行相應(yīng)的操作。</p><p><b> 效果及存在問題</b></p><p><b> 效果圖如下:</b></p><p> 進入后界面
13、 落子效果</p><p> 悔棋后 結(jié)果顯示</p><p> 選項菜單 幫助菜單 彈窗提示</p><p><b> 關(guān)于窗口</b></p><p><b> 不足之處</b></p>&l
14、t;p> 不能進行存檔,學習文件流之后可以進一步改進。</p><p> 不能進行人機對戰(zhàn),這屬于策略型游戲AI,我本身對五子棋不是很擅長,確實有一定難度,這方面有時間可以參考相關(guān)資料的算法進行改進。</p><p> 彈出的窗口比較簡單,只是調(diào)用了MessageBox命令,而已,對API窗口的建立和調(diào)用以及其他資源文件的加載還是不夠了解。</p><p&g
15、t; 因為本程序不需要改變窗口大小,游戲全屏后部分地方為白色,改變之后反而有可能會影響美觀,因此可以去掉最大化窗口和改變窗口大小的功能, 但我對窗口的建立不是很熟悉,因此暫時還沒有去掉。</p><p><b> 心得體會</b></p><p> 通過對這個五子棋程序的編寫,我在一定的程度上對VC的API可視化編程有了一定的了解,對Windows下程序運行流程
16、有了簡單的認識,修正了一些以前對程序運行的錯誤觀念。在編程的過程中,我認識到編程前對程序整體結(jié)構(gòu)的分析,對各個部分的聯(lián)系的把握的重要性,否則在編程中就會產(chǎn)生混亂,耽誤時間。同時,編程一定要仔細,在關(guān)鍵的地方或者有疑惑的地方寫下備注,以備以后查看或者修改,一個小小的錯誤就要花上大量的時間去尋找,這是很不值得的。雖然這個程序?qū)︻惖膽?yīng)用不是很多,但是仍然可以看到類的應(yīng)用使程序的編寫更加的方便,增加了程序的可移植性。同時系統(tǒng)自定義的一些類的熟練
17、運用無疑會極大地提高編程速度。</p><p><b> 附錄</b></p><p> 窗口的注冊,初始化,以及消息獲取與循環(huán)函數(shù)有系統(tǒng)自動生成,在此不再顯示。</p><p><b> POINT_類:</b></p><p> class POINT_</p><p
18、><b> {</b></p><p><b> public:</b></p><p><b> int x,y;</b></p><p><b> public:</b></p><p><b> POINT_()</b
19、></p><p><b> {</b></p><p><b> x=0;</b></p><p><b> y=0;</b></p><p><b> }</b></p><p> POINT_(int x_,i
20、nt y_)</p><p><b> {</b></p><p><b> x=x_;</b></p><p><b> y=y_;</b></p><p><b> }</b></p><p> ~POINT_ ()&
21、lt;/p><p><b> {</b></p><p><b> }</b></p><p> void STAND(int X,int Y)</p><p><b> {</b></p><p> int dis=36,x_=17,y_=18;
22、</p><p> x=X+(dis+3)/2-x_;</p><p> y=Y+dis/2-y_;</p><p> x=x/(dis+3)*(dis+3)+x_;</p><p> y=y/dis*dis+y_;</p><p><b> }</b></p><p
23、><b> };</b></p><p><b> Chess類:</b></p><p> class Chess</p><p><b> {</b></p><p><b> private:</b></p><p
24、> int NS,WE,WN,EN,color;</p><p> friend class GameGlobal;</p><p><b> public:</b></p><p><b> Chess()</b></p><p><b> {</b><
25、/p><p> NS=0;WE=0;WN=0;EN=0;color=2;</p><p><b> }</b></p><p><b> ~Chess ()</b></p><p><b> {</b></p><p><b> }<
26、;/b></p><p> void down( int c ,HWND hWnd,POINT_ p)</p><p><b> {</b></p><p> HDC hdc,mdc;</p><p> HBITMAP dra;</p><p> int X=p.x,Y=p.y;&
27、lt;/p><p> NS=1;WE=1;WN=1;EN=1;color=c;</p><p> hdc = GetDC(hWnd);</p><p> mdc = CreateCompatibleDC (hdc);</p><p> if(c == 0)//黑子</p><p><b>
28、{</b></p><p> dra = (HBITMAP) LoadImage (NULL,"drabchess.bmp",IMAGE_BITMAP,72,36,LR_LOADFROMFILE) ;</p><p><b> }</b></p><p> else//白子</p>
29、;<p><b> {</b></p><p> dra = (HBITMAP) LoadImage (NULL,"drawchess.bmp",IMAGE_BITMAP,72,36,LR_LOADFROMFILE) ;</p><p><b> }</b></p><p> Se
30、lectObject (mdc,dra);</p><p> BitBlt (hdc,X-18,Y-18,36,36,mdc,36,0,SRCAND);</p><p> BitBlt (hdc,X-18,Y-18,36,36,mdc,0,0,SRCPAINT);</p><p> ReleaseDC (hWnd,hdc);</p><p&
31、gt;<b> }</b></p><p> void up ()</p><p><b> {</b></p><p> NS=0;WE=0;WN=0;EN=0;color=2;</p><p><b> }</b></p><p> in
32、t showcolor ()</p><p><b> {</b></p><p> return color;</p><p><b> }</b></p><p><b> };</b></p><p> GameGlobal類:</
33、p><p> class GameGlobal</p><p><b> {</b></p><p><b> private:</b></p><p> HWND hWnd;</p><p> HDC mdc,hdc;</p><p> i
34、nt color;//顏色</p><p> int winer;</p><p> int ax_i,ax_j;//二維矩陣參數(shù)</p><p> HBITMAP hbmp,dra;</p><p> POINT_ circle[2][16*16/2];</p><p> Chess chess[16
35、][16];//棋子類,儲存棋子周圍信息及其顏色</p><p><b> public:</b></p><p> GameGlobal(){color=0;ax_i=0;ax_j=0;winer = 2;}</p><p> GameGlobal(HWND h) {hWnd = h;}</p><p>
36、 ~GameGlobal(){}</p><p> void getHWND(HWND h)</p><p> {hWnd = h;}</p><p> int getwiner()</p><p> {return winer;}</p><p> void changewiner(int w)</
37、p><p> {winer = w;}</p><p> void back();</p><p> int downchess(int L,int H);</p><p> BOOL Result(int x,int y);</p><p> void ShowResult (int winer);</p
38、><p> void MyPaint ();</p><p> void newgame();</p><p> void PlaySound (int song);</p><p><b> };</b></p><p><b> //結(jié)果判斷函數(shù)</b></
39、p><p> int GameGlobal::Result(int x,int y)</p><p><b> {</b></p><p> int c,n=15;</p><p> c=chess[x][y].showcolor();</p><p><b> i
40、nt re;</b></p><p> for (re=1;x-re>=0;re++)////////////////////判斷橫向</p><p><b> {</b></p><p> if (chess[x-re][y].WE==0||chess[x-re][y].color!=c)</p><
41、;p><b> break;</b></p><p><b> else</b></p><p> chess[x][y].WE++;</p><p><b> }</b></p><p> for (re=1;x+re<n;re++)</p>
42、<p><b> {</b></p><p> if (chess[x+re][y].WE==0||chess[x+re][y].color!=c)</p><p><b> break;</b></p><p><b> else</b></p><p>
43、; chess[x][y].WE++;</p><p><b> }</b></p><p> for (re=1;y-re>=0;re++)////////////////////判斷縱向</p><p><b> {</b></p><p> if (chess[x][y-re]
44、.NS==0||chess[x][y-re].color!=c)</p><p><b> break;</b></p><p><b> else</b></p><p> chess[x][y].NS++;</p><p><b> }</b></p>
45、<p> for (re=1;y+re<n;re++)</p><p><b> {</b></p><p> if (chess[x][y+re].NS==0||chess[x][y+re].color!=c)</p><p><b> break;</b></p><p&g
46、t;<b> else</b></p><p> chess[x][y].NS++;</p><p><b> }</b></p><p> for (re=1;x-re>=0&&y-re>=0;re++)////////////////////判斷西北</p><p
47、><b> {</b></p><p> if (chess[x-re][y-re].WN==0||chess[x-re][y-re].color!=c)</p><p><b> break;</b></p><p><b> else</b></p><p>
48、 chess[x][y].WN++;</p><p><b> }</b></p><p> for (re=1;x+re<n&&y+re<n;re++)</p><p><b> {</b></p><p> if (chess[x+re][y+re].WN=
49、=0||chess[x+re][y+re].color!=c)</p><p><b> break;</b></p><p><b> else</b></p><p> chess[x][y].WN++;</p><p><b> }</b></p>
50、<p> for (re=1;x-re>=0&&y+re<n;re++)////////////////////判斷東北</p><p><b> {</b></p><p> if (chess[x-re][y+re].EN==0||chess[x-re][y+re].color!=c)</p><p&
51、gt;<b> break;</b></p><p><b> else</b></p><p> chess[x][y].EN++;</p><p><b> }</b></p><p> for (re=1;x+re<n,y-re>=0;re++)&l
52、t;/p><p><b> {</b></p><p> if (chess[x+re][y-re].EN==0||chess[x+re][y-re].color!=c)</p><p><b> break;</b></p><p><b> else</b></p
53、><p> chess[x][y].EN++;</p><p><b> }</b></p><p> if (chess[x][y].NS>4||chess[x][y].WE>4||chess[x][y].WN>4||chess[x][y].EN>4)</p><p><b> r
54、eturn c;</b></p><p><b> else</b></p><p><b> return 2;</b></p><p><b> }</b></p><p><b> //窗口刷新函數(shù)</b></p>
55、<p> void GameGlobal::MyPaint () </p><p><b> {</b></p><p> hdc = GetDC (hWnd);</p><p> mdc = CreateCompatibleDC (hdc);</p><p> if (winer != 2)<
56、;/p><p><b> {</b></p><p> if (winer==1)</p><p> hbmp=(HBITMAP)LoadImage(NULL,"whbmp.bmp",IMAGE_BITMAP,600,550,LR_LOADFROMFILE) ;</p><p><b>
57、 else</b></p><p> hbmp=(HBITMAP)LoadImage(NULL,"bhbmp.bmp",IMAGE_BITMAP,600,550,LR_LOADFROMFILE) ;</p><p> SelectObject (mdc,hbmp);</p><p> BitBlt (hdc,0,0,600,55
58、0,mdc,0,0,SRCCOPY);</p><p> ReleaseDC (hWnd,hdc);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><
59、b> int i;</b></p><p> hbmp=(HBITMAP)LoadImage(NULL,"hbmp.bmp",IMAGE_BITMAP,585,543,LR_LOADFROMFILE) ;</p><p> SelectObject (mdc,hbmp);</p><p> BitBlt (hdc,0,0
60、,600,600,mdc,0,0,SRCCOPY);</p><p> dra=(HBITMAP)LoadImage(NULL,"drawchess.bmp",IMAGE_BITMAP,72,36,LR_LOADFROMFILE) ;</p><p> SelectObject (mdc,dra);</p><p> for (i=0;i&
61、lt;ax_i;i++)</p><p><b> {</b></p><p> BitBlt (hdc,circle[1][i].x-18,circle[1][i].y-18,36,36,mdc,36,0,SRCAND);</p><p> BitBlt (hdc,circle[1][i].x-18,circle[1][i].y-18,
62、36,36,mdc,0,0,SRCPAINT);</p><p><b> }</b></p><p> dra=(HBITMAP)LoadImage(NULL,"drabchess.bmp",IMAGE_BITMAP,72,36,LR_LOADFROMFILE) ;</p><p> SelectObject (md
63、c,dra);</p><p> for (i=0;i<ax_j;i++)</p><p><b> {</b></p><p> BitBlt (hdc,circle[0][i].x-18,circle[0][i].y-18,36,36,mdc,36,0,SRCAND);</p><p> BitBlt
64、(hdc,circle[0][i].x-18,circle[0][i].y-18,36,36,mdc,0,0,SRCPAINT);</p><p><b> }</b></p><p> ReleaseDC (hWnd,hdc);</p><p><b> }</b></p><p><
65、b> }</b></p><p><b> //結(jié)果顯示函數(shù)</b></p><p> void GameGlobal::ShowResult (int winer)</p><p><b> {</b></p><p> hdc = GetDC(hWnd);</p
66、><p> mdc = CreateCompatibleDC (hdc);</p><p> if (winer==1)</p><p> hbmp=(HBITMAP)LoadImage(NULL,"whbmp.bmp",IMAGE_BITMAP,600,550,LR_LOADFROMFILE) ;</p><p>&l
67、t;b> else</b></p><p> hbmp=(HBITMAP)LoadImage(NULL,"bhbmp.bmp",IMAGE_BITMAP,600,550,LR_LOADFROMFILE) ;</p><p> SelectObject (mdc,hbmp);</p><p> BitBlt (hdc,0,
68、0,600,550,mdc,0,0,SRCCOPY);</p><p> ReleaseDC (hWnd,hdc);</p><p><b> }</b></p><p><b> //重新開始函數(shù)</b></p><p> void GameGlobal::newgame ()</p
69、><p><b> {</b></p><p> for (int i=0;i<16;i++)</p><p> for (int j=0;j<16;j++)</p><p> chess[i][j].up();</p><p> color = 0;</p>&l
70、t;p> winer = 2;</p><p><b> ax_i=0;</b></p><p><b> ax_j=0;</b></p><p><b> }</b></p><p> int GameGlobal::downchess(int L,int H
71、)</p><p><b> {</b></p><p> int ax_,x,y,dis=36,pd;</p><p> POINT_ O(17,18);</p><p> if (color == 1)</p><p><b> {</b></p>
72、<p> ax_ = ax_i;</p><p><b> ax_i++;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>&l
73、t;p> ax_ = ax_j;</p><p><b> ax_j++;</b></p><p><b> }</b></p><p> circle[color][ax_].STAND(L,H);</p><p> x = (circle[color][ax_].x-O.x)
74、/(dis+3);//對應(yīng)的棋子類二維數(shù)組的中成員</p><p> y = (circle[color][ax_].y-O.y)/dis;</p><p> if (chess[x][y].showcolor()==2) //避免重復(fù)落子</p><p><b> {</b></p><p> che
75、ss[x][y].down (color,hWnd,circle[color][ax_]);</p><p> PlaySound (1);</p><p> color=color==1?0:1;</p><p><b> }</b></p><p> pd=Game.Result (x,y);</p&g
76、t;<p> return pd;</p><p><b> }</b></p><p><b> //悔棋函數(shù)</b></p><p> void GameGlobal::back()</p><p><b> {</b></p><
77、;p> POINT_ O(17,18);</p><p> int dis = 36,x,y;</p><p> if (color == 0)</p><p><b> {</b></p><p> if (ax_i > 0)</p><p><b> {<
78、;/b></p><p> color = 1;</p><p> ax_i = ax_i - 1;</p><p> x = (circle [color][ax_i].x-O.x)/(dis+3);//對應(yīng)的棋子類二維數(shù)組的中成員</p><p> y = (circle [color][ax_i].y-O.y)/dis;
79、</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if (ax_j > 0)</p
80、><p><b> {</b></p><p> color = 0;</p><p> ax_j = ax_j - 1;</p><p> x = (circle [color][ax_j].x-O.x)/(dis+3);//對應(yīng)的棋子類二維數(shù)組的中成員</p><p> y = (ci
81、rcle [color][ax_j].y-O.y)/dis;</p><p><b> }</b></p><p><b> }</b></p><p> chess[x][y].up();</p><p> Game.MyPaint ();</p><p><
82、b> }</b></p><p><b> //播放聲音</b></p><p> void GameGlobal::PlaySound (int song)</p><p><b> {</b></p><p> LPDIRECTSOUND pDS;
83、</p><p> HRESULT result;</p><p> LPDIRECTSOUNDBUFFER pPBuf; </p><p> DSBUFFERDESC dsdesc; </p><p> WAVEFORMATEX pwfmt; </p><p> WAVEF
84、ORMATEX swfmt; </p><p> MMCKINFO ckRiff; </p><p> MMCKINFO ckInfo; </p><p> MMRESULT mmresult;</p><p> HMMIO hmmio;</p><p> D
85、WORD size; </p><p> LPDIRECTSOUNDBUFFER pSBuf; </p><p> LPVOID pAudio;</p><p> DWORD bytesAudio;</p><p> result = DirectSoundCreate( NULL, &pDS
86、, NULL ); //建立 DirectSound </p><p> if(result != DS_OK)</p><p> MessageBox(NULL,"","建立 DirectSound 對象失敗!",MB_OK);</p><p> result = pDS->SetCooperativeLevel
87、( hWnd, DSSCL_PRIORITY );</p><p> if(result != DS_OK)</p><p> MessageBox(NULL,"","設(shè)定協(xié)調(diào)層級失敗!",MB_OK);</p><p> memset( &dsdesc,0, sizeof(dsdesc) );
88、</p><p> dsdesc.dwSize = sizeof(dsdesc); </p><p> dsdesc.dwFlags = DSBCAPS_PRIMARYBUFFER;</p><p> dsdesc.dwBufferBytes = 0;</p><p> dsdesc.lpwfxF
89、ormat = NULL;</p><p> result = pDS->CreateSoundBuffer( &dsdesc, &pPBuf, NULL );</p><p> if(result != DS_OK)</p><p> MessageBox(NULL,"","建立主緩存區(qū)失敗!"
90、;,MB_OK);</p><p> memset( &pwfmt,0, sizeof(pwfmt) );</p><p> pwfmt.wFormatTag = WAVE_FORMAT_PCM;</p><p> pwfmt.nChannels = 2; </p><p> p
91、wfmt.nSamplesPerSec = 44100; </p><p> pwfmt.wBitsPerSample = 16; //位元</p><p> pwfmt.nBlockAlign = pwfmt.wBitsPerSample / 8 * pwfmt.nChannels;</p><p> p
92、wfmt.nAvgBytesPerSec = pwfmt.nSamplesPerSec * pwfmt.nBlockAlign;</p><p> result = pPBuf->SetFormat(&pwfmt); //設(shè)定播放格式</p><p> if(result != DS_OK)</p><p> MessageBox(N
93、ULL,"","設(shè)定播放格式失敗!",MB_OK);</p><p> if (song == 1)</p><p> hmmio = mmioOpen("1.wav", NULL, MMIO_ALLOCBUF|MMIO_READ );//文件名稱</p><p><b> el
94、se</b></p><p> hmmio = mmioOpen("2.wav", NULL, MMIO_ALLOCBUF|MMIO_READ );</p><p><b> //開啟文件</b></p><p> if(hmmio == NULL) /
95、/判斷是否為空</p><p> MessageBox(NULL,"","檔案不存在!",MB_OK);</p><p> ckRiff.fccType = mmioFOURCC('W', 'A', 'V', 'E');</p><p><b>
96、//設(shè)定檔案類型</b></p><p> mmresult = mmioDescend(hmmio,&ckRiff,NULL,MMIO_FINDRIFF);</p><p><b> //</b></p><p> if(mmresult != MMSYSERR_NOERROR)</p><p&g
97、t; MessageBox(NULL,"","檔案格式錯誤!",MB_OK);</p><p> ckInfo.ckid = mmioFOURCC('f','m','t',' '); </p><p> mmresult = mmioDescend(hmmio,&ckIn
98、fo,&ckRiff,MMIO_FINDCHUNK);</p><p><b> //</b></p><p> if(mmresult != MMSYSERR_NOERROR)</p><p> MessageBox(NULL,"","檔案格式錯誤!",MB_OK);</p>
99、<p> if(mmioRead(hmmio,(HPSTR)&swfmt,sizeof(swfmt)) == -1) //讀取檔案格式</p><p> MessageBox(NULL,"","讀取格式失敗!",MB_OK);</p><p> mmresult = mmioAscend(hmmio,&ckInfo,
100、0); </p><p> ckInfo.ckid = mmioFOURCC('d','a','t','a'); </p><p> mmresult = mmioDescend(hmmio,&ckInfo,&ckRiff,MMIO_FINDCHUNK);</p><p>
101、<b> //</b></p><p> if(mmresult != MMSYSERR_NOERROR)</p><p> MessageBox(NULL,"","檔案格式錯誤!",MB_OK);</p><p> size = ckInfo.cksize;
102、 //取得資料大小</p><p> memset( &dsdesc,0,sizeof(dsdesc)); //清空結(jié)構(gòu)內(nèi)容</p><p> dsdesc.dwSize = sizeof(dsdesc); //配置結(jié)構(gòu)大小</p><p> dsdesc.dwFlags = DSBCAPS_STATIC |
103、DSBCAPS_CTRLPAN |</p><p> DSBCAPS_CTRLVOLUME| DSBCAPS_GLOBALFOCUS;</p><p> dsdesc.dwBufferBytes = size; //設(shè)定檔案大小</p><p> dsdesc.lpwfxFormat = &swfmt; //
104、設(shè)定緩存區(qū)格式</p><p> result = pDS->CreateSoundBuffer( &dsdesc, &pSBuf, NULL );</p><p> if(result != DS_OK)</p><p> MessageBox(NULL,"","建立此緩存區(qū)失敗!",MB_OK)
105、;</p><p> result =pSBuf->Lock (0,size,&pAudio,&bytesAudio,NULL,NULL,NULL);</p><p><b> //</b></p><p> if(result != DS_OK)</p><p> MessageBox(N
106、ULL,"","鎖定緩存區(qū)失敗!",MB_OK);</p><p> mmresult = mmioRead(hmmio,(HPSTR)pAudio,bytesAudio);</p><p><b> //</b></p><p> if(mmresult == -1)</p><
107、;p> MessageBox(NULL,"","讀取音頻失敗!",MB_OK);</p><p> result =pSBuf->Unlock(pAudio,bytesAudio,NULL,NULL);</p><p><b> //解除緩存區(qū)</b></p><p> if(resu
108、lt != DS_OK)</p><p> MessageBox(NULL,"","解除鎖定緩存區(qū)失敗失敗!",MB_OK);</p><p> mmioClose(hmmio,0);</p><p> pSBuf->Play(0,0,0);</p><p><b> }<
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五子棋c++課程設(shè)計
- c++課程設(shè)計——五子棋
- c++五子棋課程設(shè)計報告
- c++課程設(shè)計--五子棋游戲
- c語言五子棋課程設(shè)計
- 五子棋課程設(shè)計
- 《c++語言程序設(shè)計》課程設(shè)計報告--五子棋
- java五子棋課程設(shè)計
- 五子棋-課程設(shè)計報告
- c語言課程設(shè)計--五子棋游戲設(shè)計
- java課程設(shè)計--五子棋
- 五子棋java課程設(shè)計
- 五子棋java課程設(shè)計
- c語言圖形五子棋課程設(shè)計報告
- c語言課程設(shè)計---五子棋(雙人對戰(zhàn))
- c語言圖形五子棋課程設(shè)計報告
- java課程設(shè)計--五子棋游戲
- java課程設(shè)計--對戰(zhàn)五子棋
- 五子棋小游戲課程設(shè)計
- c語言課程設(shè)計報告五子棋游戲課程設(shè)計
評論
0/150
提交評論