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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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 "請先結束游戲 ", 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二、打飛機游戲從作一個小游戲開始指針本文從制作一個

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

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

10、own事件將被 忽略。Fight 對象的移動可通過修改 LEFT 屬性設置對象內部的左邊與窗口的左邊之間的距離位置, Top 屬性設置對象的內頂部和窗口的頂邊之間的距離來實現(xiàn)。具體實現(xiàn)代碼 :OptionExplicit PrivateCtrldownAsBooleanCTRL 鍵 PrivateSpeedAsIntegerFight 對象的移動速度 在窗口的 load 事件中加入 Fire.KeyPreview=True Fire.BorderStyle=3將窗口設為固定對話框, 不包含最大化和最小化按鈕, 不能改變尺寸。 窗口的 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、異。注意,這種方式 不能有效地識別同時按下多個按鍵,不能適應游戲的需求。 2、使用 Timer 時鐘控件繪制運動著的圖像 Timer 可以有規(guī)律地隔一段時間執(zhí)行一次代碼。其間隔的時間由 Interval 屬性設置,是一 個整數(shù),單位是毫秒既千分之一秒。執(zhí)行的代碼放置于 Timer 事件中。 目標 Home 的移動的策略不拘一格,本文給出一簡單的隨機變加速度算法。 PrivateSubTimerS_Timer IfThen50加或減速度,VB 中 rand 總是正值 homespeed=homespeed+Rnd50 Else homespeed=homespeed-Rnd50 EndIf Ho

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

14、ot.Visible=False 注釋:子彈不可見 HadShot=0命中次數(shù) MaxShot=3摧毀目標的命中次數(shù) 在窗口的 Form_KeyDown 事件中加入 IfThen目標尚沒摧毀 . 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子彈到達窗口頂端 Shot.Visible=False Else IfAnd_ >=Home.TopAnd_ +Home.WidthAnd_ >=Home.LeftAnd_ Then 注釋:子彈命中目標 Shot.Visible=False HadShot=HadShot+1后可加入聲音,與加分 EndIf EndIf . Else 注釋:可加入聲音 Home.Picture="Home2.gif"顯示摧毀后的圖象 EndIf EndSub

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

溫馨提示

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

評論

0/150

提交評論