visual basic繼承了basic語言易學(xué)易用的特點,特別適合于初學(xué)者學(xué)習(xí)windows系統(tǒng)編程。隨著21世紀信息社會的到來,計算機在人們的工作和生活中的深入,要求我們越來越多地與計算機打交道,為了使用戶在繁忙的日程工作中得到放松,于是出現(xiàn)了各種各樣的休閑軟件,如聊天工具,游戲等等。于是我們小組著手設(shè)計開始一個這樣的游戲軟件。通過這學(xué)期來Visual Basic的學(xué)習(xí),我初步掌握了Visual Basic語言的最基本的知識,于是在牛榮和李鵬等老師的指導(dǎo)下動手用Visual Basic編寫俄羅斯方塊游戲。

成都創(chuàng)新互聯(lián)專注于馬龍企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城建設(shè)。馬龍網(wǎng)站建設(shè)公司,為馬龍等地區(qū)提供建站服務(wù)。全流程按需定制,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
我們之所以選擇開發(fā)俄羅斯方塊游戲,無可爭議,《俄羅斯方塊》是有史以來最偉大的游戲之一。 在曾經(jīng)發(fā)布過的所有游戲中,《俄羅斯方塊》還被認為是僅有的一個能夠真正吸引廣泛人群的作品。誰能說清楚,迄今為止人們究竟花了多少萬個小時在這個游戲上?也許這些時間本來可以被花在更具生產(chǎn)力的活動上。某些批評家也許會聲稱,《俄羅斯方塊》要比過去二十年間出現(xiàn)的任何東西都要浪費人們的時間。至于我們,則要欣然提名它為GameSpot評選出的歷史上最偉大游戲之一。
為了懷念經(jīng)典,也為了能夠給大多的計算機用戶在工作之余找到一個休閑、娛樂的一個方式,我們小組開始著手用VB語言開發(fā)一個經(jīng)典的俄羅斯方塊游戲。
工程概況
2.1 項目名稱
俄羅斯方塊游戲
2.2 設(shè)計平臺
VB 全稱Visual Basic,它是以Basic語言作為其基本語言的一種可視化編程工具。
Vb是microsoft公司于1991年退出的windows應(yīng)用程序開發(fā)工具visual意思是“可視化的”。在它剛推出來時,自身還存在一些缺陷,功能也相對少一些。但是經(jīng)過多年的開發(fā)研究。最近microsoft公司又推出了VB6.0版本
VB6.0運行環(huán)境:硬件,要求486以上的處理器、16MB以上內(nèi)存,50MB 以上的硬盤,cd-rom驅(qū)動器,鼠標。軟件:要求windows 95以上版本。
2.3程序設(shè)計思想
游戲是用來給大家娛樂的,所以要能在使用的過程中給大家?guī)砜鞓罚蠹业钠冢晕覀冊谟螒蛑刑砑恿似恋膱鼍昂蛣勇牭囊魳罚O(shè)置了過關(guān)升級的功能,激發(fā)大家的娛樂激情。
從游戲的基本玩法出發(fā),主要就是俄羅斯方塊的形狀和旋轉(zhuǎn),我們在設(shè)計中在一個圖片框中構(gòu)造了一個4*4的網(wǎng)狀小塊,由這些小塊組合成新的形狀,每四個小塊連接在一起就可以構(gòu)造出一種造型,因此我們總共設(shè)計了7中造型,每種造型又可以通過旋轉(zhuǎn)而變化出2到4種形狀,利用隨機函數(shù)在一個欲覽窗體中提前展示形狀供用戶參考,然后將展示的形狀復(fù)制到游戲窗體中進行擺放,在游戲窗體中用戶就可以使用鍵盤的方向鍵來控制方塊的運動,然后利用遞歸語句對每一行進行判斷,如果有某行的方塊是滿的,則消除這行的方塊,并且使上面的方塊自由下落,其中,方塊向下的速度是有時鐘控件控制的,在游戲中,用戶也可以使用向下鍵加快下落速度,定義一個變量,對消除的函數(shù)進行記錄,最后就可以得出用戶的分數(shù),用if 語句對分數(shù)判斷,達到一定的積分就可以升級到下一個檔次。
俄羅斯方塊游戲設(shè)計的主要步驟為以下10個方面:
(1)游戲界面的設(shè)計。
(2)俄羅斯方塊的造型。
(3)俄羅斯方塊的旋轉(zhuǎn)。
(4)俄羅斯方塊的運動情況(包括向左,向右和向下)。
(5)俄羅斯方塊的自動消行功能。
(6)游戲級別的自由選擇。
(7)游戲速度的自由選擇。
(8)游戲得分的計算。
(9)游戲菜單選項的設(shè)計及功能實現(xiàn)。
(10)游戲的背景音樂及特效。
2.4運用的控件和主要對象
我們在設(shè)計過程中主要用到的控件有:command控件,image控件,picture控件,label控件,timer控件,text控件,windows media player控件等等。
2.5主要實現(xiàn)的功能
我們開發(fā)的俄羅斯方塊游戲,主要實現(xiàn)了以下幾種功能:
1.可以靈活控制方塊在圖形框中運動。
2.游戲過程中方塊可以自由旋轉(zhuǎn)。
3.當某一行的方塊排列滿時,將自動將這一行方塊消除,然后將上面所有方塊向下移動,可以支持連續(xù)消行。
4.游戲前可以選擇游戲的速度和游戲的等級,游戲速度既為方塊下落速度,游戲等級為初始游戲時在基層隨機生成一定行數(shù)的無規(guī)律方塊,生成的行數(shù)由你來選擇,每行至少產(chǎn)生5個以上的無規(guī)律方塊,這樣增加了游戲難度,對于游戲高手來說,無疑不是一個新的挑戰(zhàn)。
5.游戲的得分支持積分,并且按照公式:
得分 = 原來分數(shù)+ 100 * (2 ^ 同時消除的行數(shù)-1)
這樣,你同一時間消除的行數(shù)越多,你的得分也就越高,當游戲積分到了一定時可以自動升級,這個升級指速度升級。
6.游戲中提供了一個漂亮的場景和動聽的音樂,給你帶來無限激情。
2.6開發(fā)人員
由于這次課程設(shè)計所選的題目太復(fù)雜,而時間又比較緊張,指導(dǎo)老師建議和同學(xué)分工完成。我們小組成員包括組長孫磊周,副組長鄒海星,此游戲由我們兩個人共同開發(fā)而成。
正文
3.1游戲設(shè)計的具體實現(xiàn)
在我們兩個人共同努力下,此次設(shè)計,終于能夠圓滿完成。由于時間的緊促,在設(shè)計中,也許會有一些考慮不周之處,但其功能已經(jīng)能夠滿足大多用戶的需求,相信假以時日,一定能做出一個更經(jīng)典,更完美的俄羅斯方塊游戲,下面我們將對每一步的具體如何實現(xiàn)展示給大家。
3.1.1游戲界面的設(shè)計和背景音樂及特效的實現(xiàn)
俄羅斯方塊游戲主要由兩個界面構(gòu)成,登陸界面和開始游戲界面,在登陸界面中我們可以首先看到圣誕節(jié)的晚上飄梅花的場景,梅花從窗體頂部做函數(shù)曲線的下落運動,在窗體中定義一個Image控件組,在通用中定義梅花X坐標變量動態(tài)數(shù)組,Y坐標變量動態(tài)數(shù)組,步距X的變量動態(tài)數(shù)組,步距Y的變量動態(tài)數(shù)組,以及振幅變量動態(tài)數(shù)組。然后在窗體form_load中可以定義梅花的數(shù)量,利用隨機函數(shù)產(chǎn)生隨機的梅花坐標,步距和振幅,Image控件在運行時候就調(diào)用梅花圖片,Image控件就可以由時鐘控件控制下落速度,可以自由調(diào)節(jié),梅花按snow(i).Left = xp(i) + am(i) * Sin(dx(i))函數(shù)在做縱向的正玄函數(shù)軌跡運動,豎直方向上為自由下落運動,,有am(i)來控制梅花的左右移動振幅。因此,我們就可以看到一個梅花在空中自由飄舞的畫面了。
背景畫面是用photoshop軟件處理的漂亮圖案,原本畫面中的動畫效果都是由Image控件制作的,還有點擊進入游戲的按鈕是由Label控件實現(xiàn)的,因為Image控件沒有置前置后功能,不能將下雪的場景體現(xiàn)完整性,所以將這些圖案全部放在背景上,不影響雪花飄落的效果,當點擊畫面的時候一樣可以進入游戲界面。
游戲的背景音樂是由一段代碼調(diào)用系統(tǒng)播放器Windows Player播放背景音樂,由于本次設(shè)計主要是針對游戲如何設(shè)計的,所以在這里就不對播放背景音樂的功能做介紹了。
3.1.2俄羅斯方塊的造型
相信朋友們都玩過俄羅斯方塊,對這個游戲的玩法和方塊形狀都比較熟悉。我們這個游戲只選擇了最基本的7中造型,包括長條型,正方型,正S型,反S型,正7型,反7型,T型。如果需要我們可以添加更多的造型。將游戲界面的游戲區(qū)圖片框分割成10*20的小塊,每個小塊放置一個command控件,預(yù)覽區(qū)圖片框按同樣比例分割成4*4的小塊,同樣有command控件構(gòu)成,我們可以把預(yù)覽區(qū)圖片框看作是從游戲區(qū)圖片框中選取的一個部分,游戲區(qū)的小方塊編號和欲覽區(qū)編號如下圖:
0 1 2 3 4 5 6 7 8 9
… … … … … … … … … …
… … … … … … … … … …
90 91 92 93 94 95 96 97 98 99
3 4 5 6
13 14 15 16
23 24 25 26
33 34 35 36
游戲區(qū)編號 欲覽區(qū)編號
利用Select將方塊的7中造型列出,比如長條型的設(shè)計,在欲覽區(qū)中分別有3.4.5.6和5.15.25.35四個方塊構(gòu)成兩中形態(tài),用數(shù)組為:
m(0) = 3: m(1) = 4: m(2) = 5: m(3) = 6: situation2 = 0
m(0) = 5: m(1) = 15: m(2) = 25: m(3) = 35: situation2 = 1
將它的形狀編號為0和1,在后面方便調(diào)用,其他的方塊造型同樣的方法。
3.1.3俄羅斯方塊的旋轉(zhuǎn)
俄羅斯方塊的旋轉(zhuǎn)主要將方塊的位置加以變換得到的,例如上述范例,長條型有兩中樣式,根據(jù)小方塊的編號變動來實現(xiàn)整個造型的旋轉(zhuǎn),比如:
If n(0) - 18 = 2 And n(3) + 9 = 198 Then
If cmdfang(n(0) - 18).Visible = False And _
cmdfang(n(1) - 9).Visible = False And _
cmdfang(n(3) + 9).Visible = False Then
hidefang 0
n(0) = n(0) - 18
n(1) = n(1) - 9
n(3) = n(3) + 9
showfang 0
situation = 1
End If
End If
方塊的造型在旋轉(zhuǎn)的時候存在一個公式,當然首先要判斷是否滿足旋轉(zhuǎn)的要求,以上是一個長條型由橫著變成豎立狀態(tài)的旋轉(zhuǎn),我們以它的造型中的第三個小方塊n(3)為中心旋轉(zhuǎn),這樣,在開始運動的時候,長條形要發(fā)生旋轉(zhuǎn)最少要運動到第三行,才能由橫著變成豎立狀態(tài),游戲區(qū)圖形框中第三行的第一個方塊的編號為20,所以長條造型的第一個小方塊的編號n(0)必須要大于20。同樣,長條型方塊在下落到底部的時候也有限制。如果長條下落到最后一行也將無法由橫著變成豎立狀態(tài)。
3.1.4如何實現(xiàn)方塊的運動和自動消除滿行的方塊
我們的這個俄羅斯方塊游戲主要是利用command控件的visible屬性完成效果的,其實在游戲區(qū)圖形框可以看成是由許多的command小方塊組成,方塊運動的過程就是造型里方塊顯示或者隱藏,就像現(xiàn)在的霓虹燈效果一樣,由時鐘控件控制visible屬性改變的速度,上一層的消失,下一層的顯示,這樣,從視覺效果可以看到方塊的下落運動效果。
方塊在下落的過程中會自動判斷每一行方塊的visible屬性,如果全部為true時,就會將這一行小方塊的visible屬性全部變成false,在將上面的小方塊向下移動,利用for語句進行循環(huán)判斷,將所有這樣情況的行改變小方塊visible屬性。當有多行同時出現(xiàn)這樣情況時使用遞歸調(diào)用,實現(xiàn)連續(xù)消行。具體程序代碼如下:
For i = 190 To 10 Step -10
If cmdfang(i).Visible = True And _
cmdfang(i + 1).Visible = True And _
cmdfang(i + 2).Visible = True And _
cmdfang(i + 3).Visible = True And _
cmdfang(i + 4).Visible = True And _
cmdfang(i + 5).Visible = True And _
cmdfang(i + 6).Visible = True And _
cmdfang(i + 7).Visible = True And _
cmdfang(i + 8).Visible = True And _
cmdfang(i + 9).Visible = True Then
For j = i + 4 To i Step -1
t = 1
cmdfang(j).Visible = False
cmdfang(2 * i + 9 - j).Visible = False
For k = 1 To 4000
DoEvents
Next
t = 0
Next
linenum = linenum + 1
For j = i - 1 To 0 Step -1
If cmdfang(j).Visible = True Then
cmdfang(j).Visible = False
cmdfang(j + 10).Visible = True
End If
Next
clearline '為了實現(xiàn)連消數(shù)行,這里使用遞歸調(diào)用
End If
Next
3.1.5游戲速度和游戲級別自由選擇
游戲速度的自由選擇無非就是改變時鐘控件的頻率,我們在菜單中添加了選擇速度的功能,還有添加了考驗功能,將欲覽窗中的方塊造型隱藏,給玩家提高了難度,如果你不愿意接受考驗也可以點擊顯示還原成原來狀態(tài)。
游戲級別的自由選擇是讓用戶選擇游戲開始時候,游戲區(qū)底部出現(xiàn)一定行數(shù)的隨機方塊,同樣給玩家增加了難度,功能代碼如下:
For i = 19 To 20 - Val(txthard.Text) Step -1
For j = i * 10 To i * 10 + 9
If Rnd = 0.5 Then cmdfang(j).Visible = True
Next
Next
可以根據(jù)你選擇的難度系數(shù)在底層的每一行隨機產(chǎn)生超過半數(shù)(即5個以上)以上的小方塊,這樣適合喜歡高難度的玩家。
3.1.6游戲得分的計算和游戲菜單的編輯
游戲得分的計算主要是根據(jù)消除的行數(shù)來決定的,當然每一次同時消除的行數(shù)不一樣,每一行的得分也不一樣,如果你每次消除的行數(shù)為1,則最后得分是100分,如果同時消除2行,則最后得分是300分,同時消除3行,得分為700分,同時消除4行,得分為1500分,這由公式:得分 = 原來分數(shù)+ 100 * (2 ^ 同時消除的行數(shù)-1)。
游戲的編輯,讀者可以參照下面的功能介紹。
3.2 游戲功能的介紹
文件-------開始:開始游戲。
繼續(xù):繼續(xù)游戲。
暫停:暫時停止游戲,點擊繼續(xù)的時候可以繼續(xù)游戲。
退出:退出游戲。
設(shè)置-------選擇游戲級別。
選擇游戲速度。
考驗-------顯示:顯示欲覽去方塊。
隱藏:隱藏欲覽去方塊。
幫助-------操作提示以及版本信息和作者資料。
用戶界面具體如圖:
圖—登陸界面 圖—游戲界面
圖—菜單編輯界面 圖—游戲幫助界面
有關(guān)說明
經(jīng)過兩個多星期的設(shè)計和開發(fā),俄羅斯方塊游戲已經(jīng)成功。其功能基本符合用戶需求,能夠完成游戲的控制,方塊的變換以及消層等功能。并提供游戲設(shè)置,對于一些技術(shù)性比較過硬的玩家,可以調(diào)游戲級別、以及游戲速度,使得玩家能夠充分的發(fā)揮競技游戲的特色,可以不斷的挑戰(zhàn)自我,挑戰(zhàn)極限。
4.1游戲設(shè)計中的不足之處
但是由于課程設(shè)計時間較短,所以該游戲還有許多不盡如人意的地方,比如方塊類型太少,退出游戲不能存儲進度等多方面問題。這些都有待進一步改善,我們在游戲中還可以更換背景音樂,以適合不同的玩家,在每通過一關(guān)可以給玩家播放一段flash,吸引玩家去挑戰(zhàn)極限,不斷提高玩家的興趣,相信在以后的制作過程中我們將給大家?guī)硪粋€更新功能更全面的游戲。
4.2VB與C語言之間的不同之處
我們這個小游戲也可以用C語言來實現(xiàn),在程序的編程上沒有VB語言方便實用,C語言和VB語言之間存在很多的共同點,雖然語法方面有點差異,但是在編程思路上完全一樣,VB能夠?qū)崿F(xiàn)很多C#不能做到的功能,如When語句、Optional參數(shù)、局部Static變量、對象實例訪問靜態(tài)方法、Handles綁定事件、On Error處理異常、Object直接后期綁定等等。VB和C#語言,編譯出來的是同樣的CIL,但為什么VB支持很多有趣的特性呢。我們一起來探究一下。
4.21局部靜態(tài)變量
VB支持用Static關(guān)鍵字聲明局部變量,這樣在過程結(jié)束的時候可以保持變量的數(shù)值:
Public Sub Test1()
Static i As Integer
i += 1 '實現(xiàn)一個過程調(diào)用計數(shù)器
End Sub
我們實現(xiàn)了一個簡單的過程計數(shù)器。每調(diào)用一次Test,計數(shù)器的數(shù)值就增加1。其實還有很多情況我們希望保持變量的數(shù)值。而C#的static是不能用在過程內(nèi)部的。因此要實現(xiàn)過程計數(shù)器,我們必須聲明一個類級別的變量。這樣做明顯不如VB好。因為無法防止其他過程修改計數(shù)器變量。這就和對象封裝一個道理,本來應(yīng)該是一個方法的局部變量,現(xiàn)在我要被迫把它獨立出來,顯然是不好的設(shè)計。那么VB是怎么生成局部靜態(tài)變量的呢?將上述代碼返匯編,我們可以清楚地看到在VB生成的CIL中,i不是作為局部變量,而是作為類的Field出現(xiàn)的: .field private specialname int32 $STATIC$Test1$2001$i
也就是說,i被改名作為一個類的字段,但被冠以specialname。在代碼中試圖訪問$STATIC$Test1$2001$i是不可能的,因為它不是一個有效的標識符。但是在IL中,將這個變量加一的代碼卻與一般的類字段完全一樣,是通過ldfld加載的。我覺得這個方法十分聰明,把靜態(tài)變量變成生命周期一樣的類字段,但是又由編譯器來控制訪問的權(quán)限,讓它成為一個局部變量。同時也解釋了VB為什么要用兩個不同的關(guān)鍵字來聲明靜態(tài)變量——Static和Shared。由于局部靜態(tài)變量的實質(zhì)是類的字段,所以它和真正的局部變量還是有所不同的。比如在多線程條件下,對局部靜態(tài)變量的訪問就和訪問字段相同。
4.2.2Handles和WithEvents
VB除了可以用C#那樣的方法來處理事件響應(yīng)以外,還有從VB5繼承下來的獨特的事件處理方式——WithEvents。
我喜歡稱這種事件處理方式為靜態(tài)的事件處理,書寫響應(yīng)事件的方法時就已經(jīng)決定該方法響應(yīng)的是哪一個事件,而C#則是在代碼中綁定事件的。VB中WithEvents靜態(tài)方法是非常有用的,它可以顯著增強代碼可讀性,同時也讓VB.net中的事件處理非常方便,不像C#那樣離開了窗體設(shè)計器就必須手工綁定事件。
4.2.3類型轉(zhuǎn)換運算符
在Visual Basic 2005中將加入一個新的運算符——TryCast,相當于C#的as運算符。我一直希望VB有這樣一個運算符。VB目前的類型轉(zhuǎn)換運算符主要有CType和DirectCast。他們的用法幾乎一樣。我詳細比較了一下這兩個運算符,得出以下結(jié)論:
1.在轉(zhuǎn)換成引用類型時,兩者沒有什么區(qū)別,都是直接調(diào)用castclass指令,除非重載了類型轉(zhuǎn)換運算符CType。DirectCast運算符是不能重載的。
2.轉(zhuǎn)換成值類型時,CType會調(diào)用VB指定的類型轉(zhuǎn)換函數(shù)(如果有的話),比如將String轉(zhuǎn)換為Int32時,就會自動調(diào)用。
4.2.4默認屬性和屬性參數(shù)
在原先的VB6里,有一項奇特的功能——默認屬性。在VB6中,對象的名稱可以直接表示該對象的默認屬性。
4.2.5可選參數(shù)和按名傳遞
VB從4.0開始支持“可選參數(shù)”這一特性。就是說,函數(shù)或子程序的參數(shù)有些是可選的,調(diào)用的時候可以不輸入。其實VB從1.0開始就有一些函數(shù)帶有可選參數(shù),只不過到了4.0才讓用戶自己開發(fā)這樣的過程。在VB4里,可選參數(shù)可以不帶默認值,而在VB里,如果使用可選參數(shù),則必須帶有默認值。在調(diào)用的時候,VB若發(fā)現(xiàn)參數(shù)被省略,則自動讀取.param部分的默認值,并顯式傳遞給過程。這一部分完全由編譯器處理,而且沒有任何性能損失,和手工傳遞所有參數(shù)是完全一樣的。至于按名傳遞,VB會自動調(diào)整參數(shù)的順序,其結(jié)果與傳統(tǒng)方式的傳遞也沒有任何的不同。這說明我們可以放心地使用這項便利。而且?guī)в锌蛇x參數(shù)的過程拿到C#中,頂多變成不可選參數(shù),也不會造成什么其他的麻煩。
PS.很多COM組件都使用了默認參數(shù),而且有些過程的參數(shù)列表非常長,在VB里可以輕松地處理它們,而在C#中經(jīng)常讓開發(fā)者傳參數(shù)傳到吐血。
4.2.6在經(jīng)過對比之后可得以下一個結(jié)論:
1.目前的主流編程語言沒有簡單的,如果你想學(xué)精通的話。
2.VB的門檻比較低,編程思想較容易接受。
3.學(xué)習(xí)C不能短期內(nèi)見到成效。
4.據(jù)用戶調(diào)查69%的考生覺得VB更容易接受
致謝
在本次課程設(shè)計中,我從指導(dǎo)老師牛榮和李鵬身上學(xué)到了很多東西。老師認真負責的工作態(tài)度,嚴謹?shù)闹螌W(xué)精神和深厚的理論水平都使我收益匪淺。他無論在理論上還是在實踐中,都給與我很大的幫助,使我得到不少的提高這對于我以后的工作和學(xué)習(xí)都有一種巨大的幫助,感謝他耐心的輔導(dǎo)。
另外,在游戲開發(fā)過程中化希耀老師和杜義君老師也給于我們很大的幫助,幫助解決了不少的難點,使得游戲能及時開發(fā)完成,還有所有的同學(xué)同樣給與我不少幫助,這里一并表示感。
參考文獻:
[1]Vsual Basic 程序設(shè)計教程 作者:龔沛曾,陸慰民,楊志強 高等教育出版社出版
[2]Vsual Basic 6.0程序設(shè)計 作者:劉新民,蔡瓊,白糠生 清華大學(xué)出版社出版
[3]80例上手 VB6 編程 作者:唐凱軍,湯惠莉 山東電子音像出版社
[4]Vsual Basic 實例教程 作者:盧毅 科學(xué)出版社出版
[5]Vsual Basic 經(jīng)典范例50講 作者:趙欣勝,亢慧娟,劉晟宏 科學(xué)出版社出版
我以前用VB6做過俄羅斯方塊。
都是自己想出來的方法。
首先,用一個Boolean 2維數(shù)組(比如10*20)表示游戲的運行場地,用Location表示。那些方塊,就在4*4的Boolean 2維數(shù)組上,用Kuai表示,如果有塊的地方是True,不然就是False,然后不同的形狀,就可以用不同的Kuai來表示。拿QQ游戲里的俄羅斯來,說我總共用了19個Kuai來表示所以的方塊。(現(xiàn)在留著草稿紙,但程序被我格式化了)。想旋轉(zhuǎn)的話,就將Kuai的值改變成另一個。
然后,游戲的運行,就是將Kuai的值賦給Location,若要移動,就改變它們的相對位置。
哦,還有,最重要的是我用了Label數(shù)組,在界面上它們分布成2維數(shù)組的樣子,若要顯示塊,就將其Visibl設(shè)為True,不然就Flase。
Public Class Form1
Dim new_p, old_p As ToolStripMenuItem '設(shè)置級別
Public interval As Integer
Public check(7, 15) As Boolean
Dim panel2(4) As Point
Dim intSquareStyle As Integer
Dim oldSquareStyle As IntegerPrivate Sub mypanel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles mypanel1.Paint
Dim i As Integer
Dim j As Integer
For i = 0 To 7
For j = 0 To 15
If check(i, j) Then
DrawSquare(i, j, mypanel1)
End If
Next
Next
End SubPrivate Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Dim intResponse As Integer
Timer1.Enabled = False
intResponse = MessageBox.Show("是否要保存應(yīng)用程序?", "俄羅斯方塊", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
If intResponse = vbYes Then
Dim i, j As Integer
WritePrivateProfileString("俄羅斯方塊", "Score", Label2.Text, Application.StartupPath "\app.ini")
For i = 0 To 7
For j = 0 To 15
WritePrivateProfileString("俄羅斯方塊", "check" CStr(i) CStr(j), IIf(check(i, j), "1", "0").ToString, Application.StartupPath "\app.ini")
Next
Next
WritePrivateProfileString("俄羅斯方塊", "jibie", old_p.Tag.ToString, Application.StartupPath "\app.ini")
For i = 0 To 3
WritePrivateProfileString("俄羅斯方塊", "NewSquares" CStr(i) "X", SquresBase.Squares(i).X.ToString, Application.StartupPath "\app.ini")
WritePrivateProfileString("俄羅斯方塊", "NewSquares" CStr(i) "Y", SquresBase.Squares(i).Y.ToString, Application.StartupPath "\app.ini")
Next i
WritePrivateProfileString("俄羅斯方塊", "symmetryX", SquresBase.symmetry.X.ToString, Application.StartupPath "\App.ini")
WritePrivateProfileString("俄羅斯方塊", "symmetryY", SquresBase.symmetry.Y.ToString, Application.StartupPath "\App.ini")
WritePrivateProfileString("俄羅斯方塊", "SquareStyle", oldSquareStyle.ToString, Application.StartupPath "\App.ini")
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
frmStart.ShowDialog()
If frmStart.newGame Then
interval = 400
Timer1.Interval = interval
old_p = 低級ToolStripMenuItem
old_p.Checked = True
Label2.Text = "0"
Else
' the score is 0
Dim i, j As Integer
Dim s As String = "10"
' GetPrivateProfileString("abc", "Score", "0", Label2.Text, 256, Application.StartupPath "\App.ini")
GetPrivateProfileString("俄羅斯方塊", "Score", "10", s, 256, Application.StartupPath "\App.ini")Label2.Text = s
For i = 0 To 7
For j = 0 To 15
GetPrivateProfileString("俄羅斯方塊", "check" CStr(i) CStr(j), "0", s, 256, Application.StartupPath "\app.ini")
check(i, j) = CBool(IIf(CInt(s) = 1, True, False))
Next
Next
buttom = mypanel1.Height()
Dim jibie As String = " "
GetPrivateProfileString("俄羅斯方塊", "jibie", "3", jibie, 256, Application.StartupPath "\App.ini")
Dim TSM As ToolStripMenuItem
For Each TSM In GameToolStripMenuItem.DropDownItems
If TSM.Tag.ToString = CInt(Trim(jibie)).ToString Then
old_p = TSM
Exit For
Else
old_p = 低級ToolStripMenuItem
End If
Next
Dim Strinterval As String = " "
GetPrivateProfileString("俄羅斯方塊", "inteval", "400", Strinterval, 256, Application.StartupPath "\App.ini")
interval = CInt(Trim(Strinterval))
Timer1.Interval = interval
If Not old_p Is 低級ToolStripMenuItem Then
低級ToolStripMenuItem.Checked = False
End If
old_p.Checked = True
'構(gòu)造方塊
newSquares = New SquresBase
Dim str As String
For i = 0 To 3
str = " "
GetPrivateProfileString("俄羅斯方塊", "NewSquares" CStr(i) "X", "2", str, 256, Application.StartupPath "\App.ini")
SquresBase.Squares(i).X = CInt(Trim(str))
str = " "
GetPrivateProfileString("俄羅斯方塊", "NewSquares" CStr(i) "Y", "0", str, 256, Application.StartupPath "\App.ini")
SquresBase.Squares(i).Y = CInt(Trim(str))
Next
str = " "
GetPrivateProfileString("俄羅斯方塊", "symmetryX", "0", str, 256, Application.StartupPath "\App.ini")
SquresBase.symmetry.X = CInt(Trim(str))
str = " "
GetPrivateProfileString("俄羅斯方塊", "symmetryY", "0", str, 256, Application.StartupPath "\App.ini")
SquresBase.symmetry.Y = CInt(Trim(str))
str = " "
GetPrivateProfileString("俄羅斯方塊", "SquareStyle", "0", str, 256, Application.StartupPath "\App.ini")
oldSquareStyle = CInt(Trim(str))
End IfEnd SubPrivate Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Timer1.Stop()
mypanel1.Focus()
newSquares.MoveDown()
Timer1.Start()
End Sub
Private Sub ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開始ToolStripMenuItem.Click, 低級ToolStripMenuItem.Click, 高級ToolStripMenuItem.Click, ToolStripMenuItem2.Click, 中級ToolStripMenuItem1.Click
Dim tempMenuItem As ToolStripMenuItem
tempMenuItem = CType(sender, ToolStripMenuItem)
Dim temp As Int32
temp = CInt(tempMenuItem.Tag)
Select Case temp
Case 0
'advance
new_p = tempMenuItem
Timer1.Interval = 100
Case 1
'normal
new_p = tempMenuItem
Timer1.Interval = 300
Case 2
'easy
new_p = tempMenuItem
Timer1.Interval = 400
Case 3
'start
Dim i, j As Integer
For j = 0 To 15
For i = 0 To 7
If check(i, j) Then
Timer1.Start()
createpanel2()
Exit Sub
End If
Next
Next
Start()
Exit Sub
Case 4
'restarted
restarted()
Exit Sub
End Select
inteval = Timer1.Interval
old_p.Checked = False
new_p.Checked = True
old_p = new_p
End SubPrivate Sub DrawSquare(ByVal x As Integer, ByVal y As Integer, ByVal panel As Panel)
Randomize()
Dim myBrush As New System.Drawing.SolidBrush(Color.AliceBlue)
Dim panelGraphics As System.Drawing.Graphics
panelGraphics = panel.CreateGraphics
panelGraphics.FillRectangle(myBrush, New Rectangle(x * IntSize, y * IntSize, IntSize, IntSize))
panelGraphics.DrawRectangle(Pens.LightBlue, New Rectangle(x * IntSize, y * IntSize, 16, 16))
panelGraphics.DrawRectangle(Pens.Blue, New Rectangle(x * IntSize + 2, y * IntSize + 2, 12, 12))
panelGraphics.DrawRectangle(Pens.DarkBlue, New Rectangle(x * IntSize + 4, y * IntSize + 4, 8, 8))
panelGraphics.FillRectangle(New System.Drawing.SolidBrush(Color.SkyBlue), New Rectangle(x * IntSize + 4, y * IntSize + 4, 8, 8))
myBrush.Dispose()
panelGraphics.Dispose()
If panel Is mypanel1 Then
check(x, y) = True
End If
End Sub
Private Sub DrawSquares(ByVal panel As Panel)
Dim i As Integer
For i = 0 To 3
DrawSquare(Squares(i).X, Squares(i).Y, panel)
Next
End Sub
新聞名稱:包含vb.net寫俄羅斯方塊的詞條
網(wǎng)站鏈接:http://chinadenli.net/article10/hjicgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站收錄、App開發(fā)、建站公司、虛擬主機
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)