




已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
程序設計基礎課程設計掃雷游戲 院 系: 計算機科學技術學院軟件工程系 班 級: 姓 名: 學 號: 合 作 者: 指導教師: 2009 年 6 月 28日程序設計基礎課程設計任務書一、題目:掃雷游戲二、設計要求(1) (組長)、 和 組成課程設計小組。(2)小組成員分工協(xié)作完成。要求每個成員有自己相對獨立的模塊,同時要了解其他組員完成的內容。(3)查閱相關資料,自學具體課題中涉及到的新知識。(4)采用結構化、模塊化程序設計方法設計,功能要完善,界面美觀。(5)所設計的系統(tǒng)應有菜單、動畫和音樂。(6)按要求寫出課程設計報告,并于設計結束后1周內提交。其主要內容包括:封皮、課程設計任務書,指導教師評語與成績、目錄、概述、軟件需求分析、總體設計、詳細設計、程序的調試與測試、總結與體會、結束語、程序清單(帶中文注釋)、參考文獻等。課程設計報告的撰寫請參照程序設計基礎課程設計指導書中的2.5節(jié)。三、課程設計工作量由于是設計小組團結協(xié)作完成設計任務,一般每人的程序量在200行有效程序行左右,不得抄襲。四、課程設計工作計劃2009年6月15日前,指導教師講課,學生根據(jù)題目準備資料,需求分析;2009年6月15日,設計小組進行總體方案設計和任務分工;2009年6月17日2009年6月23日,每人完成自己承擔的程序模塊并通過獨立編譯;2009年6月24日2009年6月25日,將各模塊集成為一個完整的系統(tǒng),并錄入足夠的數(shù)據(jù)進行調試運行;2009年6月26日6月30日,驗收、開始撰寫課程設計報告;2009年7月3日前,提交課程設計報告和軟件。 指導教師簽章: 教研室主任簽章 程序設計基礎課程設計指導教師評語與成績指導教師評語:課程設計表現(xiàn)成績: 課程設計驗收成績: 課程設計報告成績: 課程設計 總成績: 指導教師簽章 2009年 1月 日目 錄一 概 述.51.1軟件系統(tǒng)概述.51.1.1開發(fā)的軟件系統(tǒng)的題目:掃雷游戲.51.2課程設計目的 .51.3 課程設計具體要求.5二軟件需求分析6三總體方案設計6四詳細設計.7五程序的調試與運行結果說明14六課程設計總結.17七結束語 17困難及解決途徑:.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課程設計的目的a. 通過本項課程設計,可以培養(yǎng)獨立思考、 綜合運用所學有關相應知識的能力,能更好的鞏固c語言程序設計課程學習的內容,掌握 工程軟件設計的基本方法,強化上機動手編程能力,闖過理論與實踐相結合的難關!更加了解了c語言的好處和其可用性!同時增加了同學之間的團隊合作精神!更加也體會到以后在工作中團隊合作的重要性和必要性!b. 通過c語言課程設計,使學生了解高級程序設計語言的結構,掌握基本的程序設計過程和技巧,掌握基本的分析問題和利用計算機求解問題的能力,具備初步的高級語言程序設計能力。為后續(xù)各門計算機課程的學習和畢業(yè)設計打下堅實基礎。1.3 課程設計的具體要求游戲和功能上盡量模擬windows操作系統(tǒng)中的掃雷游戲,系統(tǒng)界面盡量美觀,求有聲音提示,難度選擇和排行榜。我們是在windows-xp下進行的。根據(jù)此設計題目要求我們意識到在此程序中應會有一些關于畫圖的程序,聲音程序,鼠標的設置程序.對于排行榜還應有一些數(shù)組、文件方面的知識.所以我們需要查一下這些方面的知識。我們的老師除了要我們做這個游戲程序以外還要求我們每個人都有自己的音樂和動畫。.二 軟件需求分析對于我們的軟件系統(tǒng)-掃雷游戲,我們應該把界面弄得盡量美觀,因為只有美觀玩的人才能有興趣往下玩,所以在畫界面時應該往美觀與整潔方面努力.同時我們還應該把排行榜弄好,因為具有排行榜才能使玩家更有興趣去玩.我們還應該設一些難度選擇,以供提高玩者欲望.對于那個鼠標的控制應該設置的靈活,只有這樣別人才會選你的軟件。另外,在游戲成功與失敗時分別有不同的音樂與動畫,使玩者心情舒暢,想繼續(xù)挑戰(zhàn)下一難度級別的掃雷。三 總體方案設計掃雷游戲是供人玩的游戲,所以界面盡量美觀,有難度選擇和排行榜。特點: 功能的模塊化設計,方便對其系統(tǒng)的完善,提高了程序的可讀性。整體框圖如下: 登陸(輸入密碼,姓名)游戲界面功能選擇菜單難度選擇排行榜開始退出易中難注:游戲成功時 音樂二動畫三 游戲失敗時 音樂三動畫三音樂一動畫二音樂一動畫一姓名分數(shù)四 詳細設計*這是我設計的動畫部分和音樂,動畫(另一部分在 那里)是我和 共同完成,音樂為真心英雄,三朵小花代表我和兩個組員,主要表現(xiàn)了不經歷風雨,如何見彩虹的理念。接下來是進入登陸界面,首先輸入密碼,密碼為abc(可以改成任意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,262,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,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=detect,gmode,i=0,j,k,k1,x,s,en,r,x1,y1; initgraph(&gdriver,&gmode,c:win-tcprojects); handler=getvect(0x1c); /* 調用中斷函數(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,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+) /*此部分為繪畫小花,通過循環(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); floodfill(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);/*為圖形輸出設置當前的文本屬性橫向和豎向,0為橫向排列,1為豎向排列。 size 為字體大?。嚎捎胕nterger做參數(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!); delay(800000); setvect(0x1c,handler); nosound(); /*停止音樂*/ closegraph(); /*關閉圖形模式,以便進入文本模式輸入文本*/void deng_lu() /*此函數(shù)為登陸界面函數(shù),在開始動畫音樂結束時出現(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,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(fp); else /*沒打破紀錄情況*/ gotoxy(40,23); printf(you dont break the corse); void fopenfp() /*點擊排行榜時打開文件,輸出姓名與分數(shù),此函數(shù)在full_window函數(shù)中調用*/ fp=fopen(filea,rb); /*打開文件進行讀寫*/ fread(&peo0,sizeof(struct people),1,fp); gotoxy(15,4); /*將光標移到該位置*/ printf(%-20s,); /*從文件中調用結構體*/ printf(%.0f,peo0.time); close(fp); /*關閉文件*/ 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() /*此函數(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號中斷,用戶定義的寄存器值存于結構inregs中, 執(zhí)行完后將返回的寄存器值存于結構outregs中*/ inregs.x.ax=0x03;/*獲取鼠標位置和狀態(tài)也可以用3*/ while(!bioskey(1) /*直接使用bios服務的鍵盤接口*/ int86(0x33,&inregs,&outregs);/*調用鼠標中斷,通用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+)/*恢復上次鼠標一定范圍內的像素顏色*/ 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) / *拖動掃雷圖標掃雷*/ 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-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+)/*儲存鼠標一定范圍內的像素顏色*/ 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_poly0+1,m_now_poly1+5,green); /*綠色*/ setcolor(lightred); drawpoly(4,m_now_poly);/*顯示鼠標框架*/ x=outregs.x.cx;/*存鼠標坐標,供恢復使用*/ y=outregs.x.dx; tbx=outregs.x.bx; tx1=tx2;/*暫存鼠標釋放的位置*/ ty1=ty2; 五 程序的調試與運行結果說明 我們運行時的動畫畫面 密碼界面 進入游戲界面 游戲失敗 菜單界面這是我在做動畫時遇到的問題我只知道讓driver=detect卻忘記了定義了,最后我加了個int driver之后,運行成功了.這是我在改goto語句時遇到的錯誤,我上網查詢了很多網站,雖然查到的是正確的,但因為我們的程序比較復雜,goto語句比較多,分布程序各處,改對一部分后,有程序斷層,與后面連接不上,造成在游戲界面上無法進行鼠標操作,等于沒有改正確。由于程序復雜,時間緊,老師特許我們不用改了。但是goto語句使非結構化設計,在以后設計中應該盡量不使用。盡量做到結構化設計。六 課程設計總結課題的設計工作完成后,我們基本上符合了實驗要求。我們具有登陸界面,可以用密碼來保證安全性,還有標題欄,選擇菜單,菜單中有開始與退出,難度選擇和排行榜。游戲失敗后會有失敗的音樂動畫,成功后會有勝利的音樂與動畫,打破紀錄時可以把分數(shù)與姓名存入磁盤。但缺點是登陸界面沒有對話框,不能在圖形模式下輸入姓名。七 結束語困難及解決途徑:1 老師要求我們每個人都有自己的音樂和動畫,我們首先從音樂入手,選好音樂后,按照指導書上給的聲音頻率與音符的對照關系,我們把簡短的音樂編入程序后,聲音十分難聽,經過多次請教和幾番改動節(jié)拍和延遲時間,最后總算有了比較優(yōu)美的音樂。然后使用中斷法插入動畫中。在制作動畫時,一些坐標位置掌握不好,總是達不到想要的效果,但是通過試了很多個點,換了很多次顏色才出現(xiàn)了現(xiàn)在的效果。2 為了滿足課程設計的要求,我們需要在程序中加入排行榜,這就需要加入“排”、“行”、“榜”,三個字的字模,還有其他名字需要改動,但是我們不知道字模是怎樣加上去的,通過請教做過課程設計的前輩們,才知道原來win-tc里超級工具集自身就帶點陣字模工具。3 加排行榜需要記錄時間,通過查找實驗指導書,也試了幾個函數(shù),最終決定用difftime函數(shù),但是由于程序沒讀懂,取的開始時間位置加錯了,致使每次記錄時間都是0.00,然后停下手頭的工作,反復讀程序,最后加對了地方,同時也更加理解了關于時間的函數(shù)。4 最后就是排行榜的記錄了,我原本打算定義一個結構體變量,把成績存里就可以了,但在做的過程中,曹老師要求我們可以把成績存到磁盤里,下次玩的時候還顯示,這就需要文件的打開,讀寫,存盤等知識了,我們又有了更大的挑戰(zhàn)了,通過看課本把13章的知識又復習了一遍,試著寫打開一個文件并把記錄存盤,寫完后文件打不開,去問老師,他說我的邏輯嚴重有問題,我知道自己在這塊知識上理解的還不透徹,于是回去又看,然后又和李秀鵬同學探討,最后可以打開文件并存盤了。但是新的問題又出現(xiàn)了,當玩完游戲并打破記錄時要求輸入姓名,但是當時是在圖形模式下,無論我用scanf,gets,getch,cscanf還是,fscanf都不能輸入文本,我們的其他不分都已經完成,之差這塊,別的組已經驗收完了,我們急的焦頭爛額,最后老師給了我們一個建議,可以在進入動畫之前,在文本模式下輸入姓名,當贏了時,再把名字用數(shù)組調過來,這樣就避免了在圖形模式下輸入文本了。于是我就設計了登陸界面,順便加了一個登陸密碼。心得體會: 首先,通過這次課程設計使我感覺到知道的知識太少了,光看實驗指導書就覺得知識匱乏。課本上學的只是基礎,要想成為一個編程人員,就得需要自己不斷的積累積累再積累,把可以利用的資源都用上,如圖書館,上網查資料,向老師請教。盡量多學,不白過大學的每一天。其次,要想編一個程序,必須靠大家齊心努力。大體的模塊設計出來后要進行分工,要做到分工明確,人人有事做,人人有責任感。接著小組成員要團結在一起全力把設計完成。大家一定要共同研究:有想法就說出來,一起實現(xiàn),有困難解決不了,一起克服??傊覀兪且粋€整體!最后,我想說,年輕永不言敗!我們在做課程設計期間遇到很多困難,但我們沒有放棄,而是想辦法解決它,克服它。因為我們知道沒有解決不了的問題,雖然我們的知識有限,但是我們可以去請教、去學,只要我們肯學肯付出汗水,就沒有解決不了的困難。在今后的學習和工作中我們一定會遇到這樣或那樣的困難,我們一定要堅持理想,不輕言放棄!在此,我要特別感謝我們的曹老師,他給了我們很多起著關鍵作用的建議和指導。沒有他的教導與指導就沒有我們完整的掃雷。另外還有音樂顧問祝偉杰同學,技術指導孫坤杰同學、李秀鵬同學,他們不僅幫我們找出錯誤,幫我們改正,給我們提意見,還給我們打氣加油。真的很感謝大家對我們的幫助和支持,我們一定再接再厲! 八 .程序清單全部代碼及注釋#include conio.h#include #include#include#include#include#inclu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 肇慶市實驗中學高中生物:第二章基因和染色體的關系(第2課時)教案
- 部編版一年級語文下冊期末綜合試卷(附答案)
- 新疆體育職業(yè)技術學院《科技論文寫作指導》2023-2024學年第二學期期末試卷
- 新疆醫(yī)科大學《微生物與生物化學基礎》2023-2024學年第二學期期末試卷
- 信陽藝術職業(yè)學院《內科學C》2023-2024學年第二學期期末試卷
- 2025-2030年中國PE行業(yè)發(fā)展預測分析及投資規(guī)劃研究報告
- 2025-2030工業(yè)鍋爐市場發(fā)展現(xiàn)狀調查及供需格局分析預測報告
- 甘肅省平涼市崆峒區(qū)2024屆中考一模數(shù)學試題含解析
- 廣東省高州市謝雞鎮(zhèn)達標名校2023-2024學年中考數(shù)學最后沖刺模擬試卷含解析
- 2025年企業(yè)負責人安全培訓考試試題及答案 完整
- 培養(yǎng)初中學生的數(shù)學閱讀理解能力
- 海洋油氣開發(fā)生產簡介課件
- 卒中相關肺炎的指南解讀
- 六下統(tǒng)編版復習2形近字
- 硒知識科普手冊
- 起重吊裝作業(yè)審批表
- 最新三角形的特性優(yōu)質課教學設計公開課教案
- 新版冀教版科學四年級下冊全冊教案(雙面打印)
- MSAGRR數(shù)據(jù)自動生成工具(已經解密)
- DBJ 33-T 1268-2022工程建設工法編制標準(高清正版)
- 漫畫教你精益生產
評論
0/150
提交評論