【文章內(nèi)容簡介】
........................................................................4 .......................................................................................5 .....................................................................................................11 ...............................................................................................................16 ...............................................................................................................17 附錄...........................................................................................................................17在計算機(jī)逐步滲入社會生活各個層面的今天,計算機(jī)已經(jīng)成為人們?nèi)粘I畹囊环郑絹碓蕉嗟娜耸褂糜嬎銠C(jī)辦公、娛樂等等。掃雷游戲是Windows操作系統(tǒng)自帶的一款小游戲,在過去的幾年里,Windows操作系統(tǒng)歷經(jīng)數(shù)次換代更新,變得越來越龐大、復(fù)雜,功能也越來越強(qiáng)大,但是這款小游戲依然保持原來的容貌,可見這款小游戲受到越來越多人的喜愛。我利用Cfree編寫了與它功能相仿的挖地雷游戲,寓學(xué)于樂。即:設(shè)計一個功能與Windows中的挖雷游戲相同的小游戲。1.培養(yǎng)學(xué)生綜合運用所學(xué)知識獨立完成課題的能力。2.試學(xué)生更深入地理解和掌握該課程中的有關(guān)基本概念,程序設(shè)計思想和方法。3.提高對工作認(rèn)真負(fù)責(zé)、一絲不茍,對同學(xué)團(tuán)結(jié)友愛,協(xié)作攻關(guān)的基本素質(zhì)。4.培養(yǎng)勇于探索、嚴(yán)謹(jǐn)推理、實事求是、有錯必改,用實踐來檢驗理論,全方位考慮問題等科學(xué)技術(shù)人員應(yīng)具有的素質(zhì)。5.培養(yǎng)從資料文獻(xiàn)、科學(xué)實驗中獲得知識的能力,提高從別人經(jīng)驗中找到解決問題的新途徑的悟性,初步培養(yǎng)工程意識和創(chuàng)新能力。6.對掌握知識的深度、運用理論去處理問題的能力、實驗?zāi)芰?、課程設(shè)計能力、書面及口頭表達(dá)能力進(jìn)行考核游戲區(qū)包括雷區(qū)、地雷計數(shù)器(位于左上角,記錄剩余地雷數(shù))和計時器(位于 右上角,記錄游戲時間),確定大小的矩形雷區(qū)中隨機(jī)布置一定數(shù)量的地雷(初級為9*9個方塊10個雷,中級為16*16個方塊40個雷,高級為16*30個方塊99個雷,自定義級別可以自己設(shè)定雷區(qū)大小和雷數(shù),但是雷區(qū)大小不能超過24*30),玩家需要盡快找出雷區(qū)中的所有不是地雷的方塊,而不許踩到地雷。游戲的基本操作包括左鍵單擊(Left Click)、右鍵單擊(Right Click)、雙擊(Chording)三種。其中左鍵用于打開安全的格子,推進(jìn)游戲進(jìn)度;右鍵用于標(biāo)記地雷,以輔助判斷,或為接下來的雙擊做準(zhǔn)備;雙擊在一個數(shù)字周圍的地雷標(biāo)記完時,相當(dāng)于對數(shù)字周圍未打開的方塊均進(jìn)行一次左鍵單擊操作:左鍵單擊:在判斷出不是雷的方塊上按下左鍵,可以打開該方塊。如果方塊上出現(xiàn)數(shù)字,則該數(shù)字表示其周圍33區(qū)域中的地雷數(shù)(一般為8個格子,對于邊塊為5個格子,對于角塊為3個格子。所以掃雷中最大的數(shù)字為8);如果方塊上為空(相當(dāng)于0),則可以遞歸地打開與空相鄰的方塊;如果不幸觸雷,則游戲結(jié)束。雙擊:同時按下左鍵和右鍵完成雙擊。當(dāng)雙擊位置周圍已標(biāo)記雷數(shù)等于該位置數(shù)字時操作有效,相當(dāng)于對該數(shù)字周圍未打開的方塊均進(jìn)行一次左鍵單擊操作。地雷未標(biāo)記完全時使用雙擊無效。若數(shù)字周圍有標(biāo)錯的地雷,則游戲結(jié)束,標(biāo)錯的地雷上會顯示一個“ ”(見下圖)掃雷的設(shè)計原理: 掃雷游戲分為幾個步驟: 第一步,使用二維數(shù)組表示地圖; 第二步,隨機(jī)生成幾個地雷;第三步,點擊方格的反應(yīng),計算每個非雷區(qū)方格點開后的數(shù)字; 第四步,當(dāng)方格數(shù)字為0的情況; 第五步,當(dāng)方格為地雷的情況。第一步地圖的大小和第二步地雷的數(shù)量都應(yīng)該是程序中給定的,或者玩家輸入的。這個是多少自己決定吧。第三步,計算非雷區(qū)方格點開后的數(shù)字就把這個方格在二維數(shù)組中周圍八個方向的方格是否是地雷都檢查一遍,一定要注意不要越出數(shù)組邊界。這個數(shù)字可以在游戲初始化時全都計算好,也可以在玩家點擊的時候再計算。點 擊非雷區(qū)方格,顯示數(shù)字,這個方格標(biāo)記為“已點過”。第四步,當(dāng)方格數(shù)字為0時,這里要用到遞歸調(diào)用,就是讓程序自動“點擊”這個數(shù)字為0方格周圍的八個方格,然后再看結(jié)果,如果不是0,就停止,如果是0,依然遞歸調(diào)用,直到?jīng)]有0為止,或者直到點遍所有方格為止,一定要注意不要越出數(shù)組邊界。第五步,很簡單,宣布玩家死亡就可以了。查閱相關(guān)資料,了解掃雷的的玩法,了解掃雷的設(shè)計思想方法。借鑒他人寫過的程序,從中找到突破口。從程序中了解需要的各種函數(shù)準(zhǔn)備,再進(jìn)一步獲悉該函數(shù)的功能與使用方法。對自己要設(shè)計的挖地雷游戲進(jìn)行功能分析,大致如下:總體游戲過程分析:在屏幕上顯示一個游戲界面,雷區(qū)范圍內(nèi)預(yù)先埋設(shè)了一定數(shù)量的隨機(jī)分布的地雷(用數(shù)字9代替地雷);玩家通過從鍵盤中輸入(行數(shù)X,列數(shù)Y)↙進(jìn)行點擊;若能點中所有非雷區(qū),則游戲勝利;否則踩雷,游戲失敗。簡易版掃雷游戲要具備以下功能:1)開局:首先選擇游戲等級,然后生成不同等級的雷區(qū)界面。游戲等級分 為三級:各等級行列數(shù)為———:簡單:10普通:151困難:2020;雷區(qū)每個*號下面或埋藏有1個地雷,或者沒有地雷;2)挖雷:從鍵盤中輸入(行數(shù)X,列數(shù)Y),并按回車鍵,可挖開它;若所揭方塊下有9,則踩雷,此時所有含地雷的塊都出現(xiàn)9,該局游戲失敗;如果方塊上出現(xiàn)數(shù)字,它代表 在它周圍的8個方塊中共有多少顆地雷;3)輸入:通過鍵盤輸入相關(guān)指示信息; 4)輸出:提示游戲失敗,是否繼續(xù)再來一遍;、方法 ,寫出主程序的基本框架,確定各子模塊名字和參數(shù)。具體的函數(shù)流程如圖53 所示:定義使用到的常數(shù)、全局變量、函數(shù)原型說明。然后初始化圖形系統(tǒng),調(diào)用游戲控制函數(shù),游戲只接受鍵盤,通過鼠標(biāo)結(jié)束游戲,關(guān)閉系統(tǒng),退出游戲。主控模塊的各子模塊說明:void InitialValue_game()用于棋盤初始化; InitialMine_game()用于棋盤的隨機(jī)布雷; void print_game()用于打印棋盤; int judge_game()用于判斷游戲是否結(jié)束; int openmap()用于點開地圖;include include “” include“” define s 20 int x。/*棋盤行數(shù)*/ int y。/*棋盤列數(shù)*/ int b。/*選擇游戲難度 1簡單2普通3困難4 自定義*/ int h。/*雷的個數(shù)*/ struct Games g。struct Games { int game_int[s][s]。char game_char[s][s]。}。使用結(jié)構(gòu)體數(shù)組來完成棋盤的定義,引用時間頭文件來完成對隨機(jī)布雷的隨時性。void InitialValue_game(struct Games *g){ int i,j。for(i=0。iInitialMine_game(struct Games *g){ 5 int i,j,next1,next2。int sum=0。srand((unsigned)time(NULL))。while(1){ i=rand()%x。j=rand()%y。if((*g).game_int[i][j]==9)continue。(*g).game_int[i][j]=9。++sum。for(next1=1。next1void print_game(struct Games *g,int Logo){ int i,j。int a[s]。for(i=0。iint judge_game(struct Games *g){ int sum=0。int i,j。for(i=0。i運行第一步:按ENTER鍵進(jìn)入: 11選擇游戲難度(簡單、普通、困難、任意),按ENTER鍵進(jìn)入: 簡單難度: 普通難度:困難難度:任意難度:游戲界面,開始從鍵盤輸入數(shù)字,格式為(行數(shù)X,列數(shù)Y),點擊Enter鍵:游戲結(jié)束頁面: 一學(xué)期結(jié)束了,對C語言也有了一些認(rèn)識,不過自我感覺學(xué)得不太好,好在還是學(xué)到