




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
掃雷游戲的設(shè)計(jì)第1章緒論1.1課題背景及意義當(dāng)前隨著計(jì)算機(jī)的深入普及,越來(lái)越多的人有了個(gè)人電腦,人們運(yùn)用計(jì)算機(jī)完成許多重要的工作,計(jì)算機(jī)在人們的生活中變的越來(lái)越來(lái)重要。隨著計(jì)算機(jī)的應(yīng)用和發(fā)展計(jì)算機(jī)已經(jīng)不單純是一個(gè)工作工具,人們?cè)絹?lái)越重視計(jì)算機(jī)的娛樂(lè)性了,近年來(lái)游戲產(chǎn)業(yè)規(guī)模持續(xù)成長(zhǎng),全球每年游戲業(yè)總產(chǎn)值已經(jīng)突破200億美金,遠(yuǎn)遠(yuǎn)超越好萊塢電影產(chǎn)業(yè)以及音樂(lè)娛樂(lè)事業(yè),而成為目前娛樂(lè)事業(yè)的最大主流。不過(guò)游戲產(chǎn)業(yè)光鮮亮麗的背后,卻也隱含著高風(fēng)險(xiǎn)、高成本的危機(jī),顯示游戲產(chǎn)業(yè)慢慢步入“微利時(shí)代”。
目前整個(gè)游戲產(chǎn)業(yè)的運(yùn)作模式已經(jīng)跟好萊塢電影產(chǎn)業(yè)的運(yùn)作模式相同,電影產(chǎn)業(yè)有制片、發(fā)行、宣傳等分工,游戲產(chǎn)業(yè)亦同,由專(zhuān)業(yè)的游戲研發(fā)小組負(fù)責(zé)研發(fā)游戲,也有如微軟、美商藝電這類(lèi)國(guó)際級(jí)大廠負(fù)責(zé)游戲發(fā)行,甚至連“游戲制作人”也被培養(yǎng)成明星一樣成為一種招牌,如任天堂有王牌制作人宮本茂、SEGA有鈴木裕、KONAMI有小島秀夫、CAPCOM有三上真司、TECMO有板垣伴信...等,明確的游戲產(chǎn)業(yè)分工的確有助于游戲產(chǎn)業(yè)的規(guī)模發(fā)展與進(jìn)化,但也無(wú)形中讓游戲開(kāi)發(fā)成本大增。為了降低游戲開(kāi)發(fā)成本,開(kāi)發(fā)娛樂(lè)性強(qiáng)成本低的游戲就成為當(dāng)前的主要課題,在這種趨勢(shì)下各種小型的低成本的游戲軟件應(yīng)運(yùn)而生。在這其中,系統(tǒng)自帶的小游戲也占據(jù)了相當(dāng)重要的地位,與那些網(wǎng)絡(luò)游戲和3D游戲相比,它有編寫(xiě)簡(jiǎn)單容易上手等特點(diǎn),非常適合人們?cè)谕瓿晒ぷ鞯臅r(shí)候適當(dāng)?shù)膴蕵?lè)要求。這些小游戲大都是以益智和娛樂(lè)為目的,不僅給緊張工作的人們以放松,還可以讓人們的大腦得到開(kāi)發(fā)。這些小游戲包括掃雷,彈球,紙牌等等。而本課題就是掃雷游戲的設(shè)計(jì)。1.2VisualBasic發(fā)展概況在VisualBasic語(yǔ)言問(wèn)世以前,設(shè)計(jì)Windows應(yīng)用程序是一件令人痛苦的事情。程序員必須充分了解Windows系統(tǒng)的各種知識(shí),記住數(shù)以百計(jì)的各種Windows消息。而在VisualBasic出現(xiàn)以后一切似乎變得簡(jiǎn)單多了。VisualBasic把Windows的各種細(xì)節(jié)隱藏起來(lái),程序員需要做的是在表單中“畫(huà)”出需要的控件,然后為這些控件的事件編寫(xiě)代碼。與此同時(shí),VisualBasic提供了強(qiáng)大的功能,使得它足以應(yīng)付用戶的絕大部分要求。VisualBasic由于功能強(qiáng)大,簡(jiǎn)單易用而有著廣泛的用戶,現(xiàn)在全世界有500萬(wàn)用戶在使用微軟公司的VisualBasic產(chǎn)品。微軟公司以其強(qiáng)大的實(shí)力,將VisualBasic發(fā)展成當(dāng)前基于Windows平臺(tái)上最方便、最快捷的軟件開(kāi)發(fā)工具。無(wú)論是網(wǎng)絡(luò)應(yīng)用或多媒體技術(shù),還是MIS系統(tǒng)的開(kāi)發(fā),VisualBasic都運(yùn)用得游刃有余。尤其在數(shù)據(jù)庫(kù)、多媒體、商用系統(tǒng)的用戶界面以及一般應(yīng)用程序的設(shè)計(jì)等方面,VisualBasic更具有其他開(kāi)發(fā)環(huán)境所不能取代的優(yōu)越之處。正是由于VisualBasic功能強(qiáng)大、使用簡(jiǎn)單,使得它在短短的數(shù)年間從16位發(fā)展到32位,從VisualBasic1.0發(fā)展到VisualBasic6.0,直到現(xiàn)在的VisualB。何謂VisualBasic?從字面上看,“Visual”指的是開(kāi)發(fā)圖形用戶界面的方法,它不需編寫(xiě)大量的代碼來(lái)描述界面元素的外觀和位置,而只要把預(yù)先建立的對(duì)象拖放到屏幕上的某一點(diǎn)即可。這就是VisualBasic的最顯著的特點(diǎn),即可視化的編程方法。在VisualBasic的發(fā)展歷程中,微軟公司一直都在加強(qiáng)這一功能?!癇asic”指的是Beginner’sAll-purposeSymbolicInstructionCode(初學(xué)者通用符號(hào)指令代碼)的簡(jiǎn)稱(chēng),這是一種在計(jì)算機(jī)技術(shù)發(fā)展歷史上應(yīng)用最為廣泛的語(yǔ)言。VisualBasic繼承了Basic語(yǔ)言易學(xué)易用的特點(diǎn),特別適合于初學(xué)者學(xué)習(xí)Windows系統(tǒng)編程。初學(xué)者希望在Windows環(huán)境中開(kāi)發(fā)一般的應(yīng)用程序,VB無(wú)疑是最理想的。使用VB不僅可以感受到Windows帶來(lái)的最新技術(shù),新概念和新的開(kāi)發(fā)方法,而且VB是目前眾多Windows軟件開(kāi)發(fā)工具中效率最高的一個(gè)。另外VB系列產(chǎn)品得到了計(jì)算機(jī)工業(yè)界的承認(rèn),得到了許多軟件開(kāi)發(fā)商的大力支持。VB作為一個(gè)成功的軟件產(chǎn)品不僅表現(xiàn)在其本身,它對(duì)其他軟件也產(chǎn)生了一定的影響。如VisualC++,BorlandC++等均提供了對(duì)VB的支持,甚至在ORACLE的最新產(chǎn)品中也提供對(duì)VB支持,從而使其成為一種事實(shí)上的標(biāo)準(zhǔn)。VisualBasic不僅是VisualBasic編程語(yǔ)言和VisualBasic編程系統(tǒng),而且MicrosoftExcel的ApplicationsEdition,MicrosoftAccess和Windows的許多其他應(yīng)用程序都使用這一語(yǔ)言。VisualBasicScriptingEdition(VBScript)是廣泛使用的腳本語(yǔ)言,它是VisualBasic語(yǔ)言的子集。這樣,在學(xué)習(xí)VisualBasic中得到的經(jīng)驗(yàn)可應(yīng)用到所有的這些領(lǐng)域中。VisualBasic是一個(gè)功能強(qiáng)大的Windows平臺(tái)上的開(kāi)發(fā)工具,初學(xué)者只要掌握幾個(gè)關(guān)鍵詞就可以建立實(shí)用的應(yīng)用程序,專(zhuān)業(yè)人員可以用VisualBasic實(shí)現(xiàn)其他任何Windows編程語(yǔ)言的功能,從開(kāi)發(fā)個(gè)人使用的小工具,到大型企業(yè)的應(yīng)用系統(tǒng),甚至通過(guò)Internet網(wǎng)遍及全球的分布式應(yīng)用程序,都可以在VisualBasic提供的工具中各取所需。所以,VisualBasic也成為許多程序員首選的編程工具。VisualBasic之所以具有如此廣泛的用途是因?yàn)樗哂幸韵碌奶攸c(diǎn):(1)真正的面向?qū)ο缶幊蹋归_(kāi)發(fā)人員不用加入太多的代碼,加快了系統(tǒng)開(kāi)發(fā)的速度。(2)可視化的編程方法以及向?qū)У墓δ埽归_(kāi)發(fā)人員不用加入太多的代碼就可以開(kāi)發(fā)出標(biāo)準(zhǔn)的Windows程序。(3)數(shù)據(jù)訪問(wèn)的特性,允許對(duì)包括MicrosoftSQLServer和其他企業(yè)數(shù)據(jù)庫(kù)在內(nèi)的大部分?jǐn)?shù)據(jù)庫(kù)格式建立數(shù)據(jù)庫(kù)和前端應(yīng)用程序,以及可調(diào)整的服務(wù)器端部件等。(4)通過(guò)ActiveX技術(shù)可使用其他應(yīng)用程序提供的功能,例如MicrosoftWord字處理器、MicrosoftExcel電子數(shù)據(jù)表及其他Windows應(yīng)用程序,甚至可直接使用VisualBasic創(chuàng)建的應(yīng)用程序和對(duì)象。(5)Internet功能強(qiáng)大,使用戶很容易在應(yīng)用程序內(nèi)通過(guò)Internet或企業(yè)內(nèi)部網(wǎng)(Intranet)訪問(wèn)文檔和應(yīng)用程序,或者創(chuàng)建Internet服務(wù)器應(yīng)用程序。(6)已完成的應(yīng)用程序是真正的.exe文件,您可以自由發(fā)布。1.3關(guān)于本課題隨著世界經(jīng)濟(jì)的長(zhǎng)足發(fā)展和計(jì)算機(jī)技術(shù)的日益成熟,計(jì)算機(jī)被應(yīng)用到人類(lèi)活動(dòng)的各個(gè)領(lǐng)域,各種應(yīng)用軟件也相繼問(wèn)世,這其中有相當(dāng)一部分是游戲軟件。使用游戲軟件自然是為了滿足人們對(duì)娛樂(lè)性的要求,而有些軟件大都采用3D設(shè)計(jì)對(duì)系統(tǒng)配置的要求較高。在眾多游戲軟件中,也不乏一些小游戲的身影,它們對(duì)系統(tǒng)的配置要求較低。能夠滿足人們對(duì)娛樂(lè)性的需求,是人們?cè)谕瓿晒ぷ鲓蕵?lè)時(shí)候的最好選擇?,F(xiàn)在越來(lái)越多的人投入到這種小游戲的開(kāi)發(fā)當(dāng)中,它已經(jīng)成為一類(lèi)必不可少的游戲軟件。在各種操作系統(tǒng)中都附帶了一些小的游戲,而這些游戲也成為電腦用戶軟件中不可或缺的一部分。作為本系統(tǒng)的開(kāi)發(fā)工具,MicrosoftVisualBasic6.0成為首選。它具有可視化的編程界面、詳細(xì)的提示、以及完善的幫助文檔,使得軟件開(kāi)發(fā)人員感到無(wú)比的親切感。1.4本章小結(jié)本章中介紹了掃雷游戲開(kāi)發(fā)的社會(huì)背景和學(xué)術(shù)背景,闡明了開(kāi)發(fā)掃雷游戲的理論與實(shí)際意義,并深入研究了本系統(tǒng)的開(kāi)發(fā)工具M(jìn)icrosoftVisualBasic6.0。第二章掃雷游戲的總體設(shè)計(jì)2.1游戲功能簡(jiǎn)介當(dāng)前各種游戲軟件層出不窮。因?yàn)橛螒虻拈_(kāi)發(fā)成本非常大,所以游戲的開(kāi)發(fā)具有一定的風(fēng)險(xiǎn)性,但是一些小游戲的開(kāi)發(fā)具有成本小,編寫(xiě)簡(jiǎn)單的優(yōu)勢(shì),所以這些小游戲在游戲開(kāi)發(fā)中也占有一席之地。在這類(lèi)小游戲中包括益智類(lèi)游戲,它以畫(huà)面精美游戲方法簡(jiǎn)單等特點(diǎn)得到大家的認(rèn)可。成為人們?cè)诠ぷ髦嗖豢苫蛉钡暮没锇?。針?duì)真種情況我用VB編寫(xiě)了掃雷這款小游戲。下面對(duì)該游戲的功能做個(gè)簡(jiǎn)單的介紹。掃雷游戲的基本功能:點(diǎn)擊鼠標(biāo)左鍵于未知區(qū)域,如果未知區(qū)域有雷,游戲停止,顯示所有的地雷。如果沒(méi)雷,則顯示周?chē)讛?shù),如果周?chē)鷽](méi)雷,則再查看周?chē)藗€(gè)區(qū)域是否有雷直到有雷為止并顯示,這其實(shí)是一個(gè)遞歸過(guò)程。點(diǎn)擊鼠標(biāo)右鍵于未知區(qū)域,則將其置為有雷而不管是否真的有雷??蛇x擇初、中、高三級(jí)并可自定義雷數(shù)和區(qū)域大小。雷區(qū)上部左側(cè)顯示總雷數(shù)減被標(biāo)明有雷區(qū)域的數(shù)目。雷區(qū)上部中間位置顯示一按鈕用于開(kāi)局和顯示鼠標(biāo)動(dòng)作的結(jié)果。雷區(qū)上部右側(cè)顯示掃雷的時(shí)間。將雷全部掃清后,則顯示一對(duì)話框?qū)⒛愕男彰浫肱判邪?。以時(shí)間排序。2.2游戲功能模塊設(shè)計(jì)下面首先介紹一下VB編碼規(guī)范:變量變量命名不推薦采用匈牙利命名法,除非命名會(huì)和關(guān)鍵字產(chǎn)生沖突的時(shí)候,才用類(lèi)型縮寫(xiě)+變量實(shí)名的匈牙利命名法。一般情況下,變量命名應(yīng)該簡(jiǎn)單,盡量使用縮寫(xiě)。如果是一般的值類(lèi)型,如integerstring,則直接使用變量用途命名,盡量使用全名: Dimname AsString Dimcount AsInterger 對(duì)于一般的臨時(shí)性變量定義,應(yīng)該盡可能地簡(jiǎn)單,如: Dimi AsInteger Fori=0to100 NextI 如果是類(lèi)對(duì)象或自定義類(lèi)型對(duì)象,則在單一使用情況下使用類(lèi)名稱(chēng)或自定義類(lèi)型名稱(chēng)的簡(jiǎn)寫(xiě)來(lái)命名:Dimem AsEnityManager如果非單一使用,則使用類(lèi)型名稱(chēng)縮寫(xiě)為前綴,即使用匈牙利命名法:DimemRead AsEntityManagerDimemSave AsEntityManager(注意:所有前綴都全部小寫(xiě),后面的單詞首字母大寫(xiě)) 縮寫(xiě)規(guī)則如下: 如果名稱(chēng)由多個(gè)單詞組成,則取每個(gè)單詞的首字母,如EntityManager縮寫(xiě)為em,ProcedureManager縮寫(xiě)為pm。 如果名稱(chēng)由一個(gè)單詞組成,則對(duì)單詞進(jìn)行分段取首字母,如Entity縮寫(xiě)為et。 縮寫(xiě)應(yīng)該控制在3個(gè)字母以內(nèi),盡量清晰,對(duì)于接口名稱(chēng),I……中的I前綴不對(duì)縮寫(xiě)產(chǎn)生任何影響,如Ientity的名稱(chēng)應(yīng)視作Entity。 除非首字母為元音,否則應(yīng)該截取輔音做為縮寫(xiě),如TextBox控件的縮寫(xiě)前綴為txt。 范圍標(biāo)識(shí): 全局變量加前綴:’g_’ 模塊級(jí)變量加前綴:’m_’ 過(guò)程級(jí)變量不加前綴 全局變量和模塊級(jí)變量應(yīng)該盡量使用全名稱(chēng),不推薦使用縮寫(xiě),如:g_EntityManager 控件 控件命名一律使用控件類(lèi)型縮寫(xiě)+控件用途的命名方式,類(lèi)型縮寫(xiě)應(yīng)控制在3個(gè)字母以內(nèi),縮寫(xiě)規(guī)則同變量命名,以下是常用控件的類(lèi)型縮寫(xiě),應(yīng)該嚴(yán)格遵守,如果使用了新的控件,則首先應(yīng)該在小組內(nèi)協(xié)同一致其類(lèi)型名稱(chēng)縮寫(xiě)后再進(jìn)行使用。cmb Comboboxchk Checkboxcmd Commandbuttondlg Commondialogcontroldt DTPicker DropDateControlenm EnumEditBoxfra Framefrm Formgra Graphgrd EditGridMSHFlexGridFlexGridDataGridimg ImageImageListlab Labelln Linelst Listboxlv ListViewmnu Menucontrolnm NumEditBoxopt Optionbuttonpic Picturerpt Reportsbr Scrollbarshp Shapespn Spinst StatusBartb ToolBartmr Timertxt Textboxtv TreeView 函數(shù) 此處函數(shù)包括sub和function,以下這兩種過(guò)程統(tǒng)稱(chēng)為函數(shù)。 函數(shù)表示的是一個(gè)動(dòng)作,所以它的結(jié)構(gòu)應(yīng)該是動(dòng)詞+名詞,動(dòng)詞必須小寫(xiě),后面的名稱(chēng)首字母大寫(xiě),如:getMaterialCodeupdateGridreadOrder 函數(shù)命名盡量不要使用縮寫(xiě),而且它的名稱(chēng)應(yīng)該使人一目了然,能夠從名稱(chēng)就知道這個(gè)函數(shù)的功能,不要使用無(wú)意義的函數(shù)名稱(chēng),如:getCode(當(dāng)這個(gè)函數(shù)屬于Materail類(lèi)的時(shí)候,它還是有意義的),update,readData。 當(dāng)函數(shù)名稱(chēng)不足以表達(dá)其功能時(shí),使用在函數(shù)頭部加上讓調(diào)用者足夠明白的注釋。 參數(shù)的命名:參數(shù)命名的原則是全部小寫(xiě),如果參數(shù)包括兩個(gè)或以上的單詞時(shí),首單詞字母小寫(xiě),其它單詞首字母大定,如showCol、isUpdate。 常量 常量的命名應(yīng)該全部大寫(xiě),使用’_’作為單詞間的分隔符,單詞盡量使用全名稱(chēng),如: PublicConstMSG_EMPTY_ROW AsString=“有空行存在!” 解釋?zhuān)海?)對(duì)一些常用詞應(yīng)該使用簡(jiǎn)寫(xiě),如msg(2)使用Public而不是早期版本的global來(lái)聲明變量(3)對(duì)常量的聲明必須帶上類(lèi)型,如上面的AsString 屬性 屬性的命名采用首字母大寫(xiě)的原則,如ItemCountItem 類(lèi)、窗體和模塊 類(lèi)的命名使用功能名詞,不必加任何前綴和后綴,并且單詞首字母大寫(xiě),如:SystemConfig 窗體命名使用功能名詞+Form后綴,如:ListForm。但對(duì)于單據(jù)的明細(xì)窗體則統(tǒng)一使用Detail后綴替換Form 模塊命名:不必加任何前綴和后綴,直接命名 自定義控件 自定義控件的命名:名詞+Ctrl格式 定義 定義的代碼塊應(yīng)該放在一起,盡量不要在中間定義變量,變量的定義應(yīng)該頂行進(jìn)齊,不能縮進(jìn),同時(shí)要保證”As”關(guān)鍵字的對(duì)齊,如下:Dimi AsIntegerDimj AsIntegerDimem AsEntityManager 對(duì)象的定義應(yīng)該盡可能地帶上所屬的庫(kù)名稱(chēng),防止以后引起名稱(chēng)沖突,如引用了兩個(gè)Lib,每個(gè)中都包含一個(gè)stock類(lèi),如果不使用As….Lib.Stock的定義方式,則無(wú)法編譯通過(guò),為了防止以后程序擴(kuò)充和修改時(shí)引入新的庫(kù)帶來(lái)命名沖突,推薦在定義類(lèi)對(duì)象時(shí)全部加上庫(kù)標(biāo)識(shí),對(duì)于本工程的類(lèi)對(duì)象定義也要加上,如: Dimem AsObjectPersistenceLib.EntityManager 空行 空行是區(qū)分代碼塊與塊的間隔,在函數(shù)之間必須加上空行(兩行左右),而函數(shù)內(nèi)部,變量聲明塊和實(shí)現(xiàn)塊(實(shí)現(xiàn)塊指除變量聲明外的其它代碼)要使用空行來(lái)間隔(一行),實(shí)現(xiàn)塊的內(nèi)部,通過(guò)空行來(lái)標(biāo)識(shí)一個(gè)功能段,(注意:不要使用過(guò)多的空行,空行太多影響代碼閱讀!) 縮進(jìn) 縮進(jìn)必須嚴(yán)格執(zhí)行,變量聲明塊不縮進(jìn),實(shí)現(xiàn)塊必須保證全部縮進(jìn)(即不可能有實(shí)現(xiàn)塊是行首對(duì)齊的)。 對(duì)于基本的控制結(jié)構(gòu),必須要有縮進(jìn),如:IF、DO、WITH、FOR、OPEN、SELECT塊。 (注意:在任何地方,不要寫(xiě)ElseIf語(yǔ)句,轉(zhuǎn)換成IF..ELSE..ENDIF結(jié)構(gòu)) 對(duì)于過(guò)長(zhǎng)的語(yǔ)句,必須使用續(xù)行,續(xù)行位置要有明顯意義。 函數(shù)的參數(shù)如果過(guò)長(zhǎng),也應(yīng)該續(xù)行。注釋 量 注釋以盡可能少為宜,但必須要做到別人能夠通過(guò)閱讀你的代碼明白你的意思,讓調(diào)用者明白函數(shù)功能的表達(dá)優(yōu)先級(jí)原則如下:(1)通過(guò)函數(shù)名稱(chēng)表達(dá)(2)通過(guò)代碼來(lái)表達(dá)(3)通過(guò)注釋來(lái)表達(dá)由上可知,注釋是在代碼無(wú)法充分表達(dá)函數(shù)功能時(shí)才提供,注釋同樣應(yīng)該做到準(zhǔn)確簡(jiǎn)潔。 格式 注釋的格式遵循vbDocMan的寫(xiě)法,一般情況下使用vbDocMan的注釋編輯器進(jìn)行注釋編寫(xiě),對(duì)于顯而易見(jiàn)的參數(shù)或函數(shù)功能可以不加注釋。參數(shù)注釋中參數(shù)類(lèi)型可以不要。在每個(gè)代碼模塊(窗體、類(lèi)、模塊、控件)的最上面,必須寫(xiě)上代碼編寫(xiě)人(使用英文名或中文拼音縮寫(xiě))、代碼創(chuàng)建時(shí)間、代碼修改時(shí)間和修改說(shuō)明。按照上面介紹的編碼規(guī)范編寫(xiě)掃雷游戲的程序代碼,首先將游戲劃分成若干個(gè)功能模塊。根據(jù)以上對(duì)掃雷游戲的功能分析,得到如圖2-1所示的游戲功能模塊圖。掃雷游戲窗體類(lèi)模塊時(shí)間控件點(diǎn)擊笑臉鼠標(biāo)抬起掃雷游戲窗體類(lèi)模塊時(shí)間控件點(diǎn)擊笑臉鼠標(biāo)抬起鼠標(biāo)點(diǎn)擊窗體加載鼠標(biāo)雙擊函數(shù)遞歸函數(shù)重新開(kāi)始函數(shù)畫(huà)圖函數(shù)計(jì)時(shí)函數(shù)圖2-12.3本章小結(jié)本章介紹了掃雷游戲系統(tǒng)的總體設(shè)計(jì)方案,簡(jiǎn)要的說(shuō)明了掃雷游戲系統(tǒng)實(shí)現(xiàn)的功能,并以功能模塊圖的形式體現(xiàn)出來(lái)。第三章掃雷游戲的具體實(shí)現(xiàn)3.1掃雷游戲模塊的實(shí)現(xiàn)掃雷游戲的開(kāi)發(fā)主要包括兩大部分:一部分是掃雷,該部分包括判斷鼠標(biāo)左鍵點(diǎn)擊某區(qū)域該區(qū)域是否是雷,如果是雷該如何操作,如果不是雷該如何操作,鼠標(biāo)右鍵點(diǎn)擊某區(qū)域時(shí)如果判斷該區(qū)域是雷則加以標(biāo)記,如果不是雷也加以標(biāo)記,以及當(dāng)鼠標(biāo)雙擊某區(qū)域時(shí),判斷與該區(qū)域相鄰的其它8個(gè)區(qū)域是否是雷并做一個(gè)標(biāo)記。另一個(gè)部分是計(jì)時(shí),該部分完成記錄當(dāng)玩家開(kāi)始一局游戲時(shí)到一局游戲結(jié)束時(shí)所用的時(shí)間。下面首先介紹第一部分——掃雷。3.1.1掃雷游戲主窗體的創(chuàng)建啟動(dòng)VisualBasic6.0后,有兩種情況可能出現(xiàn):其中一種情況是出現(xiàn)提示創(chuàng)建工程對(duì)話框,在這個(gè)對(duì)話框內(nèi),VisualBasic6.0提供了用戶可能需要的各種類(lèi)型的應(yīng)用程序模板。如果是這種情況,選擇“標(biāo)準(zhǔn)EXE”將創(chuàng)建一個(gè)新的工程,并且在這個(gè)工程中默認(rèn)創(chuàng)建了一個(gè)標(biāo)準(zhǔn)窗體;另一種情況是不出現(xiàn)對(duì)話框,直接新建了一個(gè)默認(rèn)的工程,這個(gè)工程中也帶有一個(gè)標(biāo)準(zhǔn)窗體。在應(yīng)用VisualBasic創(chuàng)建應(yīng)用程序時(shí),將會(huì)用到工程來(lái)管理構(gòu)成應(yīng)用程序的所有不同文件。它包括跟蹤所有部件的工程文件、每個(gè)窗體的文件、每個(gè)標(biāo)準(zhǔn)模塊的文件、每個(gè)類(lèi)模塊的文件等多種文件。工程文件就是與該工程有關(guān)的全部文件和對(duì)象的清單,也是所設(shè)置的環(huán)境選項(xiàng)方面的信息。每次保存工程時(shí),這些信息都要被更新。當(dāng)完成工程的全部文件后,即可將此工程轉(zhuǎn)換成可執(zhí)行文件(.exe):從“文件”菜單中選取“生成project.exe”命令。下面介紹一下如何創(chuàng)建窗體界面:在菜單欄或工具欄上按下鼠標(biāo)右鍵,會(huì)彈出一個(gè)快捷菜單(也可使用“視圖”菜單中的“工具欄”菜單項(xiàng)),菜單上有四個(gè)菜單項(xiàng)分別對(duì)應(yīng)VisualBasic的四個(gè)工具欄,它們是“編輯”、“標(biāo)準(zhǔn)”、“窗體編輯器”和“調(diào)試”工具欄。選擇一個(gè)菜單項(xiàng)即可打開(kāi)或關(guān)閉相應(yīng)的工具欄。前面有復(fù)選標(biāo)記表示相應(yīng)的工具欄已打開(kāi)。選中窗體編輯器,編輯掃雷游戲的主窗體。主窗體如圖3-1所示:圖3-1(一)在窗體上創(chuàng)建新控件的方法1.(1)鼠標(biāo)單擊“工具箱”中的控件類(lèi)型圖標(biāo),鼠標(biāo)指針變?yōu)槭纸徊婢€形;(2)在窗體上按下鼠標(biāo)左鍵不放并拖動(dòng)一段距離,然后釋放鼠標(biāo)左鍵,鼠標(biāo)指針變?yōu)榧^形,新控件即創(chuàng)建完畢。2.(1)按住鍵盤(pán)上的Ctrl鍵不放;(2)鼠標(biāo)單擊“工具箱”中想要的控件類(lèi)型圖標(biāo),鼠標(biāo)指針變?yōu)槭纸徊婢€形;(3)在窗體上按下鼠標(biāo)左鍵不放并拖動(dòng)一段距離,然后釋放鼠標(biāo)左鍵,新控件即放置完畢,鼠標(biāo)指針仍為十字交叉線形,可以重復(fù)第(3)步驟放置多個(gè)同一類(lèi)型的新控件;(4)單擊“工具箱”左上角的箭頭形圖標(biāo),鼠標(biāo)指針還原為箭頭形。3.雙擊“工具箱”中控件類(lèi)型圖標(biāo),即在窗體中央位置新建一個(gè)該類(lèi)型的控件。4.(1)在一已有控件上單擊鼠標(biāo)左鍵,選定該控件;(2)使用“編輯”菜單中的“復(fù)制”命令、“標(biāo)準(zhǔn)”工具欄上的“復(fù)制”按鈕或Ctrl+C組合鍵將選定的控件放入系統(tǒng)剪貼板;(3)使用“編輯”菜單中的“粘貼”命令、“標(biāo)準(zhǔn)”工具欄上的“粘貼”按鈕或Ctrl+V組合鍵從剪貼板上粘貼;(4)顯示一個(gè)提問(wèn)“是否創(chuàng)建控件數(shù)組”的消息框,選擇“否”即可。多次粘貼可以生成多個(gè)控件,并且不再顯示對(duì)話框提問(wèn)。(二)調(diào)整窗體和控件的位置和大小1.在設(shè)計(jì)狀態(tài)下選擇對(duì)象的方法(1)鼠標(biāo)左鍵單擊選定單個(gè)控件。(2)按下Shift鍵或Ctrl鍵單擊鼠標(biāo)左鍵,可選擇多個(gè)控件。(3)在窗體無(wú)控件處按下鼠標(biāo)左鍵并拖動(dòng),形成一個(gè)虛線框,釋放鼠標(biāo)左鍵,可以選擇虛線框圍起的多個(gè)控件。(4)單擊窗體上無(wú)控件處,可以選擇窗體對(duì)象。2.調(diào)整窗體與控件大小和位置的方法(1)選定的窗體與控件周?chē)邪藗€(gè)選定句柄(控點(diǎn)),拖動(dòng)控件的任一句柄都可以調(diào)整其大??;拖動(dòng)窗體對(duì)象右下方三個(gè)句柄可以調(diào)整窗體的大小。(2)單擊并拖動(dòng)控件的內(nèi)部區(qū)域可以在窗體上移動(dòng)控件。(3)要調(diào)整窗體在運(yùn)行時(shí)顯示在屏幕上的位置,可以使用屬性窗口來(lái)設(shè)置其Top和Left屬性的值,也可以使用窗體布局窗口。(4)使用屬性窗口設(shè)置窗體和控件Width、Height屬性的值也可以調(diào)整其大小。(三)窗體,命令按鈕,文本框和標(biāo)簽控件的常用屬性時(shí)間和方法1.窗體(Form)屬性:Name、Caption、Left、Top、Width、Height、Moveable、Enabled、Visible、BorderStyle、Icon、ControlBox、MaxButton、MinButton、WindowState。方法:Move、Show、Hide、Print。事件:Click、DblClick、Resize、Load。2.命令按鈕(CommandButton)屬性:Name、Caption、Left、Top、Width、Height、Visible、Enabled、Default、Cancel、Value。方法:Move。事件:Click。3.文本框(TextBox)屬性:Name、Text、Left、Top、Width、Height、Visible、Enabled、MaxLength、MultiLine、ScrollBars、SelLength、SelStart、SelText、Alignment、PasswordChar、Locked、Apearance。方法:Move。事件:Click、DblClick、Change。4.標(biāo)簽(Label)屬性:Name、Caption、Left、Top、Width、Height、Visible、Enabled、BorderStyle、AutoSize、WordWrap。方法:Move。事件:Click、DblClick、Change。(四)使用屬性窗口設(shè)置對(duì)象的屬性1.首先選擇要設(shè)置屬性的對(duì)象,或者從屬性窗口頂部的組合框①中選擇對(duì)象。2.屬性窗口中列出選定對(duì)象的大部分屬性,屬性名稱(chēng)在左③,屬性的值在右④。默認(rèn)情況下,屬性是以字母順序列出的,可以使用選項(xiàng)卡②來(lái)選擇按分類(lèi)排序。使用鼠標(biāo)單擊屬性窗口中的一個(gè)屬性,屬性窗口底部⑤會(huì)顯示出關(guān)于此屬性的簡(jiǎn)要描述。使用快捷菜單中的“描述”項(xiàng)可以打開(kāi)或關(guān)閉此描述。3.設(shè)置屬性值的方法會(huì)因?qū)傩缘牟煌煌#?)直接在屬性值的位置上④輸入文字,如Caption、Name屬性等;(2)直接在屬性值位置上輸入數(shù)字,如Left、Top、Left、Height等;(3)從屬性值中進(jìn)行選擇,如BorderStyle、Visible、Enabled等;(4)鼠標(biāo)左鍵雙擊屬性名,屬性值會(huì)在幾個(gè)允許的值之間切換,如BorderStyle、Visible、Enabled等。(五)使用代碼窗口編寫(xiě)簡(jiǎn)單的事件過(guò)程1.由對(duì)象窗口轉(zhuǎn)到代碼窗口的方法有:(1)使用“工程”窗口上的“查看代碼”按鈕;(2)使用“視圖”菜單中的“代碼窗口”命令;(2)在對(duì)象窗口內(nèi)單擊鼠標(biāo)右鍵,從快捷菜單中選擇“查看代碼”命令。2.從代碼窗口頂部的“對(duì)象”組合框中選擇要編寫(xiě)事件過(guò)程的對(duì)象名,再?gòu)摹斑^(guò)程”組合框中選擇事件名,VisualBasic自動(dòng)創(chuàng)建事件過(guò)程的首尾兩條語(yǔ)句,如“PrivateSubForm_Click”和“EndSub”。3.在事件過(guò)程中添加語(yǔ)句,實(shí)現(xiàn)具體功能。如:PrivateSubForm_Click() Form1.Left=0 Form1.Top=0 Form1.Caption="你好,VisualBasic!"EndSub下面介紹一下內(nèi)部控件的常用屬性,方法和事件1.直線(Line)控件屬性:Name、X1、Y1、X2、Y2、Visible、BorderStyle、BorderWidth。2.形狀(Shape)控件屬性:Name、Left、Top、Width、Height、Visible、Shape、BorderStyle、BorderWidth、FillStyle。方法:Move。3.圖像(Image)控件屬性:Name、Left、Top、Width、Height、Visible、Enabled、BorderStyle、Picture、Stretch。方法:Move。事件:Click、DblClick。4.圖片框(PictureBox)控件屬性:Name、Left、Top、Width、Height、Visible、Enabled、BorderStyle、Picture、AutoSize、Align。方法:Move。事件:Click、DblClick、Change。5.滾動(dòng)條(HScrollBar、VScrollBar)控件屬性:Name、Left、Top、Width、Height、Visible、Enabled、Value、Min、Max、SmallChange、LargeChange。方法:Move。事件:Change、Scroll。6.框架(Frame)控件屬性:Name、Left、Top、Width、Height、Visible、Enabled、Caption、BorderStyle。方法:Move。事件:Click、DblClick。7.復(fù)選框(CheckBox)控件屬性:Name、Left、Top、Width、Height、Visible、Enabled、Caption、Style、Alignment、Value。方法:Move。事件:Click。8.單選框(OptionButton)控件屬性:Name、Left、Top、Width、Height、Visible、Enabled、Caption、Style、Alignment、Value。方法:Move。事件:Click、DblClick。9.列表框(ListBox)控件屬性:Name、Left、Top、Width、Height、Visible、Enabled、Column、ListCount、List、ListIndex、ItemData、MultiSelect、Style、SelCount、Selected、Text、Sorted、NewIndex。方法:AddItem、RemoveItem、Clear、Move。事件:Click、DblClick、Scroll。10.組合框(ComboBox)控件屬性:Name、Left、Top、Width、Height、Visible、Enabled、ListCount、List、ListIndex、ItemData、Style、Text、Sorted、SelStart、SelText、SelLength。方法:AddItem、RemoveItem、Clear、Move。事件:Change、Click、DblClick、Scroll。11.定時(shí)器(Timer)控件屬性:Name、Left、Top、Interval、Enabled。事件:Timer。3.1.2掃雷游戲窗體程序的編寫(xiě)該部分包括如下幾個(gè)函數(shù):Form_Load,F(xiàn)orm_MouseDown,F(xiàn)orm_MouseUp,Imahappy_Click,Timer1_Timer。下面我簡(jiǎn)單的介紹一下這幾個(gè)函數(shù)完成的功能Form_Load:該函數(shù)完成窗體的加載工作。Form_MouseDown:該函數(shù)判斷鼠標(biāo)左鍵點(diǎn)擊某未知區(qū)域時(shí),該未知區(qū)域是否是雷,如果是雷則游戲停止,顯示所有雷,如果沒(méi)雷,則顯示周?chē)讛?shù),如果周?chē)鷽](méi)雷,則再查看周?chē)藗€(gè)區(qū)域是否有雷直到有雷為止并顯示,這其實(shí)是一個(gè)遞歸過(guò)程。Form_MouseUp:該函數(shù)完成當(dāng)鼠標(biāo)左鍵抬起時(shí),Imahappy_Click:該函數(shù)完成當(dāng)鼠標(biāo)點(diǎn)擊窗體上方的笑臉時(shí)從新開(kāi)始游戲Timer1_Timer:該函數(shù)完成從玩家開(kāi)始游戲時(shí)到游戲停止時(shí)玩家所用的時(shí)間。窗體文件程序的原代碼如下:PrivateSubForm_Load()SetobjMine.mfrmdisplay=MeobjMine.iniEndSubPrivateSubForm_MouseDown(buttonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)Ifgameover=0ThenIfX>180AndX<7380AndY>855AndY<4695Thenstart=1objMine.BeginHitTestbutton,X,YIfbutton=1Thendouble_click=double_click+1EndIfIfbutton=2Thendouble_click=double_click+1EndIfEndIfEndIfEndSubPrivateSubForm_MouseUp(buttonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)CallobjMine.Button_upIfdouble_click=2ThenobjMine.dou_cliX,Ydouble_click=0Elsedouble_click=0EndIfEndSubPrivateSubImahappy_Click()objMine.restartEndSubPrivateSubTimer1_Timer()Ifstart=1ThenobjMine.time1,7060,270EndIfEndSub3.2掃雷游戲類(lèi)模塊部分程序的編寫(xiě)在這部分一共定義了12個(gè)函數(shù),這些函數(shù)用于窗體程序的調(diào)用,完成程序功能的具體實(shí)現(xiàn)工作。由于篇幅有限在這里不能將所有函數(shù)一一詳細(xì)介紹,下面我將列出所有的函數(shù)和每個(gè)函數(shù)所完成的具體的功能,并對(duì)其中幾個(gè)重要的函數(shù)加以詳盡的介紹。(1)PublicSubdou_cli(XAsSingle,YAsSingle)Ifarry(X,Y,4)=1ThenIf0<arry(X,Y,0)<10Thennum=arry(X,Y,0)IfY-1>=0ThenIfarry(X,Y-1,2)=1Thentemp=temp+1EndIfEndIfIfY-1>=0AndX+1<=15ThenIfarry(X+1,Y-1,2)=1Thentemp=temp+1EndIfEndIfIfX+1<=15ThenIfarry(X+1,Y,2)=1Thentemp=temp+1EndIfEndIfIfY+1<=29AndX+1<=15ThenIfarry(X+1,Y+1,2)=1Thentemp=temp+1EndIfEndIfIfY+1<=29ThenIfarry(X,Y+1,2)=1Thentemp=temp+1EndIfEndIfIfY+1<=29AndX-1>=0ThenIfarry(X-1,Y+1,2)=1Thentemp=temp+1EndIfEndIfIfX-1>=0ThenIfarry(X-1,Y,2)=1Thentemp=temp+1EndIfEndIfIfX-1>=0AndY-1>=0ThenIfarry(X-1,Y-1,2)=1Thentemp=temp+1EndIfEndIf該段程序代碼完成的具體功能如下:首先判斷某點(diǎn)是否是雷,如果是雷則將該點(diǎn)相鄰8個(gè)點(diǎn)的雷數(shù)值付給num。然后判斷該點(diǎn)左側(cè)相鄰的點(diǎn)是否超出窗體點(diǎn)擊范圍,如果沒(méi)有則判斷左側(cè)相鄰的點(diǎn)是否是旗(注:旗標(biāo)明該點(diǎn)為雷)如果是旗則將temp+1付值給temp,temp的初值為0。按照該方法依次對(duì)該點(diǎn)相鄰的8個(gè)點(diǎn)進(jìn)行判斷,最后判斷temp=num是否成立,如果成立則可以完成鼠標(biāo)左右鍵同時(shí)點(diǎn)擊的功能將周?chē)?個(gè)點(diǎn)都打開(kāi)。(2)PublicSubini()該函數(shù)完成游戲的部雷工作,并計(jì)算每一個(gè)點(diǎn)相鄰區(qū)域的雷的個(gè)數(shù),將這個(gè)數(shù)記錄并存儲(chǔ)于三維數(shù)組arry(i,j,0)中。(3)PublicSubrestart()mfrmdisplay.PaintPicturemfrmdisplay.Picture,0,0s=0n=0m=0l=0f_minenum=99mine.gameover=0mine.start=0Fori=0To15Forj=0To29Fork=0To4arry(i,j,k)=0NextkNextjNextiCalliniEndSub該函數(shù)的功能如下:當(dāng)鼠標(biāo)點(diǎn)擊窗體上方的笑臉時(shí)重新開(kāi)始游戲。(4)PublicSubButton_up()mine.Imahappy.Visible=TrueEndSub該函數(shù)的功能如下:(5)PublicSubBeginHitTest該函數(shù)的功能如下:(6)PrivateFunctiondigui(XAsInteger,YAsInteger)arry(X,Y,1)=1IfY-1>=0ThenIfarry(X,Y-1,0)=0Andarry(X,Y-1,1)=0Thenmfrmdisplay.PaintPicturemfrmdisplay.Picture0,(Y-1)*240+180,X*240+855Calldigui(X,Y-1)EndIfCallpaint(1,X,Y-1)EndIf該函數(shù)功能如下:判斷某個(gè)點(diǎn)的相鄰8個(gè)點(diǎn)是否是雷,如果是雷則調(diào)用一個(gè)函數(shù)用一個(gè)圖片覆蓋這個(gè)區(qū)域,如果不是雷也調(diào)用一個(gè)函數(shù)用另一個(gè)圖片覆蓋這個(gè)區(qū)域。由于代碼比較長(zhǎng)下面只列出一部分。其余的7個(gè)點(diǎn)也是按照這個(gè)方法依次進(jìn)行判斷,再此不在贅述。(7)PrivateSubpaint(sAsInteger,XAsInteger,YAsInteger)Ifs=1Thenarry(X,Y,4)=1EndIfIfarry(X,Y,0)=1Thenmfrmdisplay.PaintPicturemfrmdisplay.Picture1,Y*240+180,X*240+855EndIfIfarry(X,Y,0)=2Thenmfrmdisplay.PaintPicturemfrmdisplay.Picture2,Y*240+180,X*240+855EndIfIfarry(X,Y,0)=3Thenmfrmdisplay.PaintPicturemfrmdisplay.Picture3,Y*240+180,X*240+855EndIfIfarry(X,Y,0)=4Thenmfrmdisplay.PaintPicturemfrmdisplay.Picture4,Y*240+180,X*240+855EndIfIfarry(X,Y,0)=5Thenmfrmdisplay.PaintPicturemfrmdisplay.Picture5,Y*240+180,X*240+855EndIfIfarry(X,Y,0)=6Thenmfrmdisplay.PaintPicturemfrmdisplay.Picture6,Y*240+180,X*240+855EndIfIfarry(X,Y,0)=7Thenmfrmdisplay.PaintPicturemfrmdisplay.Picture7,Y*240+180,X*240+855EndIfIfarry(X,Y,0)=8Thenmfrmdisplay.PaintPicturemfrmdisplay.Picture8,Y*240+180,X*240+855EndIfIfarry(X,Y,0)=100Thenmfrmdisplay.PaintPicturemfrmdisplay.mine,Y*240+180,X*240+855EndIfEndSub該函數(shù)判斷如果點(diǎn)擊的某區(qū)域如果不是雷,它的相鄰區(qū)域的8個(gè)點(diǎn)有1個(gè)雷則覆蓋一個(gè)相應(yīng)的圖片,如果有兩個(gè)雷則覆蓋一個(gè)相應(yīng)的圖片,依次類(lèi)推一共是8種情況,如果是雷則覆蓋一個(gè)與之對(duì)應(yīng)的圖片。(8)PublicSubfall()DimiAsIntegerDimjAsIntegermine.start=0mine.gameover=1Fori=0To15Forj=0To29Ifarry(i,j,0)=100Thenmfrmdisplay.PaintPicturemfrmdisplay.mine,j*240+180,i*240+855
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度冷鏈物流中心廠房使用權(quán)轉(zhuǎn)讓合同
- 2025年度蔬菜種植基地與旅游觀光農(nóng)業(yè)融合合同
- 二零二五年度電子信息產(chǎn)品價(jià)格保密及市場(chǎng)調(diào)研合同
- 2025年度男方婚內(nèi)忠誠(chéng)保障執(zhí)行合同
- 二零二五年度事業(yè)單位聘用合同崗位職責(zé)評(píng)估與員工培訓(xùn)體系
- 二零二五年度地下車(chē)庫(kù)車(chē)位使用權(quán)轉(zhuǎn)讓及租賃管理合同
- 2025年度民營(yíng)企業(yè)員工勞動(dòng)保護(hù)及發(fā)展合同
- 幼師實(shí)習(xí)協(xié)議-2025年度實(shí)習(xí)實(shí)訓(xùn)基地合作協(xié)議
- 二零二五年度電子商務(wù)代發(fā)貨與個(gè)性化物流解決方案協(xié)議
- 二零二五年度個(gè)體店面轉(zhuǎn)讓及稅收籌劃合作協(xié)議
- 電網(wǎng)工程設(shè)備材料信息參考價(jià)(2024年第四季度)
- 2024年浙江省中考社會(huì)試卷真題(含標(biāo)準(zhǔn)答案及評(píng)分標(biāo)準(zhǔn))
- 20以內(nèi)退位減法口算練習(xí)題100題30套(共3000題)
- 易制毒化學(xué)品安全教育培訓(xùn)《教育培訓(xùn)記錄表》
- 精神病學(xué)簡(jiǎn)答題
- 2023年鄂爾多斯生態(tài)環(huán)境職業(yè)學(xué)院?jiǎn)握锌荚嚸嬖囶}庫(kù)及答案解析
- Q∕SY 01004-2016 氣田水回注技術(shù)規(guī)范
- 氣管支氣管結(jié)核診斷和治療指南
- 高中臨界生沖刺一本培養(yǎng)方案
- 供應(yīng)商社會(huì)準(zhǔn)則符合性自審問(wèn)卷
- 城鎮(zhèn)燃?xì)饧映艏夹g(shù)規(guī)程CJJ T148
評(píng)論
0/150
提交評(píng)論