C語言課程設(shè)計(掃雷游戲)報告_第1頁
C語言課程設(shè)計(掃雷游戲)報告_第2頁
C語言課程設(shè)計(掃雷游戲)報告_第3頁
C語言課程設(shè)計(掃雷游戲)報告_第4頁
C語言課程設(shè)計(掃雷游戲)報告_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、程序設(shè)計基礎(chǔ)課程設(shè)計掃雷游戲 院 系: 計算機科學技術(shù)學院軟件工程系 班 級: 姓 名: 學 號: 合 作 者: 指導(dǎo)教師: 2009 年 6 月 28日程序設(shè)計基礎(chǔ)課程設(shè)計任務(wù)書一、題目:掃雷游戲二、設(shè)計要求(1) (組長)、 和 組成課程設(shè)計小組。(2)小組成員分工協(xié)作完成。要求每個成員有自己相對獨立的模塊,同時要了解其他組員完成的內(nèi)容。(3)查閱相關(guān)資料,自學具體課題中涉及到的新知識。(4)采用結(jié)構(gòu)化、模塊化程序設(shè)計方法設(shè)計,功能要完善,界面美觀。(5)所設(shè)計的系統(tǒng)應(yīng)有菜單、動畫和音樂。(6)按要求寫出課程設(shè)計報告,并于設(shè)計結(jié)束后1周內(nèi)提交。其主要內(nèi)容包括:封皮、課程設(shè)計任務(wù)書,指導(dǎo)教師

2、評語與成績、目錄、概述、軟件需求分析、總體設(shè)計、詳細設(shè)計、程序的調(diào)試與測試、總結(jié)與體會、結(jié)束語、程序清單(帶中文注釋)、參考文獻等。課程設(shè)計報告的撰寫請參照程序設(shè)計基礎(chǔ)課程設(shè)計指導(dǎo)書中的2.5節(jié)。三、課程設(shè)計工作量由于是設(shè)計小組團結(jié)協(xié)作完成設(shè)計任務(wù),一般每人的程序量在200行有效程序行左右,不得抄襲。四、課程設(shè)計工作計劃2009年6月15日前,指導(dǎo)教師講課,學生根據(jù)題目準備資料,需求分析;2009年6月15日,設(shè)計小組進行總體方案設(shè)計和任務(wù)分工;2009年6月17日2009年6月23日,每人完成自己承擔的程序模塊并通過獨立編譯;2009年6月24日2009年6月25日,將各模塊集成為一個完整的

3、系統(tǒng),并錄入足夠的數(shù)據(jù)進行調(diào)試運行;2009年6月26日6月30日,驗收、開始撰寫課程設(shè)計報告;2009年7月3日前,提交課程設(shè)計報告和軟件。 指導(dǎo)教師簽章: 教研室主任簽章 程序設(shè)計基礎(chǔ)課程設(shè)計指導(dǎo)教師評語與成績指導(dǎo)教師評語:課程設(shè)計表現(xiàn)成績: 課程設(shè)計驗收成績: 課程設(shè)計報告成績: 課程設(shè)計 總成績: 指導(dǎo)教師簽章 2009年 1月 日目 錄一 概 述.51.1軟件系統(tǒng)概述.51.1.1開發(fā)的軟件系統(tǒng)的題目:掃雷游戲.51.2課程設(shè)計目的 .51.3 課程設(shè)計具體要求.5二軟件需求分析6三總體方案設(shè)計6四詳細設(shè)計.7五程序的調(diào)試與運行結(jié)果說明14六課程設(shè)計總結(jié).17七結(jié)束語 17困難及解決

4、途徑:.17心得體會.17八 程序清單.18全部代碼及注釋.18九 參考文獻.47一 概述1.1軟件系統(tǒng)概述1.1.1開發(fā)的軟件系統(tǒng)的題目:掃雷游戲.1.1.2運行環(huán)境:win-tc.1.1.3功能:我們的游戲可以玩掃雷.1.1.4特點:此游戲具有登陸系統(tǒng),可輸入密碼確保安全性,界面美觀具有標題欄,菜單,難度選擇,排行榜,游戲成功和失敗都有不同的音樂和動畫。1.1.5規(guī)模:我們的程序共計1176行,我負責360行,我負責的模塊是一個音樂、開機動畫的一部分和五個函數(shù).1. 2課程設(shè)計的目的a. 通過本項課程設(shè)計,可以培養(yǎng)獨立思考、 綜合運用所學有關(guān)相應(yīng)知識的能力,能更好的鞏固c語言程序設(shè)計課程學

5、習的內(nèi)容,掌握 工程軟件設(shè)計的基本方法,強化上機動手編程能力,闖過理論與實踐相結(jié)合的難關(guān)!更加了解了c語言的好處和其可用性!同時增加了同學之間的團隊合作精神!更加也體會到以后在工作中團隊合作的重要性和必要性!b. 通過c語言課程設(shè)計,使學生了解高級程序設(shè)計語言的結(jié)構(gòu),掌握基本的程序設(shè)計過程和技巧,掌握基本的分析問題和利用計算機求解問題的能力,具備初步的高級語言程序設(shè)計能力。為后續(xù)各門計算機課程的學習和畢業(yè)設(shè)計打下堅實基礎(chǔ)。1.3 課程設(shè)計的具體要求游戲和功能上盡量模擬windows操作系統(tǒng)中的掃雷游戲,系統(tǒng)界面盡量美觀,求有聲音提示,難度選擇和排行榜。我們是在windows-xp下進行的。根據(jù)

6、此設(shè)計題目要求我們意識到在此程序中應(yīng)會有一些關(guān)于畫圖的程序,聲音程序,鼠標的設(shè)置程序.對于排行榜還應(yīng)有一些數(shù)組、文件方面的知識.所以我們需要查一下這些方面的知識。我們的老師除了要我們做這個游戲程序以外還要求我們每個人都有自己的音樂和動畫。.二 軟件需求分析對于我們的軟件系統(tǒng)-掃雷游戲,我們應(yīng)該把界面弄得盡量美觀,因為只有美觀玩的人才能有興趣往下玩,所以在畫界面時應(yīng)該往美觀與整潔方面努力.同時我們還應(yīng)該把排行榜弄好,因為具有排行榜才能使玩家更有興趣去玩.我們還應(yīng)該設(shè)一些難度選擇,以供提高玩者欲望.對于那個鼠標的控制應(yīng)該設(shè)置的靈活,只有這樣別人才會選你的軟件。另外,在游戲成功與失敗時分別有不同的音

7、樂與動畫,使玩者心情舒暢,想繼續(xù)挑戰(zhàn)下一難度級別的掃雷。三 總體方案設(shè)計掃雷游戲是供人玩的游戲,所以界面盡量美觀,有難度選擇和排行榜。特點: 功能的模塊化設(shè)計,方便對其系統(tǒng)的完善,提高了程序的可讀性。整體框圖如下: 登陸(輸入密碼,姓名)游戲界面功能選擇菜單難度選擇排行榜開始退出易中難注:游戲成功時 音樂二動畫三 游戲失敗時 音樂三動畫三音樂一動畫二音樂一動畫一姓名分數(shù)四 詳細設(shè)計*這是我設(shè)計的動畫部分和音樂,動畫(另一部分在 那里)是我和 共同完成,音樂為真心英雄,三朵小花代表我和兩個組員,主要表現(xiàn)了不經(jīng)歷風雨,如何見彩虹的理念。接下來是進入登陸界面,首先輸入密碼,密碼為abc(可以改成任意

8、9個字符),有三次輸入機會,輸入正確時繼續(xù)輸入姓名,輸入錯誤密碼時退出該系統(tǒng),未完 待續(xù)我的程序部分代碼:void interrupt(*handler)();void interrupt music(); int fr=262,262,262,262,294,330,440,392,330,392,392,392, 523,523,523,523,523,523,330,330,392,523,523,523,523,523, 392,392,392,330,330,294,262,294,294,294,294,294,294,294,330,294,262,294, 262,262,26

9、2,262,294,330,440,392,330,392,392,523,523,523,523,523, 523,330,440,392,392,523,523,523,523,523,440,392,392,440,330, 330,294,262,262,294,294,294,330,330,392,294,330,262,262; int tim=4,4,4,4,4,4,4,4,4,8,2,2,2,2,2,2,4,4,4,4,12,4,4,4,4,8, 4,4,4,4,2,6,2,2,2,2,2,2,4,2,2,4,12,4,4,4,4,4,4,4,4,4,8,4,2,2,2,2,

10、2,2,4, 4,4,4,12,4,4,2,2,8,4,4,4,2,2,2,2,4,2,2,4,4,2,2,4,4,2,2,12,12;/*此音樂為 真心英雄*/void interrupt music() /* 音樂中斷函數(shù)*/ static int flag=0,note=0,fre,dur; if(flag=(int)(dur*2) flag=0; nosound(); fre=frnote; dur=timnote; sound(fre); note+; if(note=88)note=0; handler(); flag+;void donghua() int gdriver=det

11、ect,gmode,i=0,j,k,k1,x,s,en,r,x1,y1; initgraph(&gdriver,&gmode,c:win-tcprojects); handler=getvect(0x1c); /* 調(diào)用中斷函數(shù),來實現(xiàn)音樂與動畫同步*/ setvect(0x1c,music); setcolor(red); setfillstyle(solid_fill,4); /*繪畫太陽與云朵*/ circle(90,90,40); floodfill(89,89,4); setcolor(15); setfillstyle(solid_fill,15); fillellipse(210

12、,90,28,48); fillellipse(190,90,80,24); floodfill(200,95,15); for(j=160;j=480;j+=160) /*繪畫小花的莖和葉子*/ setcolor(green); line(j-1,380,j-1,480); line(j,380,j,480); line(j+1,380,j+1,480); setfillstyle(solid_fill,green); fillellipse(j-30,450,30,15); setcolor(brown); line(j-60,450,j,450); for(k=0;k=3;k+) /*此

13、部分為繪畫小花,通過循環(huán)控制顏色變化,來實現(xiàn)動畫*/ for(i=0;i=10;i+) for(j=160;j=480;j+=160) setcolor(i%16); setfillstyle(solid_fill,(i+7)%16); circle(j,378,17); floodfill(j,378,i%16); setfillstyle(solid_fill,(i+1)%16); circle(j,339,21); floodfill(j,339,i%16); setfillstyle(solid_fill,(i+2)%16); circle(j-34,365,21); floodfil

14、l(j-34,365,i%16); setfillstyle(solid_fill,(i+5)%16); circle(j+34,365,21); floodfill(j+34,365,i%16); setfillstyle(solid_fill,(i+3)%16); circle(j-24,406,21); floodfill(j-24,406,i%16); setfillstyle(solid_fill,(i+4)%16); circle(j+24,406,21); floodfill(j+24,406,i%16); settextstyle(0,0,4);/*為圖形輸出設(shè)置當前的文本屬性

15、橫向和豎向,0為橫向排列,1為豎向排列。 size 為字體大小:可用interger做參數(shù)*/ setcolor(7); outtextxy(120,180,welcome to play); /*在指定位置顯示一字符串*/ setcolor(14); outtextxy(118,178,welcome to play);/*輸出welcome to play our game!*/ setcolor(7); outtextxy(140,240,our game!); /*在指定位置顯示一字符串*/ setcolor(14); outtextxy(138,238,our game!); del

16、ay(800000); setvect(0x1c,handler); nosound(); /*停止音樂*/ closegraph(); /*關(guān)閉圖形模式,以便進入文本模式輸入文本*/void deng_lu() /*此函數(shù)為登陸界面函數(shù),在開始動畫音樂結(jié)束時出現(xiàn),輸入密碼為abc,有三次輸入機會,輸入正確時繼續(xù)輸入姓名,輸入錯誤密碼時退出該系統(tǒng)*/ char q10,qq10=abc; int i,ii=1,j,k; textcolor(yellow); for(j=0;jdifftime(second,first) /*打破記錄情況*/ peonn.time=difftime(second

17、,first); gotoxy(40,22); printf(you break the corse!); for(i=0;pi!=0;i+) i=pi; i=0; if(nn=0) /* nn=0表示為 易,nn=1表示為 中,nn=2表示為 難*/ fp=fopen(filea,wb); else if(nn=1) fp=fopen(fileb,wb); else if(nn=2) fp=fopen(filec,wb); fwrite(&peonn,sizeof(struct people),1,fp); /*讀入文件,存入磁盤*/ fclose(f

18、p); else /*沒打破紀錄情況*/ gotoxy(40,23); printf(you dont break the corse); void fopenfp() /*點擊排行榜時打開文件,輸出姓名與分數(shù),此函數(shù)在full_window函數(shù)中調(diào)用*/ fp=fopen(filea,rb); /*打開文件進行讀寫*/ fread(&peo0,sizeof(struct people),1,fp); gotoxy(15,4); /*將光標移到該位置*/ printf(%-20s,); /*從文件中調(diào)用結(jié)構(gòu)體*/ printf(%.0f,peo0.time); close(f

19、p); /*關(guān)閉文件*/ fp=fopen(fileb,rb); fread(&peo1,sizeof(struct people),1,fp); gotoxy(15,5); printf(%-20s,); printf(%.0f,peo1.time); close(fp); fp=fopen(filec,rb); fread(&peo2,sizeof(struct people),1,fp); gotoxy(15,6); printf(%-20s,); printf(%.0f,peo2.time); close(fp);void ha_mouse() /*

20、此函數(shù)為鼠標函數(shù),通過獲取鼠標位置來判斷點擊功能選擇的哪一部分,然后執(zhí)行各個功能*/ int i,j,k,x=-1,y=-1,flag=0,color; int tx1,ty1,tx2,ty2,tbx; int new_x=ha_x,new_y=ha_y; union regs inregs,outregs,regs2;/*執(zhí)行intr_num號中斷,用戶定義的寄存器值存于結(jié)構(gòu)inregs中, 執(zhí)行完后將返回的寄存器值存于結(jié)構(gòu)outregs中*/ inregs.x.ax=0x03;/*獲取鼠標位置和狀態(tài)也可以用3*/ while(!bioskey(1) /*直接使用bios服務(wù)的鍵盤接口*/

21、int86(0x33,&inregs,&outregs);/*調(diào)用鼠標中斷,通用8086軟中斷接口 */ regs2.x.ax=0x06; regs2.x.bx=0x00; int86(0x33,®s2,®s2);/*cx水平位置(最后釋放時),dx垂直位置(最后釋放時)*/ tx2=regs2.x.cx;/*cx寄存器中存的是橫坐標*/ ty2=regs2.x.dx;/*dx寄存器中存的是列坐標*/ if(x!=outregs.x.cx | y!=outregs.x.dx | tbx!=outregs.x.bx) if(flag) for(j=0;j10;j+)/*恢復(fù)上次鼠標一

22、定范圍內(nèi)的像素顏色*/ for(i=0;i=639-19 & outregs.x.cx=1 & outregs.x.dx=1 & outregs.x.cx=21 & outregs.x.dx=33 & outregs.x.cx=21 & outregs.x.dx=65 & outregs.x.cx=21 & outregs.x.dx=(ha_x+ha_x+2+mx*10)/2-16 &outregs.x.cx=(ha_y+ha_y-30)/2-9 & outregs.x.dx=new_x & outregs.x.cx+new_y-30 & outregs.x.dx=new_y) / *拖動掃雷

23、圖標掃雷*/ if(tg=0) 掃雷部分存儲 tg+; for(j=0;j=1+my*10+1+30;j+) for(i=0;i=new_x & x=new_y-30 & y=new_x & x=new_y-30 & y=new_y) tg=0; ha_x=new_x; ha_y=new_y; for(j=0;j=1+my*10+1+30;j+) for(i=0;i=2 & outregs.x.cx=40 & outregs.x.dx=34 & outregs.x.cx=40 & outregs.x.dx=65 & outregs.x.cx=40 & outregs.x.dx=0 & ty2-

24、ha_y-2=0 & (tx2-ha_x-2)/10=0 & (tx2-ha_x-2)/10=0 & (ty2-ha_y-2)/101 & 0x01 & dead=0)/*鼠標右鍵按下-鼠標點擊判斷*/ if(outregs.x.cx-ha_x-2)/10=0 & (outregs.x.cx-ha_x-2)/10=0 & (outregs.x.dx-ha_y-2)/10=my-1) box_mark(outregs.x.cx-ha_x-2)/10,(outregs.x.dx-ha_y-2)/10);/*插旗標記*/ /*=*/ for(j=0;j10;j+)/*儲存鼠標一定范圍內(nèi)的像素顏色*/

25、 for(i=0;i6;i+) reji=getpixel(outregs.x.cx+i,outregs.x.dx+j); for(i=0;i8;i+)/*確定鼠標各頂點位置*/ m_now_polyi=m_polyi+outregs.x.cx; i+; m_now_polyi=m_polyi+outregs.x.dx; setcolor(green); drawpoly(4,m_now_poly);/*顯示鼠標框架,畫多邊形*/ setfillstyle(solid_fill,white);/*填充鼠標,注意以白色填充,當遇到白色背景時會不能完全填充*/ floodfill(m_now_po

26、ly0+1,m_now_poly1+5,green); /*綠色*/ setcolor(lightred); drawpoly(4,m_now_poly);/*顯示鼠標框架*/ x=outregs.x.cx;/*存鼠標坐標,供恢復(fù)使用*/ y=outregs.x.dx; tbx=outregs.x.bx; tx1=tx2;/*暫存鼠標釋放的位置*/ ty1=ty2; 五 程序的調(diào)試與運行結(jié)果說明 我們運行時的動畫畫面 密碼界面 進入游戲界面 游戲失敗 菜單界面這是我在做動畫時遇到的問題我只知道讓driver=detect卻忘記了定義了,最后我加了個int driver之后,運行成功了.這是我在

27、改goto語句時遇到的錯誤,我上網(wǎng)查詢了很多網(wǎng)站,雖然查到的是正確的,但因為我們的程序比較復(fù)雜,goto語句比較多,分布程序各處,改對一部分后,有程序斷層,與后面連接不上,造成在游戲界面上無法進行鼠標操作,等于沒有改正確。由于程序復(fù)雜,時間緊,老師特許我們不用改了。但是goto語句使非結(jié)構(gòu)化設(shè)計,在以后設(shè)計中應(yīng)該盡量不使用。盡量做到結(jié)構(gòu)化設(shè)計。六 課程設(shè)計總結(jié)課題的設(shè)計工作完成后,我們基本上符合了實驗要求。我們具有登陸界面,可以用密碼來保證安全性,還有標題欄,選擇菜單,菜單中有開始與退出,難度選擇和排行榜。游戲失敗后會有失敗的音樂動畫,成功后會有勝利的音樂與動畫,打破紀錄時可以把分數(shù)與姓名存入

28、磁盤。但缺點是登陸界面沒有對話框,不能在圖形模式下輸入姓名。七 結(jié)束語困難及解決途徑:1 老師要求我們每個人都有自己的音樂和動畫,我們首先從音樂入手,選好音樂后,按照指導(dǎo)書上給的聲音頻率與音符的對照關(guān)系,我們把簡短的音樂編入程序后,聲音十分難聽,經(jīng)過多次請教和幾番改動節(jié)拍和延遲時間,最后總算有了比較優(yōu)美的音樂。然后使用中斷法插入動畫中。在制作動畫時,一些坐標位置掌握不好,總是達不到想要的效果,但是通過試了很多個點,換了很多次顏色才出現(xiàn)了現(xiàn)在的效果。2 為了滿足課程設(shè)計的要求,我們需要在程序中加入排行榜,這就需要加入“排”、“行”、“榜”,三個字的字模,還有其他名字需要改動,但是我們不知道字模是

29、怎樣加上去的,通過請教做過課程設(shè)計的前輩們,才知道原來win-tc里超級工具集自身就帶點陣字模工具。3 加排行榜需要記錄時間,通過查找實驗指導(dǎo)書,也試了幾個函數(shù),最終決定用difftime函數(shù),但是由于程序沒讀懂,取的開始時間位置加錯了,致使每次記錄時間都是0.00,然后停下手頭的工作,反復(fù)讀程序,最后加對了地方,同時也更加理解了關(guān)于時間的函數(shù)。4 最后就是排行榜的記錄了,我原本打算定義一個結(jié)構(gòu)體變量,把成績存里就可以了,但在做的過程中,曹老師要求我們可以把成績存到磁盤里,下次玩的時候還顯示,這就需要文件的打開,讀寫,存盤等知識了,我們又有了更大的挑戰(zhàn)了,通過看課本把13章的知識又復(fù)習了一遍,

30、試著寫打開一個文件并把記錄存盤,寫完后文件打不開,去問老師,他說我的邏輯嚴重有問題,我知道自己在這塊知識上理解的還不透徹,于是回去又看,然后又和李秀鵬同學探討,最后可以打開文件并存盤了。但是新的問題又出現(xiàn)了,當玩完游戲并打破記錄時要求輸入姓名,但是當時是在圖形模式下,無論我用scanf,gets,getch,cscanf還是,fscanf都不能輸入文本,我們的其他不分都已經(jīng)完成,之差這塊,別的組已經(jīng)驗收完了,我們急的焦頭爛額,最后老師給了我們一個建議,可以在進入動畫之前,在文本模式下輸入姓名,當贏了時,再把名字用數(shù)組調(diào)過來,這樣就避免了在圖形模式下輸入文本了。于是我就設(shè)計了登陸界面,順便加了一

31、個登陸密碼。心得體會: 首先,通過這次課程設(shè)計使我感覺到知道的知識太少了,光看實驗指導(dǎo)書就覺得知識匱乏。課本上學的只是基礎(chǔ),要想成為一個編程人員,就得需要自己不斷的積累積累再積累,把可以利用的資源都用上,如圖書館,上網(wǎng)查資料,向老師請教。盡量多學,不白過大學的每一天。其次,要想編一個程序,必須靠大家齊心努力。大體的模塊設(shè)計出來后要進行分工,要做到分工明確,人人有事做,人人有責任感。接著小組成員要團結(jié)在一起全力把設(shè)計完成。大家一定要共同研究:有想法就說出來,一起實現(xiàn),有困難解決不了,一起克服??傊覀兪且粋€整體!最后,我想說,年輕永不言敗!我們在做課程設(shè)計期間遇到很多困難,但我們沒有放棄,而是

32、想辦法解決它,克服它。因為我們知道沒有解決不了的問題,雖然我們的知識有限,但是我們可以去請教、去學,只要我們肯學肯付出汗水,就沒有解決不了的困難。在今后的學習和工作中我們一定會遇到這樣或那樣的困難,我們一定要堅持理想,不輕言放棄!在此,我要特別感謝我們的曹老師,他給了我們很多起著關(guān)鍵作用的建議和指導(dǎo)。沒有他的教導(dǎo)與指導(dǎo)就沒有我們完整的掃雷。另外還有音樂顧問祝偉杰同學,技術(shù)指導(dǎo)孫坤杰同學、李秀鵬同學,他們不僅幫我們找出錯誤,幫我們改正,給我們提意見,還給我們打氣加油。真的很感謝大家對我們的幫助和支持,我們一定再接再厲! 八 .程序清單全部代碼及注釋#include conio.h#include #include#include#include#include#inclu

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論