c掃雷課程設(shè)計(jì)報(bào)告和c萬(wàn)年歷課程設(shè)計(jì)_第1頁(yè)
c掃雷課程設(shè)計(jì)報(bào)告和c萬(wàn)年歷課程設(shè)計(jì)_第2頁(yè)
c掃雷課程設(shè)計(jì)報(bào)告和c萬(wàn)年歷課程設(shè)計(jì)_第3頁(yè)
c掃雷課程設(shè)計(jì)報(bào)告和c萬(wàn)年歷課程設(shè)計(jì)_第4頁(yè)
c掃雷課程設(shè)計(jì)報(bào)告和c萬(wàn)年歷課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

青島理工大學(xué)C++面向?qū)ο笳n程設(shè)計(jì)報(bào)告院(系):專(zhuān)業(yè):學(xué)生姓名:學(xué)號(hào):班級(jí):______題目:起迄日期:設(shè)計(jì)地點(diǎn):指導(dǎo)教師:完成日期:20年7月5日目錄一、題目概述 1二、設(shè)計(jì)內(nèi)容 2三、調(diào)試分析 5四、設(shè)計(jì)總結(jié) 12五、參考文獻(xiàn) 13六、附錄 13一、題目概述(一):選課題目:題目:游戲—《掃雷》設(shè)計(jì)內(nèi)容:掃雷程序?qū)⒁獙?shí)現(xiàn)類(lèi)似windows系統(tǒng)自帶的掃雷程序功能即可以顯示附近雷區(qū)雷的個(gè)數(shù),同時(shí)在游戲成功和失敗的時(shí)候能跳出新的對(duì)話(huà)框,并配有相對(duì)應(yīng)的表情,還可以記錄玩家玩耍的時(shí)間和剩余雷區(qū)雷的個(gè)數(shù)等基本功能。(二):選做次項(xiàng)目的意義:意義:隨著科學(xué)技術(shù)突飛猛進(jìn),知識(shí)經(jīng)濟(jì)初見(jiàn)端倪,特別是信息技術(shù)和網(wǎng)絡(luò)技術(shù)的迅速發(fā)展和廣泛應(yīng)用,對(duì)社會(huì)的政治、經(jīng)濟(jì)、軍事、科技和文化等領(lǐng)域產(chǎn)生越來(lái)越深刻的影響,也正在改變這人們的工作、生活、學(xué)習(xí)和文化交流方式。尤其在游戲方面更是影響甚大,各種網(wǎng)絡(luò)游戲隨處可見(jiàn)。尤其可以借助C++實(shí)現(xiàn)很多簡(jiǎn)單游戲的制作,其中掃雷就是一款適合單機(jī)玩耍的游戲。掃雷最原始的版本可以追溯到1973年一款名為“方塊”的游戲。不久之后,“方塊”被改寫(xiě)成了游戲“Rlogic”。在“Rlogic”里,玩家的任務(wù)是作為美國(guó)海軍陸戰(zhàn)隊(duì)隊(duì)員,為指揮中心探出一條沒(méi)有地雷的安全路線(xiàn),如果路全被地雷堵死就算輸。兩年后,湯姆·安德森在“Rlogic”的基礎(chǔ)上又編寫(xiě)出了游戲“地雷”,由此奠定了現(xiàn)代掃雷游戲的雛形。1981年,微軟公司的羅伯特·杜爾和卡特·約翰遜兩位工程師在Windows3.1系統(tǒng)上加載了該游戲,掃雷游戲才正式在全世界推廣開(kāi)來(lái)。這款游戲的玩法是在一個(gè)9*9(初級(jí)),16*16(中級(jí)),16*30(高級(jí)),或自定義大小的方塊矩陣中隨機(jī)布置一定量的地雷(初級(jí)為10個(gè),中級(jí)為40個(gè),高級(jí)為99個(gè))。由玩家逐個(gè)翻開(kāi)方塊,以找出所有地雷為最終游戲目標(biāo)。如果玩家翻開(kāi)的方塊有地雷,則游戲結(jié)束。本課程設(shè)計(jì)實(shí)現(xiàn)類(lèi)似于Windows操作系統(tǒng)自帶的掃雷游戲。在課程設(shè)計(jì)中,系統(tǒng)開(kāi)發(fā)平臺(tái)為WindowsXP/windows7,程序設(shè)計(jì)語(yǔ)言采用VisualC++,程序運(yùn)行平臺(tái)為WindowsXP/windows7。在程序設(shè)計(jì)中,把整個(gè)雷區(qū)看成一個(gè)二維數(shù)組,把雷方塊定義為具有所在雷區(qū)二維數(shù)組的行和列、當(dāng)前狀態(tài)、方塊屬性、歷史狀態(tài)的結(jié)構(gòu)體。整個(gè)游戲程序包括了布雷、掃雷過(guò)程和結(jié)果三個(gè)階段,在處理鼠標(biāo)響應(yīng)事件中伴隨著GDI繪圖。程序通過(guò)調(diào)試運(yùn)行,實(shí)現(xiàn)了設(shè)計(jì)目標(biāo),能夠同時(shí)滿(mǎn)足掃雷游戲初學(xué)者和高手的需要。(三):程序所實(shí)現(xiàn)的功能:本系統(tǒng)是使用VisualC++在C++的基礎(chǔ)上創(chuàng)建的,并用MFC實(shí)現(xiàn)程序可視化,程序功能不是太多,但基本功能都可以實(shí)現(xiàn),主要功能包括:(1)選擇級(jí)別后將出現(xiàn)相應(yīng)級(jí)別的掃雷區(qū)域,這是用戶(hù)使用鼠標(biāo)左鍵單擊雷區(qū)中任何一個(gè)方塊便啟動(dòng)計(jì)時(shí)器。(2)用戶(hù)要揭開(kāi)某個(gè)方塊,可單擊它。若所揭方塊下有雷,用戶(hù)便輸了這一局,若所揭方塊下無(wú)雷,則顯示一個(gè)數(shù)字,該數(shù)字代表方塊的周?chē)?個(gè)方塊中共有多少顆雷。(3)如果用戶(hù)認(rèn)為某個(gè)方塊下埋著雷,單擊右鍵可以在方塊上標(biāo)識(shí)一個(gè)用戶(hù)認(rèn)為是雷的圖標(biāo),即給出一個(gè)掃雷標(biāo)記。用戶(hù)每標(biāo)記出一個(gè)掃雷標(biāo)記(無(wú)論用戶(hù)的標(biāo)記是否正確),程序?qū)@示的剩余雷數(shù)減少一個(gè)。(4)掃雷勝利后,顯示游戲勝利,失敗后顯示再來(lái)一局。(5)用戶(hù)可以改變游戲界面的顏色外觀。(6)游戲中用戶(hù)可以通過(guò)菜單重新開(kāi)始新游戲。(四):本程序所使用的開(kāi)發(fā)運(yùn)行環(huán)境主要包括:開(kāi)發(fā)工具:VC++6.0運(yùn)行環(huán)境:Windowswin7、windowsxp(五):本程序設(shè)計(jì)要達(dá)到的最終目的:將理論教學(xué)中涉及到的知識(shí)點(diǎn)貫穿起來(lái),對(duì)不同的數(shù)據(jù)類(lèi)型、程序控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)作一比較和總結(jié),結(jié)合設(shè)計(jì)題目進(jìn)行綜合性應(yīng)用,對(duì)所學(xué)知識(shí)達(dá)到融會(huì)貫通的程度。通過(guò)課程設(shè)計(jì),學(xué)生在下述各方面的能力應(yīng)該得到鍛煉:(1)進(jìn)一步鞏固、加深學(xué)生所學(xué)專(zhuān)業(yè)課程《C++語(yǔ)言教程》的基本理論知識(shí),理論聯(lián)系實(shí)際,進(jìn)一步培養(yǎng)學(xué)生綜合分析問(wèn)題,解決問(wèn)題的能力。(2)全面考核學(xué)生所掌握的基本理論知識(shí)及其實(shí)際業(yè)務(wù)能力,從而達(dá)到提高學(xué)生素質(zhì)的最終目的。(3)利用所學(xué)知識(shí),開(kāi)發(fā)小型應(yīng)用系統(tǒng),掌握運(yùn)用C++語(yǔ)言編寫(xiě)調(diào)試應(yīng)用系統(tǒng)程序,訓(xùn)練獨(dú)立開(kāi)發(fā)應(yīng)用系統(tǒng),進(jìn)行數(shù)據(jù)處理的綜合能力。(4)對(duì)于給定的設(shè)計(jì)題目,如何進(jìn)行分析,理清思路,并給出相應(yīng)的數(shù)學(xué)模型。(5)掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的方法。(6)熟練掌握C++語(yǔ)言的基本語(yǔ)法,靈活運(yùn)用各種數(shù)據(jù)類(lèi)型。(7)進(jìn)一步掌握在集成環(huán)境下如何調(diào)試程序和修改程序。二、設(shè)計(jì)內(nèi)容(一):系統(tǒng)總體流程圖:開(kāi)始開(kāi)始依照使用者初始設(shè)定等待按鍵左鍵鍵右鍵第一次按下方塊顯示方塊布置地雷啟動(dòng)計(jì)時(shí)器按下方塊是否為地雷顯示分?jǐn)?shù)是否再玩玩結(jié)束延按下方塊周?chē)归_(kāi)非地雷方塊計(jì)時(shí)器時(shí)間到否否是是否否是是否圖1.系統(tǒng)整體流程圖(二):系統(tǒng)結(jié)構(gòu)圖:掃雷掃雷窗體類(lèi)模塊背景音樂(lè)英雄榜級(jí)別選擇鼠標(biāo)開(kāi)始窗體加載鼠標(biāo)函數(shù)遞歸函數(shù)重開(kāi)函數(shù)畫(huà)圖函數(shù)音樂(lè)函數(shù)圖2.系統(tǒng)結(jié)構(gòu)圖(三):布雷函數(shù)流程圖開(kāi)始開(kāi)始生成隨機(jī)的雷方塊的坐標(biāo)(x,y)判斷(x,y)區(qū)域是否已經(jīng)布下雷在(x,y)區(qū)域布雷,修改狀態(tài)數(shù)據(jù)據(jù)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。判斷是否布下所有雷結(jié)束否是是否圖3.布雷函數(shù)流程圖三、調(diào)試分析(一):游戲設(shè)計(jì)過(guò)程中所需窗體設(shè)計(jì)圖4游戲選擇界面設(shè)計(jì)圖5幫助界面設(shè)計(jì)圖6自定義雷區(qū)界面設(shè)計(jì)圖7英雄榜界面設(shè)計(jì)(二):游戲過(guò)程中所出現(xiàn)的重要界面:圖8.低級(jí)水平時(shí)游戲界面圖9.中級(jí)水平時(shí)游戲界面圖10.高級(jí)水平時(shí)游戲界面圖11.破紀(jì)錄時(shí)界面圖12.游戲失敗時(shí)界面(二):關(guān)鍵代碼及功能顯示:(1)游戲自定義雷區(qū):voidCDlgCustom::OnOK()//設(shè)置長(zhǎng)和寬{ UpdateData(); if(m_uWidth<9)m_uWidth=9; if(m_uWidth>30)m_uWidth=30; if(m_uHeight<9)m_uHeight=9; if(m_uHeight>24)m_uHeight=24; if(m_uNumber<10)m_uNumber=10; if(m_uNumber>m_uWidth*m_uHeight)m_uNumber=m_uWidth*m_uHeight-1; CMineWnd*pMine=(CMineWnd*)AfxGetMainWnd(); pMine->SetCustom(m_uWidth,m_uHeight,m_uNumber); CDialog::OnOK();}voidCDlgCustom::InitData(UINTxNum,UINTyNum,UINTmNum){ m_uWidth=xNum; m_uHeight=yNum; m_uNumber=mNum;}(2)點(diǎn)中雷區(qū)時(shí):BOOLCMineWnd::IsInMineArea(UINTrow,UINTcol){ return(row>=0&&row<m_uYNum&&col>=0&&col<m_uXNum);}////失敗處理//voidCMineWnd::Dead(UINTrow,UINTcol){ //按鈕所在的區(qū)域 CRectrcBtn(m_uBtnRect[1],15,m_uBtnRect[2],39); //雷區(qū)所在的區(qū)域 CRectrcMineArea(MINE_AREA_LEFT,MINE_AREA_TOP, MINE_AREA_LEFT+m_uXNum*MINE_WIDTH, MINE_AREA_TOP+m_uYNum*MINE_HEIGHT); UINTi,j; if(m_pMines[row][col].uAttrib==ATTRIB_MINE) {//失?。c(diǎn)中雷 for(i=0;i<m_uYNum;i++) { for(j=0;j<m_uXNum;j++) { m_pMines[row][col].uState=STATE_BLAST; m_pMines[row][col].uOldState=STATE_BLAST; if(m_pMines[i][j].uAttrib==ATTRIB_MINE &&m_pMines[i][j].uState!=STATE_FLAG) { m_pMines[i][j].uState=STATE_MINE; m_pMines[i][j].uOldState=STATE_MINE; } } } } else{//失敗--錯(cuò)誤雷 for(i=0;i<m_uYNum;i++) { for(j=0;j<m_uXNum;j++) { m_pMines[row][col].uState=STATE_ERROR; m_pMines[row][col].uOldState=STATE_ERROR; if(m_pMines[i][j].uAttrib==ATTRIB_MINE &&m_pMines[i][j].uState!=STATE_FLAG) { m_pMines[i][j].uState=STATE_MINE; m_pMines[i][j].uOldState=STATE_MINE; } } } } //失敗處理 InvalidateRect(rcMineArea); m_uBtnState=BUTTON_DEAD; InvalidateRect(rcBtn); m_uGameState=GS_DEAD; if(m_uTimer!=0) {//將定時(shí)器去激活 KillTimer(ID_TIMER_EVENT); m_uTimer=0; } if(m_bSoundful) {//失敗聲音播放 sndPlaySound((LPCTSTR)LockResource(m_pSndDead),SND_MEMORY|SND_ASYNC|SND_NODEFAULT); }}(3)游戲勝利時(shí)聲音代碼:BOOLCMineWnd::Victory(){ UINTi,j; CRectrcBtn(m_uBtnRect[1],15,m_uBtnRect[2],39); //檢測(cè)是否勝利 for(i=0;i<m_uYNum;i++) { for(j=0;j<m_uXNum;j++) { if(m_pMines[i][j].uState==STATE_NORMAL)returnFALSE; if(m_pMines[i][j].uState==STATE_DICEY)returnFALSE; } } //勝利則作勝利處理 m_uBtnState=BUTTON_VICTORY; m_uGameState=GS_VICTORY; Invalidate(); if(m_uTimer!=0) {//將定時(shí)器去激活 KillTimer(ID_TIMER_EVENT); m_uTimer=0; } //勝利聲音 if(m_bSoundful) { sndPlaySound((LPCTSTR)LockResource(m_pSndVictory), SND_MEMORY|SND_ASYNC|SND_NODEFAULT); }(4)繪制笑臉和數(shù)字圖形代碼: voidCMineWnd::DrawButton(CPaintDC&dc){ CDCcdc; cdc.CreateCompatibleDC(&dc); cdc.SelectObject(m_bmpButton); dc.StretchBlt(m_uBtnRect[0],16,24,24,&cdc,0,24*m_uBtnState,24,24,SRCCOPY); dc.Draw3dRect(m_uBtnRect[1],15,26,26,m_clrDark,m_clrDark); }voidCMineWnd::DrawNumber(CPaintDC&dc){ CDCdcMemory; dcMemory.CreateCompatibleDC(&dc); dcMemory.SelectObject(m_bmpNumber); dc.Draw3dRect(16,15,41,25,m_clrDark,COLOR_WHITE); dc.Draw3dRect(m_uNumRect[0],15,41,25,m_clrDark,COLOR_WHITE); intnum; //drawremainingminenumbers num=(m_nLeaveNum<0)?11:m_nLeaveNum/100; dc.StretchBlt(17,16,13,23,&dcMemory,0,276-23*(num+1),13,23,SRCCOPY); num=(m_nLeaveNum<0)?-(m_nLeaveNum-num*100)/10:(m_nLeaveNum-num*100)/10; dc.StretchBlt(30,16,13,23,&dcMemory,0,276-23*(num+1),13,23,SRCCOPY); num=(m_nLeaveNum<0)?-m_nLeaveNum%10:m_nLeaveNum%10; dc.StretchBlt(43,16,13,23,&dcMemory,0,276-23*(num+1),13,23,SRCCOPY); //drawtakeseconds num=m_uSpendTime/100; dc.StretchBlt(m_uNumRect[0],16,13,23,&dcMemory,0,276-23*(num+1),13,23,SRCCOPY); num=(m_uSpendTime-num*100)/10; dc.StretchBlt(m_uNumRect[0]+13,16,13,23,&dcMemory,0,276-23*(num+1),13,23,SRCCOPY); num=m_uSpendTime%10; dc.StretchBlt(m_uNumRect[0]+26,16,13,23,&dcMemory,0,276-23*(num+1),13,23,SRCCOPY);}(5):獲取某個(gè)小方塊區(qū)域相鄰8個(gè)區(qū)域的雷個(gè)數(shù):}UINTCMineWnd::GetAroundNum(UINTrow,UINTcol){ UINTi,j; UINTaround=0; UINTminRow=(row==0)?0:row-1; UINTmaxRow=row+2; UINTminCol=(col==0)?0:col-1; UINTmaxCol=col+2; for(i=minRow;i<maxRow;i++) { for(j=minCol;j<maxCol;j++) { if(!IsInMineArea(i,j))continue; if(m_pMines[i][j].uAttrib==ATTRIB_MINE)around++; } } returnaround;}四、設(shè)計(jì)總結(jié)短學(xué)期的課程設(shè)計(jì)是一次非常珍貴的機(jī)會(huì),這是一次可以讓我們所學(xué)的理論與實(shí)際相結(jié)合的機(jī)會(huì)。我們選擇了游戲掃雷這一題目。通過(guò)這次比較完整的一個(gè)程序的設(shè)計(jì),我走出了純理論的學(xué)習(xí),從一種全新的角度去學(xué)習(xí)。并且在小團(tuán)隊(duì)實(shí)現(xiàn)的MFC過(guò)程中,除去知識(shí)的大量更新,我學(xué)到了很多東西。其實(shí)個(gè)人而言,我體會(huì)較深的一點(diǎn)是團(tuán)隊(duì)互相幫助學(xué)習(xí)的過(guò)程,自己看書(shū)學(xué)習(xí)的經(jīng)驗(yàn),以及從網(wǎng)上以及其他各種途徑獲得信息和知識(shí)的經(jīng)驗(yàn)。理論與實(shí)際相結(jié)合的設(shè)計(jì),鍛煉了我綜合運(yùn)用所學(xué)的基礎(chǔ)知識(shí),解決實(shí)際問(wèn)題的能力,同時(shí)也提高我查閱文獻(xiàn)資料、對(duì)程序整體的把握等其他能力水平。而且通過(guò)對(duì)整體的掌控,對(duì)局部的取舍,以及對(duì)細(xì)節(jié)的斟酌處理,都使我的能力得到了鍛煉,我的各方面經(jīng)驗(yàn)都得到了極大的豐富。經(jīng)過(guò)一個(gè)假期,沒(méi)有近距離接觸C++,因而一開(kāi)學(xué)對(duì)進(jìn)行MFC課程設(shè)計(jì)這一還算陌生的領(lǐng)域感到有些吃力。在同組的同學(xué)有著很強(qiáng)的C++實(shí)力,在進(jìn)行編程的過(guò)程中,我向她學(xué)到了MFC的很多知識(shí),交流中也總結(jié)出比書(shū)本上更精髓生動(dòng)的語(yǔ)言。在自己琢磨MFC各種陌生知識(shí)的時(shí)候,隊(duì)友的耐心與任性,對(duì)于知識(shí)的渴求,對(duì)于工作的專(zhuān)注,極大程度上鼓舞了我。我們?cè)诮涣髦?,迸發(fā)出了很多設(shè)計(jì)靈感,互相建議改進(jìn)的過(guò)程中,我們分別從各個(gè)方面共同改進(jìn)著,這個(gè)已經(jīng)不能僅僅稱(chēng)作課程設(shè)計(jì)的作品。從知識(shí)獲得方面來(lái)說(shuō),各種已經(jīng)學(xué)習(xí)到的C++知識(shí)以及各種從網(wǎng)上搜索來(lái)的案例,我們都是隨著設(shè)計(jì)的不斷深入而不斷熟悉的。和老師以及同學(xué)的溝通交流更使我對(duì)程序整體的規(guī)劃與設(shè)計(jì)有了新的認(rèn)識(shí),也對(duì)自己提出了新的要求。提高是有限的但提高也是全面的。正是這一次設(shè)計(jì)讓我積累了許多實(shí)際經(jīng)驗(yàn)。也必然會(huì)讓我在未來(lái)的工作學(xué)習(xí)中表現(xiàn)出更高的耐力、理解力、實(shí)踐力。順利如期的完成本次課程設(shè)計(jì)給了我很大的信心,但是也為我指出很多不足的地方。學(xué)習(xí)其實(shí)就是一個(gè)不斷完善的過(guò)程,正視自己的不足之處。在以后的工作和學(xué)習(xí)中不斷的彌補(bǔ)這些不足之處,在以后的生活中也要保持同樣的態(tài)度,不斷地完善自己。為期二周不到的MFC課程設(shè)計(jì)就要這樣畫(huà)上一個(gè)句號(hào)了。從這不長(zhǎng)不短的二周中,我獲得了知識(shí),學(xué)到了研究的堅(jiān)持與韌性,這四周不僅僅是交出了一份作業(yè),還對(duì)自己有了新的認(rèn)識(shí),實(shí)在是難得的機(jī)遇與經(jīng)歷。五、參考文獻(xiàn)[1]《C++面向?qū)ο蟪绦蛟O(shè)計(jì)》.任鳳華、李蘭.西安電子科技大學(xué)出版社[2]《C++面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn)指導(dǎo)及習(xí)題解析》.任鳳華、李蘭。西安電子科技大學(xué)出版社[3].《C++程序設(shè)計(jì)實(shí)踐教程(第2版)》.吳乃陵、李海文.高等教育出版社[4]《VisualC++課程設(shè)計(jì)與系統(tǒng)開(kāi)發(fā)實(shí)例(第4版)》.伍俊良.清華大學(xué)出版社[5]《深入淺出MFC(附光盤(pán))》.侯俊杰.華中科技大學(xué)出版社六附錄 UINT m_uXNum; //X方向小方塊個(gè)數(shù) UINT m_uYNum; //Y方向小方塊個(gè)數(shù) UINT m_uMineNum; //總的雷個(gè)數(shù) int m_nLeaveNum; //剩余的雷個(gè)數(shù) UINT m_uSpendTime; //游戲開(kāi)始擊到目前所花費(fèi)的時(shí)間 UINT m_uGameState; //游戲狀態(tài) UINT m_uTimer; //定時(shí)器標(biāo)識(shí) UINT m_uNewState; //當(dāng)前選中的小方塊的狀態(tài) UINT m_uLevel; //當(dāng)前游戲等級(jí) UINT m_uPrimary; //初級(jí)記錄 UINT m_uSecond; //中級(jí)記錄 UINT m_uAdvance; //高級(jí)記錄 CString m_szPrimary; //初級(jí)記錄保持者 CString m_szSecond; //中級(jí)記錄保持者 CString m_szAdvance; //高級(jí)記錄保持者 BOOL m_bLRBtnDown; //是否為左右鍵同時(shí)按下 BOOL m_bClickBtn; //左鍵按下的時(shí)候鼠標(biāo)是否位于按鈕區(qū)域內(nèi) BOOL m_bMarkful; //是否能顯示標(biāo)記 BOOL m_bColorful; //是否彩色顯示 BOOL m_bSoundful; //是否有聲音 CMenu* m_pSubMenu; //子菜單 CBitmap m_bmpMine; //雷區(qū)背景圖像 CBitmap m_bmpNumber; //數(shù)字背景圖像 CBitmap m_bmpButton; //笑臉按鈕背景圖像 CBrush m_brsBG; //背景畫(huà)刷對(duì)象 COLORREF m_clrDark; //各按鈕的深色調(diào) RECT m_rcClient; //客戶(hù)區(qū)域 UINT m_uBtnRect[3]; //按鈕框區(qū)域坐標(biāo)數(shù)組 UINT m_uBtnState; //按鈕狀態(tài) UINT m_uNumRect[3]; //數(shù)字框區(qū)域坐標(biāo)數(shù)組(包括時(shí)間和雷個(gè)數(shù)) UINT m_uShellRcX[2]; //內(nèi)框以及邊界的坐標(biāo)X方向 UINT m_uShellRcY[2]; //內(nèi)框以及邊界的坐標(biāo)Y方向 MINEWND m_pMines[100][100]; //表示雷區(qū)內(nèi)的所有小方塊的二維數(shù)組 MINEWND* m_pNewMine; //當(dāng)前選中的小方塊 MINEWND* m_pOldMine; //上次選中的小方塊 void* m_pSndDead; //失敗提示音 void* m_pSndVictory; //勝利提示音 void* m_pSndClock; //時(shí)鐘提示音《高級(jí)語(yǔ)言程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告萬(wàn)年歷程序設(shè)計(jì)信息技術(shù)工程學(xué)院軟件1102張錦琪2012/6/15

課程設(shè)計(jì)名稱(chēng):C++萬(wàn)年歷設(shè)計(jì)使用工具軟件:MicrosoftvisualC++課程設(shè)計(jì)內(nèi)容簡(jiǎn)介1、以開(kāi)關(guān)語(yǔ)句進(jìn)行執(zhí)行功能的選擇,這些功能分別是:判斷閏年;判斷某天是星期幾;判斷某年的隸屬生肖;輸出某年的日歷;輸出某月的日期;退出系統(tǒng);2、建立類(lèi)wnl,定義類(lèi)的成員函數(shù); voidisleapyear(); //判斷閏年,用于輸出判斷結(jié)果,以流的形式boolisleap(intyear); //判斷閏年,返回判斷結(jié)果,用于計(jì)算天數(shù)intgetdays(intyear,intmonth,intday); //獲取據(jù)第一天天數(shù)voidweekdays(intyear,intmonth,intday);//獲取星期幾voidprintyear(intyear); //輸出年的日歷voidprintyearmonth(intyear,intmonth);//輸出某年某月的日歷voidanimal(intyear); //判斷某年的生肖intgetyear(){returnYear;} //返回私有成員的值 intgetmonth(){returnMonth;} intgetday(){returnDay;}3、定義私有成員: intYear,Month,Day;4、定義類(lèi)的對(duì)象:_wnl;5、為類(lèi)的成員函數(shù)填寫(xiě)代碼,滿(mǎn)足功能實(shí)現(xiàn);6、運(yùn)行環(huán)境:控制臺(tái)應(yīng)用程序的源程序;得意之處:可以滿(mǎn)足多功能實(shí)現(xiàn),可以循環(huán)執(zhí)行功能;可以選擇每行輸出的月份數(shù);有歡迎界面;客戶(hù)輸入錯(cuò)誤會(huì)有提示;使用了C語(yǔ)言的流的形式,判斷閏年,提高執(zhí)行速度;使用I/O流控制頭文件iomanip.h控制月份日歷的輸出,更加整齊;創(chuàng)意的技術(shù)實(shí)現(xiàn)主函數(shù)流程判斷某天是周幾判斷某天是周幾判斷閏年獲取天數(shù)輸出年份課程設(shè)計(jì)中目前存在的問(wèn)題:無(wú)法在歡迎頁(yè)面插入字符畫(huà);設(shè)計(jì)實(shí)踐過(guò)程中的自我感受這是我第一次編寫(xiě)如此長(zhǎng)的代碼,從網(wǎng)上如同大海撈針?biāo)频膶ふ揖帉?xiě)方法,看鋪天蓋地的長(zhǎng)代碼,還有的程序是錯(cuò)的。輸入的時(shí)候,沒(méi)有小工具。在看著自己熬通宵打出的代碼,一大串的錯(cuò)誤,真的有些泄氣。改對(duì)了執(zhí)行輸出結(jié)果還是錯(cuò)的,只好重新思考算法。不過(guò)通過(guò)這次編程我真的學(xué)會(huì)了好多,比如其他的頭文件的功能;setfil(‘’)設(shè)置填充字符;setw()定義字段長(zhǎng)度……也讓我真正體會(huì)到了編程的作用,愛(ài)上了編程。參考文獻(xiàn):[1]呂鳳翥,《C++語(yǔ)言程序設(shè)計(jì)》,清華大學(xué)出版社。實(shí)驗(yàn)代碼://萬(wàn)年歷#include<iostream.h>#include<stdio.h>#include<iomanip.h>intdayofmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//整形數(shù)組用于儲(chǔ)存每月的天數(shù)charmonthname[13][5]={"","Jan","Feb","Mar","Apr","May","June","July","Aug","Seb","Oct","Nov","Dec"};//字符型數(shù)組用于儲(chǔ)存月份名第一個(gè)數(shù)字用于表示字符串?dāng)?shù)(相當(dāng)于行)第二個(gè)用于表示字符串長(zhǎng)度(相當(dāng)于列)classwnl{public: voidisleapyear(intyear);//判斷閏年,用于輸出判斷結(jié)果,以流的形式 boolisleap(intyear);//判斷閏年,返回判斷結(jié)果,用于計(jì)算天數(shù) intgetdays(intyear,intmonth,intday); //獲取據(jù)第一天天數(shù) voidweekdays(intyear,intmonth,intday); //獲取星期幾 voidprintyear(intyear); //輸出年的日歷 voidprintyearmonth(intyear,intmonth); //輸出某年某月的日歷 voidanimal(intyear); //判斷某年的生肖 intgetyear(){returnYear;}//返回私有成員的值 intgetmonth(){returnMonth;} intgetday(){returnDay;}private: intYear,Month,Day;}_wnl;voidmain(){ intchoice,year,month,day; cout<<"~~歡迎來(lái)到萬(wàn)年歷查詢(xún)系統(tǒng)~~"<<endl<<endl; cout<<"設(shè)計(jì)人:"<<endl; cout<<"天津職業(yè)技術(shù)師范大學(xué)\n\t\t\t設(shè)計(jì)人:張錦琪\n\n"; loop: cout<<"╱請(qǐng)按序號(hào)輸入您要做的工作:╲"<<endl; cout<<"▏判斷閏年請(qǐng)按1;▕"<<endl; cout<<"▏判斷某天是星期幾請(qǐng)按2;▕"<<endl; cout<<"▏判斷某年的隸屬生肖請(qǐng)按3;▕"<<endl; cout<<"▏輸出某年的日歷請(qǐng)按4;▕"<<endl; cout<<"▏輸出某月的日期請(qǐng)按5;▕"<<endl; cout<<"╲如果您要退出系統(tǒng)請(qǐng)按0;╱"<<endl; cin>>choice; switch(choice) { case0:return; case1: cout<<"輸入一個(gè)年份格式如:xxxx"; cin>>year; _wnl.isleapyear(year);break; case2: { cout<<"請(qǐng)輸入您要查詢(xún)的天數(shù)格式如xxxxxxxx"; cin>>year>>month>>day; _wnl.weekdays(year,month,day); }break; case3: { cout<<"請(qǐng)輸入您要查詢(xún)的年份格式如xxxx:"; cin>>year; _wnl.animal(year); }break; case4: { cout<<"請(qǐng)輸入你要輸出的年份xxxx:"; cin>>year; _wnl.printyear(year); }break; case5: { cout<<"請(qǐng)輸入您要輸出的年月,形如xxxxxx:"; cin>>year>>month; _wnl.printyearmonth(year,month); }break; default:cout<<"輸入錯(cuò)誤"<<endl; } cout<<"繼續(xù)查詢(xún)請(qǐng)輸1"<<endl<<"退出查詢(xún)請(qǐng)輸入字符"<<endl; intx; cin>>x; if(x==1) gotoloop;}voidwnl::isleapyear(intyear){ if(year>=1000&&year<=9999) printf("%s\n",year%(year%100?4:400)?"no":"yes");//以C語(yǔ)言流的形式判斷會(huì)更快一些,節(jié)省內(nèi)存 else printf("%s\n","沒(méi)有按格式輸入"); }boolwnl::isleap(intyear){ if(year%400==0||(year%100!=0&&year%4==0)) return1; else return0; }voidwnl::weekdays(intyear,intmonth,intday){ if(year>=1000&&year<=9999) { if(month<=12&&month>=1) { intmax=dayofmonth[month]; if(day>0&&day<max) { ints=getdays(year,month,day)%7; switch(s) { case0:cout<<"Sunday"<<endl;break; case1:cout<<"Monday"<<endl;break; case2:cout<<"Tuesday"<<endl;break; case3:cout<<"Wednesday"<<endl;break; case4:cout<<"Thursday"<<endl;break; case5:cout<<"Friday"<<endl;break; case6:cout<<"Saturday"<<endl; } } } } else cout<<"沒(méi)有按格式輸入"<<endl;}intwnl::getdays(intyear,intmonth,intday){ inti,sum=0; for(i=1;i<year;i++) { if(isleap(i))sum+=366; elsesum+=365; } if(isleap(year))dayofmonth[2]=29; for(i=1;i<month;i++)sum+=dayofmonth[i]; sum+=day; returnsum;}voidwnl::animal(intyear){ if(year>=1000&&year<=9999) { intn=year%12; switch(n) { case0:cout<<"該年是猴年"<<endl;break; case1:cout<<"該年是雞年"<<endl;break; case2:cout<<"該年是狗年"<<endl;break; case3:cout<<"該年是豬年"<<endl;break; case4:cout<<"該年是鼠年"<<endl;break; case5:cout<<"該年是牛年"<<endl;break; case6:cout<<"該年是虎年"<<endl;break; case7:cout<<"該年是兔年"<<endl;break; case8:cout<<"該年是龍年"<<endl;break; case9:cout<<"該年是蛇年"<<endl;break; case10:cout<<"該年是馬年"<<endl;break; case11:cout<<"該年是羊年"<<endl;break; } } else cout<<"沒(méi)有按格式輸入"<<endl;}voidwnl::printyear(intyear){ if(year>=1000&&year<=9999) { cout<<"輸入一行輸出的月份數(shù):"; intchoice; cin>>choice; ints; inta[3],b[3];//b數(shù)組用來(lái)儲(chǔ)存每月的天數(shù)a數(shù)組用來(lái)臨時(shí)儲(chǔ)存那一月輸出到的日期 cout<<"year:"<<year<<endl; inti=1; for(i=1;i<=12/choice;i++)//計(jì)算縱向輸出幾個(gè)月 { for(inth=1;h<=choice;h++)//該循環(huán)用于輸出橫向月份名 { intm=choice*(i-1)+h;//計(jì)算月份 cout<<""<<monthname[m]<<""; } cout<<endl; for(h=1;h<=choice;h++) cout<<""; cout<<endl; for(intj=0;j<choice;j++) { cout<<"Su"<<"Mo"<<"Tu"<<"We"<<"Th"<<"Fr"<<"Sa"<<""; } cout<<endl; for(j=0;j<choice;j++)//這個(gè)循環(huán)是為了輸出第一行,第一行都是單數(shù),所以提出來(lái)輸 { intmonth; month=choice*(i-1)+j+1;//計(jì)算月份 s=getdays(year,month,1); s=s%7;//獲取每月第一天 for(intm=0;m<s;m++) cout<<"";//輸出月前的空 if(isleap(year))dayofmonth[2]=29; b[j]=dayofmonth[month];//月份天數(shù)b數(shù)組儲(chǔ)存一個(gè)月的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論