vb小游戲制作_第1頁
vb小游戲制作_第2頁
vb小游戲制作_第3頁
vb小游戲制作_第4頁
vb小游戲制作_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Vb 制作小游戲 一、射擊游戲Option ExplicitDim RandX As SingleDim RandY As SingleDim Score As SingleDim Thisscore As SingleDim Average As SingleDim Shot As IntegerDim Appear As BooleanDim Distance As SinglePrivate Sub Command1_Click( Timer1.Enabled = TrueCommand3.Enabled = TrueIf Command1.Enabled = True Then Com

2、mand3.Caption = "暫停 "End IfCommand4.Enabled = TrueEnd SubPrivate Sub Command2_Click(If Command4.Enabled = True ThenMsgBox "請先結(jié)束游戲 ", 48, "警告 "ElseEndEnd IfEnd SubPrivate Sub Command3_Click( Command1.Enabled = False Command3.Caption = "繼續(xù) " Timer1.Enabled = Not

3、 Timer1.Enabled If Timer1.Enabled = True Then Command3.Caption = "暫停 "End IfEnd SubLabel1.Caption = "射擊:" Label2.Caption = "平均得分:" Label3.Caption = "環(huán)數(shù):" Label4.Caption = "總分:" Command4.Enabled = FalseCommand3.Caption = "暫停 "End SubPrivate

4、Sub Form_Load(Appear = FalseTimer1.Enabled = FalseThisscore = 0Score = 0Shot = 0End SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single BeepShot = Shot + 1Picture1.DrawWidth = 4Picture1.PSet (X, Y, RGB(255, 0, 0Distance = Sqr(X - RandX * (X - RandX + (Y -

5、RandY * (Y - RandYIf Appear And Timer1.Enabled ThenThisscore = 5 - Int(Distance / 10If Thisscore <= 0 ThenThisscore = 0End IfScore = Score + ThisscoreAverage = Int(Score / Shot * 100 / 100Label1.Caption = "射擊:" + Str(Shot + "發(fā) "Label2.Caption = "平均得分:" & Format(A

6、verage, "0.00" & "環(huán) " Label3.Caption = "環(huán)數(shù):" + Str(Thisscore + "環(huán) " Label4.Caption = "總分:" + Str(Score + "環(huán) "End IfEnd SubPrivate Sub Timer1_Timer(Dim i As IntegerAppear = Appear Xor TrueRandX = 500 * Rnd(RandY = 370 * Rnd(If Appear The

7、nForm1.Picture1.AutoRedraw = TruePicture1.DrawWidth = 1Picture1.DrawStyle = 0For i = 10 To 50 Step 10Picture1.Circle (RandX, RandY, i, RGB(0, 0, 255Next iPicture1.Line (RandX - 60, RandY-(RandX + 60, RandY Picture1.Line (RandX, RandY - 60-(RandX, RandY + 60 ElseEnd IfEnd Sub二、打飛機(jī)游戲從作一個(gè)小游戲開始指針本文從制作一個(gè)

8、簡單的小游戲開始,通過擴(kuò)展這游戲,講解 VB 多媒體,鍵盤控制與一些相 關(guān)技術(shù)。這是個(gè)類似打飛機(jī)的游戲,運(yùn)行界面見圖。圖 1這個(gè)游戲程式包括下列對象:Table11、操作對象 Fight 的鍵盤控制:VB 中的窗口鍵盤控制可使用 Form_KeyUp(松開與 Form_KepDown(窗口按下事件,其語 法是:PrivateSubForm_KeyUpPrivateSubForm_KeyDownKeyCode 參數(shù)是返回所按鍵的 ASCII 代碼。 在 VB 中可使用其預(yù)定義的常數(shù)來替代這些 ASCII 代碼,如 vbKeyLeft 即指左箭頭鍵的 ASCII 值 37。Shift 參數(shù)是在響應(yīng)

9、 SHIFT , CTRL 和 ALT 鍵的狀態(tài)的一個(gè)整數(shù), 分別對應(yīng)于值 1、 2和 4,即 二進(jìn)制得 1, 10, 100。如果 SHIFT 、 CTRL 和 ALT 這三個(gè)鍵都被按下,則 Shift 的值為 7(二 進(jìn)制 111。 同理如果 CTRL 和 ALT 這兩個(gè)鍵都被按下,則 Shift 的值為 6。可對其進(jìn)行位屏 蔽,即二進(jìn)制的特定位的與運(yùn)算來確定相應(yīng)的鍵是否按下。如判斷 CTRL 鍵其語法為 ShiftAND2(可用預(yù)定義的 vbCtrlMask 常數(shù)替代是否為真。注意,當(dāng)窗口的 KeyPreview 屬性被設(shè)置為 False 時(shí), Form_KeyUp、 Form_KepD

10、own事件將被 忽略。Fight 對象的移動(dòng)可通過修改 LEFT 屬性設(shè)置對象內(nèi)部的左邊與窗口的左邊之間的距離位置, Top 屬性設(shè)置對象的內(nèi)頂部和窗口的頂邊之間的距離來實(shí)現(xiàn)。具體實(shí)現(xiàn)代碼 :OptionExplicit PrivateCtrldownAsBooleanCTRL 鍵 PrivateSpeedAsIntegerFight 對象的移動(dòng)速度 在窗口的 load 事件中加入 Fire.KeyPreview=True Fire.BorderStyle=3將窗口設(shè)為固定對話框, 不包含最大化和最小化按鈕, 不能改變尺寸。 窗口的 Form_keydown 事件包括. PrivateSubF

11、orm_KeyDown CtrlDown=判斷 CTRL 鍵,用于加速 IfThen Speed=80高速 Else Speed=40低速 EndIf SelectCaseKeyCode CasevbKeyLeft 注釋:左鍵 IfThen Fight.Left=Fight.Left-Speed EndIf CasevbKeyRight右鍵 IfThenFight 對象的右邊緣不能超越窗口的右邊緣 Fight.Left=Fight.Left+Speed EndIf EndSelect EndSub 亦可使用 VB 針對控件的 Object_KeyDown,Object_KeyUp 事件,大同小

12、異。注意,這種方式 不能有效地識(shí)別同時(shí)按下多個(gè)按鍵,不能適應(yīng)游戲的需求。 2、使用 Timer 時(shí)鐘控件繪制運(yùn)動(dòng)著的圖像 Timer 可以有規(guī)律地隔一段時(shí)間執(zhí)行一次代碼。其間隔的時(shí)間由 Interval 屬性設(shè)置,是一 個(gè)整數(shù),單位是毫秒既千分之一秒。執(zhí)行的代碼放置于 Timer 事件中。 目標(biāo) Home 的移動(dòng)的策略不拘一格,本文給出一簡單的隨機(jī)變加速度算法。 PrivateSubTimerS_Timer IfThen50加或減速度,VB 中 rand 總是正值 homespeed=homespeed+Rnd50 Else homespeed=homespeed-Rnd50 EndIf Ho

13、me.Left=Home.Left+homespeed IfThen 注釋:如目標(biāo)右邊緣小于窗口左邊緣 Home.Left=Fire.Width目標(biāo)在窗口的右邊出現(xiàn) EndIf IfThen如目標(biāo)左邊緣小于窗口右邊緣 Home.Left=-Home.Width目標(biāo)在窗口的左邊出現(xiàn) EndIf EndSub 目標(biāo) Home 的移動(dòng)的策略還可引入 Fight 對象的位置和速度的參數(shù),實(shí)際上,目標(biāo) Home 與 Fight 對象的移動(dòng)可以是二維的,只要修改其 Top 屬性就可實(shí)現(xiàn),此類游戲耐玩的關(guān)鍵在于 其移動(dòng)的策略,讀者不妨自行定義一策略看看。 3、子彈的實(shí)現(xiàn) 在窗口的 Load 事件中加入 Sh

14、ot.Visible=False 注釋:子彈不可見 HadShot=0命中次數(shù) MaxShot=3摧毀目標(biāo)的命中次數(shù) 在窗口的 Form_KeyDown 事件中加入 IfThen目標(biāo)尚沒摧毀 . CasevbKeySpace IfThen 注釋:發(fā)射子彈,后可加入聲音,與減分 Shot.Left=Fight.Left+/2定位于 Fight 的正中 Shot.Top=Fight.Top-Shot.Height定位于 Fight 的上方 Shot.Visible=True子彈可見 EndIf . EndIf EndSub 在 TimerS 的 Timer 事件中加入 PrivateSubTime

15、rS_Timer IfThen IfThen子彈已發(fā)射 Shot.Top=shot.Top-100 EndIf IfThen子彈到達(dá)窗口頂端 Shot.Visible=False Else IfAnd_ >=Home.TopAnd_ +Home.WidthAnd_ >=Home.LeftAnd_ Then 注釋:子彈命中目標(biāo) Shot.Visible=False HadShot=HadShot+1后可加入聲音,與加分 EndIf EndIf . Else 注釋:可加入聲音 Home.Picture="Home2.gif"顯示摧毀后的圖象 EndIf EndSub

16、 敵目標(biāo)發(fā)射子彈的方式基本相同,此代碼還可擴(kuò)展至若干發(fā)子彈,不再熬訴。 4、加入多媒體特征 可使用 API 函數(shù) mciExecute 實(shí)現(xiàn)多功能,語法為,先聲明 PrivateDeclareFunctionmciExecuteLib"winmm.dll"AsLong 然后在欲播放時(shí)加入下語句即可 x=mciExecute 還可使用 Multimedia、MediaPlayerMediaPlayer 多媒體控件,以 Multimedia 控件為例:在 欲播放時(shí)加入下語句 WithMultimedia 控件名 .Filename="欲播放的多媒體文件" .command="Open" .command="Play" EndWith 并在 Multimedia 控件名的

溫馨提示

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

評(píng)論

0/150

提交評(píng)論