C語(yǔ)言程序設(shè)計(jì)掃雷游戲試驗(yàn)報(bào)告_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)掃雷游戲試驗(yàn)報(bào)告_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)掃雷游戲試驗(yàn)報(bào)告_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)掃雷游戲試驗(yàn)報(bào)告_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)掃雷游戲試驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、中南大學(xué)程序設(shè)計(jì)基礎(chǔ)實(shí)踐報(bào)告題 目設(shè)計(jì)一個(gè)和window系統(tǒng)類似的小游戲【挖地雷】 學(xué)生姓名張?zhí)m蘭學(xué) 院信息科學(xué)與工程學(xué)院專業(yè)班級(jí)物聯(lián)網(wǎng)工程1301班完成時(shí)間2014.1計(jì)算機(jī)程序設(shè)計(jì)實(shí)踐報(bào)告 班級(jí)_學(xué)號(hào)姓名目 錄1. 課程設(shè)計(jì)內(nèi)容 32. 課程設(shè)計(jì)目的 33. 背景知識(shí) 34. 工具/準(zhǔn)備工作 55. 設(shè)計(jì)步驟、方法 55.1. 步驟1 :步驟名稱(二級(jí)標(biāo)題)錯(cuò)誤!未定義書(shū)簽。5.1.1. 步驟1.1:步驟名稱(三級(jí)標(biāo)題)55.2. 步驟2 :步驟名稱 錯(cuò)誤!未定義書(shū)簽。5.3. 步驟n:步驟名稱 錯(cuò)誤!未定義書(shū)簽。6. 設(shè)計(jì)結(jié)果及分析 57. 設(shè)計(jì)結(jié)論 158. 問(wèn)題及心得體會(huì) 169.

2、對(duì)本設(shè)計(jì)過(guò)程及方法、手段的改進(jìn)建議 1710. 參考文獻(xiàn) 17第27頁(yè)共25頁(yè)報(bào)告名稱1. 課程設(shè)計(jì)內(nèi)容在計(jì)算機(jī)逐步滲入社會(huì)生活各個(gè)層面的今天, 計(jì)算機(jī)已經(jīng)成為人們?nèi)粘I?的一分,越來(lái)越多的人使用計(jì)算機(jī)辦公、娛樂(lè)等等。掃雷游戲是Windows操作系統(tǒng)自帶的一款小游戲,在過(guò)去的幾年里,Windows 操作系統(tǒng)歷經(jīng)數(shù)次換代更新,變得越來(lái)越龐大、復(fù)雜,功能也越來(lái)越強(qiáng)大,但是 這款小游戲依然保持原來(lái)的容貌,可見(jiàn)這款小游戲受到越來(lái)越多人的喜愛(ài)。我利 用C-free編寫(xiě)了與它功能相仿的挖地雷游戲,寓學(xué)于樂(lè)。即:設(shè)計(jì)一個(gè)功能與 Windows中的挖雷游戲相同的小游戲。2. 課程設(shè)計(jì)目的1 培養(yǎng)學(xué)生綜合運(yùn)用

3、所學(xué)知識(shí)獨(dú)立完成課題的能力。2試學(xué)生更深入地理解和掌握該課程中的有關(guān)基本概念,程序設(shè)計(jì)思想和 方法。3提高對(duì)工作認(rèn)真負(fù)責(zé)、一絲不茍,對(duì)同學(xué)團(tuán)結(jié)友愛(ài),協(xié)作攻關(guān)的基本素 質(zhì)。4培養(yǎng)勇于探索、嚴(yán)謹(jǐn)推理、實(shí)事求是、有錯(cuò)必改,用實(shí)踐來(lái)檢驗(yàn)理論, 全方位考慮問(wèn)題等科學(xué)技術(shù)人員應(yīng)具有的素質(zhì)。5培養(yǎng)從資料文獻(xiàn)、科學(xué)實(shí)驗(yàn)中獲得知識(shí)的能力,提高從別人經(jīng)驗(yàn)中找到 解決問(wèn)題的新途徑的悟性,初步培養(yǎng)工程意識(shí)和創(chuàng)新能力。6對(duì)掌握知識(shí)的深度、運(yùn)用理論去處理問(wèn)題的能力、實(shí)驗(yàn)?zāi)芰?、課程設(shè)計(jì) 能力、書(shū)面及口頭表達(dá)能力進(jìn)行考核3. 背景知識(shí)游戲玩法:以windows XP自帶掃雷winmine.exe為例游戲區(qū)包括雷區(qū)、地雷計(jì)數(shù)器

4、(位于左上角,記錄剩余地雷數(shù))和計(jì)時(shí)器(位 于右上角,記錄游戲時(shí)間),確定大小的矩形雷區(qū)中隨機(jī)布置一定數(shù)量的地雷 (初 級(jí)為9*9個(gè)方塊10個(gè)雷,中級(jí)為16*16個(gè)方塊40個(gè)雷,高級(jí)為16*30個(gè)方塊99個(gè)雷,自定義級(jí)別可以自己設(shè)定雷區(qū)大小和雷數(shù),但是雷區(qū)大小不能超過(guò)24*30),玩家需要盡快找出雷區(qū)中的所有不是地雷的方塊,而不許踩到地雷。游戲的基本操作包括左鍵單擊(Left Click)、右鍵單擊(Right Click)、雙擊 (Chordi ng)三種。其中左鍵用于打開(kāi)安全的格子,推進(jìn)游戲進(jìn)度;右鍵用于標(biāo) 記地雷,以輔助判斷,或?yàn)榻酉聛?lái)的雙擊做準(zhǔn)備;雙擊在一個(gè)數(shù)字周?chē)牡乩讟?biāo) 記完時(shí),相

5、當(dāng)于對(duì)數(shù)字周?chē)创蜷_(kāi)的方塊均進(jìn)行一次左鍵單擊操作:左鍵單擊:在判斷出不是雷的方塊上按下左鍵,可以打開(kāi)該方塊。如果方塊 上出現(xiàn)數(shù)字,則該數(shù)字表示其周?chē)?3 3區(qū)域中的地雷數(shù)(一般為8個(gè)格子,對(duì)于 邊塊為5個(gè)格子,對(duì)于角塊為3個(gè)格子。所以掃雷中最大的數(shù)字為 8);如果方塊 上為空(相當(dāng)于0),則可以遞歸地打開(kāi)與空相鄰的方塊;如果不幸觸雷,則游戲 結(jié)束。雙擊:同時(shí)按下左鍵和右鍵完成雙擊。當(dāng)雙擊位置周?chē)褬?biāo)記雷數(shù)等于該位 置數(shù)字時(shí)操作有效,相當(dāng)于對(duì)該數(shù)字周?chē)创蜷_(kāi)的方塊均進(jìn)行一次左鍵單擊操作。 地雷未標(biāo)記完全時(shí)使用雙擊無(wú)效。若數(shù)字周?chē)袠?biāo)錯(cuò)的地雷,則游戲結(jié)束,標(biāo)錯(cuò)的地雷上會(huì)顯示一個(gè)“”(見(jiàn)下圖)掃雷的

6、設(shè)計(jì)原理:掃雷游戲分為幾個(gè)步驟:第一步,使用二維數(shù)組表示地圖;第二步,隨機(jī)生成幾個(gè)地雷;第三步,點(diǎn)擊方格的反應(yīng),計(jì)算每個(gè)非雷區(qū)方格點(diǎn)開(kāi)后的數(shù)字;第四步,當(dāng)方格數(shù)字為0的情況;第五步,當(dāng)方格為地雷的情況。第一步地圖的大小和第二步地雷的數(shù)量都應(yīng)該是程序中給定的,或者玩家輸入的這個(gè)是多少自己決定吧。第三步,計(jì)算非雷區(qū)方格點(diǎn)開(kāi)后的數(shù)字就把這個(gè)方格在 二維數(shù)組中周?chē)藗€(gè)方向的方格是否是地雷都檢查一遍,一定要注意不要越出數(shù)組邊界。這個(gè)數(shù)字可以在游戲初始化時(shí)全都計(jì)算好, 也可以在玩家點(diǎn)擊的時(shí)候再 計(jì)算。點(diǎn)擊非雷區(qū)方格,顯示數(shù)字,這個(gè)方格標(biāo)記為已點(diǎn)過(guò)”第四步,當(dāng)方格 數(shù)字為0時(shí),這里要用到遞歸調(diào)用,就是讓程序

7、自動(dòng) 點(diǎn)擊”這個(gè)數(shù)字為0方格周?chē)?的八個(gè)方格,然后再看結(jié)果,如果不是0,就停止,如果是0,依然遞歸調(diào)用,直 到?jīng)]有0為止,或者直到點(diǎn)遍所有方格為止,一定要注意不要越出數(shù)組邊界。第 五步,很簡(jiǎn)單,宣布玩家死亡就可以了。4. 工具/準(zhǔn)備工作查閱相關(guān)資料,了解掃雷的的玩法,了解掃雷的設(shè)計(jì)思想方法。借鑒他人寫(xiě) 過(guò)的程序,從中找到突破口。從程序中了解需要的各種函數(shù)準(zhǔn)備, 再進(jìn)一步獲悉 該函數(shù)的功能與使用方法。對(duì)自己要設(shè)計(jì)的挖地雷游戲進(jìn)行功能分析,大致如下:總體游戲過(guò)程分析:在屏幕上顯示一個(gè)游戲界面,雷區(qū)范圍內(nèi)預(yù)先埋設(shè)了一 定數(shù)量的隨機(jī)分布的地雷(用數(shù)字 9代替地雷);玩家通過(guò)從鍵盤(pán)中輸入(行數(shù) X列數(shù)丫

8、)/進(jìn)行點(diǎn)擊;若能點(diǎn)中所有非雷區(qū),則游戲勝利;否則踩雷,游戲失敗。簡(jiǎn)易版掃雷游戲要具備以下功能:1)開(kāi)局:首先選擇游戲等級(jí),然后生成不同等級(jí)的雷區(qū)界面。游戲等級(jí)分為三級(jí):各等級(jí)行列數(shù)為:簡(jiǎn)單:10X 10、普通:15X15、困難:20 X 20;雷區(qū)每個(gè)*號(hào)下面或埋藏有1個(gè)地雷,或者沒(méi)有地雷;2)挖雷:從鍵盤(pán)中輸入(行數(shù)X,列數(shù)丫),并按回車(chē)鍵,可挖開(kāi)它;若所揭 方塊下有9,則踩雷,此時(shí)所有含地雷的塊都出現(xiàn) 9,該局游戲失??; 如果方塊上出現(xiàn)數(shù)字,它代表在它周?chē)?8個(gè)方塊中共有多少顆地雷;3)輸入:通過(guò)鍵盤(pán)輸入相關(guān)指示信息;4)輸出:提示游戲失敗,是否繼續(xù)再來(lái)一遍;5. 設(shè)計(jì)步驟、方法5.1

9、主函數(shù)第一步,寫(xiě)出主程序的基本框架,確定各子模塊名字和參數(shù)。具體的函數(shù)流程如圖5-3所示:MainQInitOCwitrolO C GanieBegiiiO 游戲開(kāi)始界面 上函數(shù) 初始化游戲控制GzuPlayO r GanmOcrO游戲光敗 游戲過(guò)程L GrmicWinQ游戲勝利圖5-3程序運(yùn)行流程閤定義使用到的常數(shù)、全局變量、函數(shù)原型說(shuō)明。然后初始化圖形系統(tǒng),調(diào)用游戲 控制函數(shù),游戲只接受鍵盤(pán),通過(guò)鼠標(biāo)結(jié)束游戲,關(guān)閉系統(tǒng),退出游戲。mai n()int i,j;/* 定義 i,j 變量*/int NO;int begi n=1;int h;/* 確定雷的個(gè)數(shù)*/while(begi n)pr

10、intf (nnnnnnnnnttt|ttt|tttttt歡迎進(jìn)入掃雷按回車(chē)鍵繼續(xù)nn|nnn |nn nnnn nnnn);請(qǐng)選擇游戲難度:nn);簡(jiǎn)單難度nn);普通難度nn);困難難度nn);本程序由張?zhí)m蘭和杜宏亮完成getchar(); /* 游戲開(kāi)始界面*/system(cls);printf(” nnnnnnnnnprin tf(1prin tf(2prin tf(3prin tf(4scan f(%d,&h);getchar();/*if(0h&h5)switch(h)case 1:x=10;y=10;b=10;break;/*case 2:x=15;y=15;b=40;brea

11、k;/*自定義難度nn);確定游戲難度*/簡(jiǎn)單難度*/普通難度*/case 3:x=20;y=20;b=60;break;/* 困難難度*/case 4:system(cls);printf(請(qǐng)輸入棋盤(pán)行列數(shù)(小于20且用逗號(hào)隔開(kāi)):);/*從鍵盤(pán)輸入坐標(biāo)*/scan f(%d,%d, &x, &y);getchar();printf(請(qǐng)輸入雷的個(gè)數(shù):);/*從鍵盤(pán)輸入雷的個(gè)數(shù)*/scan f(%d,&b);getchar();break;break;elseprintf(輸入錯(cuò)誤請(qǐng)重新輸n);while(begi n)system(cls);InitialValue_game(&g);/*棋

12、盤(pán)初始化 */InitialMine_game(&g);/*隨機(jī)布雷 */print_game(&g,2);/*打印棋盤(pán) */NO=1;while(NO)prin tf(Please choose:);scan f(%d,%d,&i,&j);getchar();if(-1i-1 & i-1x & -1j-1 & j-1y)switch(ope nm ap(&g,i-1,j-1)case 1:prin t_game(&g,1);printf(”游戲結(jié)束!按回車(chē)鍵再來(lái)一局n);if(getchar()=n) begi n=1;else begi n=0;NO=0;break;case 2:if(j

13、udge_game(&g)=b)printf(win! n);prin t_game(&g,1);printf(按回車(chē)鍵再來(lái)一局n);/* 是否再來(lái)一局*/if(getchar()=n) beg in=1;else beg in=0;NO=0;break;else prin t_game(&g,2);NO=1;break;default:break;elseprintf(你輸入錯(cuò)誤!請(qǐng)重新輸入n);主控模塊的各子模塊說(shuō)明:void InitialValue_game()用于棋盤(pán)初始化; Ini tialMi ne_game()用于棋盤(pán)的隨機(jī)布雷; void prin t_game()用于打印棋

14、盤(pán); int judge_game() 用于判斷游戲是否結(jié)束; int openmap ()用于點(diǎn)開(kāi)地圖;5.2定義全局變量#include #include stdlib.h#i ncludetime.h# define s 20int x;/*棋盤(pán)行數(shù)*/int y;/*棋盤(pán)列數(shù)*/int b;/*選擇游戲難度1簡(jiǎn)單2普通3困難4自定義*/int h;/*雷的個(gè)數(shù)*/struct Games g;struct Gamesint game_i ntss;char game_charss;使用結(jié)構(gòu)體數(shù)組來(lái)完成棋盤(pán)的定義,引用時(shí)間頭文件來(lái)完成對(duì)隨機(jī)布雷的隨時(shí) 性。5.3各個(gè)函數(shù)的分析5.3.1棋

15、盤(pán)初始化程序:void In itialValue_game(struct Games *g) int i,j;for(i=0;ix;i+)for(j=0;jvy;j+)(*g).game_i ntij=0;(*g).game_charij=*;5.3.2隨機(jī)布雷:In itialMi ne_game(struct Games *g)int i,j, nextl, next2;int sum=0;sran d( un sig ned)time(NULL);while(1)i=ra nd()%x;j=ra nd()%y;if(*g).game_i ntij=9) con ti nue;(*g).

16、game_i ntij=9;+sum;for(n ext1=-1; next12; next1+)for(n ext2=-1; next22; next2+)& j+next2y )if( -1i+next1 &next1+ix& -1j+next2if(*g).game_i nti+next1j+nex t2!=9)(*g).game_i nti+next1j+nex t2+=1;if(sum=b) break;實(shí)現(xiàn)雷的隨機(jī)分布和各個(gè)點(diǎn)周?chē)讛?shù)的計(jì)算。srand ()隨機(jī)布雷,5.3.3打印棋盤(pán):void prin t_game(struct Games *g,i nt Logo)int i

17、,j;int as;for(i=0;ix;i+)ai=i+1;if(Logo=1)printf( %d,a0);for(i=1;ix;i+)prin tf(i10? %d : %d,ai);prin tf(nn);for(i=0;ix;i+)if(i+110)prin tf(%d ,i+1);for(j=0;jy;j+) pri ntf(%d ,(*g).game_i ntij); prin tf(n);elseprin tf(%d ,i+1);for(j=0;jy;j+) pri ntf(%d ,(*g).game_i ntij); prin tf(n);if(Logo=2)printf(

18、%d,a0);for(i=1;ix;i+)prin tf(i10? %d : %d,ai);prin tf(nn);for(i=0;ix;i+)if(i+110)prin tf(%d ,i+1);for(j=0;jvy;j+)pri ntf(%c ,(*g).game_charij); prin tf(n);elseprin tf(%d ,i+1);for(j=0;jy;j+)pri ntf(%c ,(*g).game_charij); prin tf(n);5.3.4判斷結(jié)束,點(diǎn)開(kāi)地圖:int judge_game(struct Games *g)int sum=0;int i,j;for(

19、i=0;ix;i+)for(j=0;jy;j+)if(*g).game_charij=*) sum+=1;return sum;int ope nm ap(struct Games *g,i nt i,i nt j)system(cls);int n extl, next2;if(*g).game_i ntij=9) return 1;elseif(*g).game_i ntij!=0)(*g).game_charij=(char)(*g).game_i ntij+48);return 2;else(*g).game_charij=0;for(n ext 1=-1; next12; next1

20、+)for(n ext2=-1; next22; next2+)if( -1i+next1 &next1+ix & -1j+next2 &j+n ext2y)if(*g).game_chari+next1j+next2=*)ope nm ap(g,i+next1,j+next2);return 2;點(diǎn)開(kāi)地圖,即實(shí)現(xiàn):當(dāng)輸入坐標(biāo)處為0,打開(kāi)周?chē)瑯忧闆r的坐標(biāo)點(diǎn)。即實(shí)現(xiàn)和Windows掃雷游戲同樣的功能。6.設(shè)計(jì)結(jié)果及分析運(yùn)行第一步:按ENTER鍵進(jìn)入:選擇游戲難度,按ENTER鍵進(jìn)入:游戲界面,開(kāi)始從鍵盤(pán)輸入數(shù)字,格式為(3,6),點(diǎn)擊ENTER:游戲失敗顯示,并提示再來(lái)一局,程序完畢。7.設(shè)計(jì)

21、結(jié)論本程序在剛開(kāi)始調(diào)試時(shí)有許多錯(cuò)誤,但都被一 一克服,現(xiàn)在在操作本程序時(shí)可根據(jù)提示進(jìn)行相關(guān)操作,能正確輸出結(jié)果。在剛開(kāi)始的幾次調(diào)試中曾經(jīng)出現(xiàn)過(guò)不能運(yùn)行、不能產(chǎn)生隨機(jī)數(shù)字、不會(huì)正確輸出結(jié)果、不能進(jìn)行循環(huán)等等問(wèn)題。經(jīng) 同學(xué)的幫助,這些問(wèn)題得到克服,并且使程序的功能也得到了一定的完善。在這次設(shè)計(jì)過(guò)程中,不僅復(fù)習(xí)課本上所學(xué)知識(shí), 還通過(guò)查資料、問(wèn)同學(xué)學(xué)到了課本 上沒(méi)有的知識(shí)。從而啟發(fā)我,要想寫(xiě)好程序,在寫(xiě)好課本知識(shí)的同時(shí)還需要多讀 和專業(yè)有關(guān)的一些書(shū)籍,同時(shí)還需要多動(dòng)腦子,盡量把所學(xué)的知識(shí)綜合起來(lái)應(yīng)用, 力爭(zhēng)寫(xiě)出完美的程序。除此之外,我還得到了一些有用的教訓(xùn):寫(xiě)程序時(shí)必須要細(xì)心,不能輸錯(cuò)一個(gè)字符標(biāo)點(diǎn),

22、就連全角半角也得注意。在修改時(shí)要有耐心,編 譯出錯(cuò)后必須逐個(gè)錯(cuò)誤去改正,絕不能心急浮躁,否則修改之后還會(huì)有新的錯(cuò)誤。8問(wèn)題及心得體會(huì)問(wèn)題:在本次實(shí)習(xí)過(guò)程中碰到的編譯、連接的錯(cuò)誤主要有:缺少變量定義,定義 位置不正確、語(yǔ)法錯(cuò)誤、注釋的位置等。錯(cuò)誤解決方法。(1)缺少變量定義,定義位置不正確;由于該程序相對(duì)來(lái)講稍有些長(zhǎng),前后有些變量不容易聯(lián)系起來(lái),但是在錯(cuò) 誤信息的提示下一般還是很容易找到。不過(guò)需要注意的是在定義的時(shí)候有些函 數(shù)使用同樣的變量名而表示不同的作用,因而使用要很小心,定義及定義的位 置要特別留意。為減少這樣的錯(cuò)誤我后來(lái)還是用不同的變量名來(lái)表示,結(jié)果引 起的那些錯(cuò)誤解決了(2)語(yǔ)法錯(cuò)誤;

23、大多的語(yǔ)法錯(cuò)誤在通過(guò)書(shū)本參考下能夠修改。主要是平時(shí)缺乏鍛煉、不太 注意而產(chǎn)生的。如沒(méi)有注意具體數(shù)據(jù)使用是有一定的范圍限定;過(guò)分重視分號(hào) 的重要性而在for、if、while語(yǔ)句中畫(huà)蛇添足加分號(hào);在使用文件的時(shí)候忘記將 文件先打開(kāi),對(duì)打開(kāi)的方式(3)注釋的位置;程序設(shè)計(jì)中在注釋的時(shí)候不能同我們平常寫(xiě)字一樣隨心所欲,我們應(yīng)該注 意注釋的格式。注釋中不能含有 c語(yǔ)言可執(zhí)行的語(yǔ)句!心得體會(huì)課程設(shè)計(jì)是本科學(xué)習(xí)階段一次非常難得的理論與實(shí)際相結(jié)合的機(jī)會(huì),通過(guò)這 次比較完整的一個(gè)程序的設(shè)計(jì),我擺脫了單純的理論知識(shí)學(xué)習(xí)狀態(tài), 和實(shí)際設(shè)計(jì) 的結(jié)合鍛煉了我的綜合運(yùn)用所學(xué)的基礎(chǔ)知識(shí),解決實(shí)際問(wèn)題的能力,同時(shí)也提高 我

24、查閱文獻(xiàn)資料、對(duì)程序整體的把握等其他能力水平,而且通過(guò)對(duì)整體的掌控, 對(duì)局部的取舍,以及對(duì)細(xì)節(jié)的斟酌處理, 都使我的能力得到了鍛煉,經(jīng)驗(yàn)得到了 豐富。這是我們都希望看到的也正是我們進(jìn)行課程設(shè)計(jì)的目的所在。雖然設(shè)計(jì)內(nèi)容繁多,過(guò)程繁瑣但我的收獲卻更加豐富。各種組件的運(yùn)用,各 種算法的應(yīng)用,各種控件的利用我都是隨著設(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)出更高的應(yīng)變能力和理解力。順利如期的完成本次課程設(shè)計(jì)給

25、了我很大的信心,但是也讓多不足的地方, 學(xué)習(xí)其實(shí)就是一個(gè)不斷完善的過(guò)程, 正視自己的不足之處,在以后的工作和學(xué)習(xí) 中不斷的彌補(bǔ)這些不足之處,在以后的生活中也要保持同樣的態(tài)度,不斷的完善 自己。9.對(duì)本設(shè)計(jì)過(guò)程及方法、手段的改進(jìn)建議我們認(rèn)為此程序太過(guò)簡(jiǎn)單,應(yīng)該更進(jìn)一步把掃雷界面輸出為圖型圖案。也即是能夠使用方塊,然后調(diào)用graphics.h庫(kù)函數(shù)rectangle(x,y,xx,yy)畫(huà)一格矩形,setfillstyle(SOLID_FILL,color)設(shè)置填充方式,floodfill(x+1,y+1,WHITE)填充方塊。讓方塊看起來(lái)有立體感,將矩形上方和左方的邊線設(shè)為白色,下方和右方的邊線

26、設(shè)為黑色。使掃雷界面更加美觀。再此基礎(chǔ)上增加標(biāo)記地雷的功能, 比如說(shuō)使用小紅旗,使玩家能夠跳過(guò)地雷。如果可以的話,可以考慮使用鼠標(biāo)來(lái)控制點(diǎn)擊位置,如果更好的話可以加入聲音,比如沒(méi)有點(diǎn)到雷的開(kāi)心的聲音,點(diǎn)到雷后的倒霉聲。通過(guò)老師的指導(dǎo),這個(gè)軟件的設(shè)計(jì)要更趨于人性化,也即是加入提示輸入格式,以解決輸入格式錯(cuò)誤問(wèn)題,而不是直接結(jié)束,重啟。10.參考文獻(xiàn)郭翠英主編的c語(yǔ)言課程設(shè)計(jì)實(shí)例精編; 張芳妮 呂波 譯C語(yǔ)言編程常見(jiàn)問(wèn)題解答; 譚浩強(qiáng)C程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第二版)。伍俊良.VB課程設(shè)計(jì)與系統(tǒng)開(kāi)發(fā)案例M.北京附:源程序代碼:s#i nclude #include stdlib.h# in elu

27、de time.h# define s 20int x;/*棋盤(pán)行數(shù)*/int y;/*棋盤(pán)列數(shù)*/int b;/*選擇游戲難度1簡(jiǎn)單2普通3困難4自定義*/int h;/*雷的個(gè)數(shù)*/struct Games g;struct Gamesint gamentss;char game_charss;void In itialValue_game(struct Games *g)/*棋盤(pán)初始化*/int i,j;for(i=0;ix;i+)for(j=0;jvy;j+)(*g).game_i ntij=0;(*g).game_charij=#;In itialMi ne_game(struct

28、Games *g)/*隨機(jī)布雷*/int i,j, nextl, next2;int sum=O;sran d( un sig ned)time(NULL);while(1)i=ra nd()%x;j=ra nd()%y;if(*g).game_i ntij=9) continue;(*g).game_i ntij=9;+sum;for(n ext1=-1; next12; next1+)for(n ext2=-1; next22; next2+)if( -1i+next1 & next1+ix& -1j+next2 & j+n ext2y )if(*g).game_i nti+next1j+

29、next2!=9)(*g).game_i nti+next1j+next2+=1;if(sum=b) break;void prin t_game(struct Games *g,i nt Logo)/*打印棋盤(pán)*/int i,j;int as;for(i=0;ix;i+)ai=i+1;if(Logo=1)printf( %d,aO);for(i=1;ix;i+)prin tf(i10? %d : %d,ai);prin tf(nn);for(i=0;ix;i+)if(i+110)prin tf(%d,i+1);for(j=0;jy;j+) pri ntf(%d,(*g).game_i nti

30、j);prin tf(n);elseprin tf(%d ,i+1);for(j=0;jy;j+) pri ntf(%d,(*g).game_i ntij);prin tf(n);if(Logo=2)printf( %d,a0);for(i=1;ix;i+)prin tf(i10? %d : %d,ai);prin tf(nn);for(i=0;ix;i+)if(i+110)prin tf(%d,i+1);for(j=0;jvy;j+)pri ntf(%c ,(*g).game_charij); prin tf(n);elseprin tf(%d ,i+1);for(j=0;jy;j+)pri

31、 ntf(%c ,(*g).game_charij); prin tf(n);int judge_game(struct Games *g)/*判斷游戲是否結(jié)束*/int sum=0;int i,j;for(i=0;ix;i+)for(j=0;jy;j+)if(*g).game_charij=#) sum+=1;return sum;int ope nm ap(struct Games *g,i nt i,i nt j)/*點(diǎn)開(kāi)地圖 */system(cls);int n ext1, next2;if(*g).game_i ntij=9) return 1;elseif(*g).game_i ntij!=0)(*g).game_charij=(char)(*g).game_i ntij+48);return 2;else(*g).game_charij=0;for(n ext1=-1; next12; next1+)for(n ext2=-1; next22; next2+)if( -1i+next1 & next1+ix & -1j+next2 & j+n ext2y)if(*g).game_chari+next1j+next2=#)ope nm ap(g,i+next1,j+next2);return 2;ma

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論