【正文】
這些游戲以前玩過吧,快下載看它們是怎么編寫的!目錄:編寫趣味撞球小游戲 Visual Basic小游戲:猜英雄 VB游戲?qū)懽骷记桑?)秀圖篇 VB游戲?qū)懽骷记桑?)網(wǎng)絡(luò)篇 VB 貪吃蛇 單人版游戲(一) VB 貪吃蛇 單人版游戲(二) VB 貪吃蛇 單人版游戲(三) VB 貪吃蛇 單人版游戲(四) 用VB開發(fā)即時(shí)戰(zhàn)略游戲 正文:編寫趣味撞球小游戲文章來源: 沐風(fēng)經(jīng)典 文章作者: 佚名 Visual Basic是一個(gè)功能強(qiáng)大的工具,它有一大特點(diǎn)就是易學(xué)易用,下面我們就通過寫一個(gè)“趣味撞球” 的程序來初步體會一下。 首先啟動VB5,新建一個(gè)標(biāo)準(zhǔn)的EXE工程。此時(shí)可以看到,工程包括一個(gè)Form1框體。在Form1邊框的右下角按住鼠標(biāo)左鍵不放,拖動鼠標(biāo)把Form1的面積改為適當(dāng)大小,比如69304320。再在屬性框中把Form1的ScaleMode 屬性改為3-Pixel,表明我們將以像素為我們的坐標(biāo)計(jì)算單位,把Form1的StartUpPosition 屬性設(shè)為2-CenterScreen,使運(yùn)行時(shí)窗體出現(xiàn)在屏幕正中?! ‖F(xiàn)在,在控件面板上選取CommandButton(命令按鈕)控件,為Form1添加Command1和Command2兩個(gè)按鈕控件,把它們的大小設(shè)為12125,再在屬性框中把Command1的Caption填為“&GO”,把Command2的Caption填為“&QUIT”,并把Command1放到框體的右上角,把Command2放到框體的右下角?! ∪缓螅诳丶姘迳线x取Timer(時(shí)鐘)控件,為Form1添加一個(gè)Timer1時(shí)鐘控件。再在屬性框中把它的Enabled屬性改為False,Interval屬性改為50,前一個(gè)值表示該時(shí)鐘控件是否激活,后一個(gè)值決定該時(shí)鐘控件產(chǎn)生Timer事件的間隔時(shí)間,我們將用它來控制小球的移動頻率?! 〉酱藶橹梗覀円呀?jīng)完成了全部的界面設(shè)計(jì)工作。接下來要做的全部工作就是填入程序代碼了。 Dim BallX As IntegerDim BallY As IntegerDim AddX As IntegerDim AddY As IntegerDim HitX As IntegerDim W As IntegerDim H As IntegerPrivate Sub Command1_Click()BallX=Int(Rnd(1)*)*5+25BallY=Int(()/10)*5AddX=-5AddY=-5Form_Paint=TrueEnd SubPrivate Sub Command2_Click()EndEnd SubPrivate Sub Form_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)X=X-50If X15 Then X=15If XW-105 Then X=W-105HitX=XIf =True ThenLine(16,H-5)-(W-6,H),&HC0C0C0,BFLine(HitX,H)-(HitX+100,H-5),0,BFEnd IfEnd SubPrivate Sub Form_Paint()ClsW=Int((ScaleWidth-140)/5)*5H=Int((ScaleHeight-10)/5)*5BackColor=&HC0C0C0Line(10,10)-(15,H),0,BFLine(W-5,10)-(W,H),0,BFLine(10,10)-(W,15),0,BFEnd SubPrivate Sub Timer1_Timer()(BallX,BallY),4,&HC0C0C0BallX=BallX+AddXBallY=BallY+AddY(BallX,BallY),4,0If BallX=20 Then AddX=-AddXIf BallY=20 Then AddY=-AddYIf BallX=W-10 Then AddX=-AddXIf BallY=H-10 ThenIf BallXHitX+100 Then=FalseForm_PaintEnd IfAddY=-AddYEnd IfEnd Sub 一旦程序代碼輸入完畢,你就可以按F5開始執(zhí)行它,或是在File菜單里選取Make來生成EXE執(zhí)行文件了,瞧,小球已經(jīng)在你的屏幕上蹦來蹦去了。本文來自編程入門網(wǎng)():文章來源: programfan 文章作者: yaozheng 簡單的游戲往往更耐玩,就比如伴我度過高考的賽車游戲:一切都是方塊,所謂的賽車也只是四個(gè)方塊?! 〉谝徊?,繪制對象:用函數(shù)drawcar()畫賽車,drawway(n)畫跑道的第n層?! 〉诙?,接受控制:Form的KeyPreview屬性要設(shè)為true,在Form_KeyPress函數(shù)中通過改變?nèi)肿兞縞x來控制賽車的位置?! 〉谌?,游戲循環(huán):作為即時(shí)游戲,必須要有一個(gè)Timer,并在其事件Timer1_Timer()中繪制所有對象和進(jìn)行碰撞檢測。本例中,繪圖部分寫在了Timer1_Timer()中,碰撞測試放在了test()中。 ……這也是所有即時(shí)游戲所共通的框架。當(dāng)然,我們往往還是根據(jù)具體的設(shè)計(jì)作一些變通,發(fā)揮一些技巧……比如這里設(shè)計(jì)的跑道是隨機(jī)產(chǎn)生的的,這就要通過一點(diǎn)技巧以便既讓玩家感到挑戰(zhàn),又不至于出現(xiàn)不可逾越的難關(guān)…… 下面是全部源代碼,窗體上只需放個(gè)按鈕Command1就行了!Const D = 100 39。方格的寬度Const BT = 3000 39。跑道底部的y坐標(biāo)Dim l1(22) As Integer 39。每層跑道左邊有幾個(gè)方塊Dim l2(22) As Integer 39。每層跑道右邊有幾個(gè)方塊Dim cx As Single 39。賽車的在x軸的位置Private Sub Command1_Click() cx = Width / 2 3 * D / 2 cy = Height D drawcar For i = 1 To 20 l1(i) = 0 l2(i) = 0 drawway (i) Next i = TrueEnd SubPrivate Sub drawcar() Line (cx, BT 100)Step(3 * D, D), BackColor, BF Line (cx + D, BT 200)Step(D, D), BackColor, BF 39。先擦 Line (cx, BT 100)Step(3 * D, D), RGB(225, 0, 0), BF Line (cx + D, BT 200)Step(D, D), RGB(225, 0, 0), BFEnd SubPrivate Sub drawway(n) Line (Width/23*D/22*D,BTn*D)Step(7*D,D),BackColor, BF39。先擦后畫 Line (Width/23*D/22*D,BTn*D)Step(l1(n)*D, D), ,BF Line (Width/23*D/2+5*D,BTn*D)Step(l2(n)*D,D), ,BFEnd SubPrivate Sub Form_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case Asc(a), Asc(A) cx = cx D Case Asc(s), Asc(S) cx = cx + D End SelectEnd SubPrivate Sub Timer1_Timer() Randomize For i = 1 To 19 l1(i) = l1(i + 1) l2(i) = l2(i + 1) drawway (i) Next i Do l1(20) = Int(Rnd * 5) l2(20) = Int(Rnd * 5) Loop Until ((l1(20) + l2(20) = 4) And (l1(20) l1(19) = 1) And _(l2(20) l2(19) = 1) And (l1(19) + l2(20) = 4) And _(l1(20) + l2(19) = 4)) 39。這里生成新一層跑道,39。注意要篩去玩家不可能通過的情況!drawway (20)39。以上畫出跑道 drawcar testEnd SubPrivate Sub test() If *DWidth/2+cxl1(1)*D Then =False If *DWidth/2+cx+Dl1(2)*D Then =False If *D(cx+3*DWidth/2)l2(1)*D Then =False If *D(cx+2*DWidth/2)l2(2)*D Then =FalseEnd Sub本文來自編程入門網(wǎng)():相信不少讀者都看過央視的《水滸》吧,林沖、武松、李逵等英雄好漢的音容笑貌仿佛還浮現(xiàn)在我的眼前,那么108將中你最喜歡誰呢?我做了一個(gè)小程序來讓電腦猜測你的心思,程序界面如圖所示?! 榱撕喕瘑栴},我選擇了其中的27將,將他們分成3組,每組9人。如果你最喜歡其中的一個(gè)(比如史進(jìn)),他在第一組出現(xiàn)了,那么就按下按鈕“第一組”。然后這27將會重新排列順序,你再找史進(jìn)在哪一組,比如發(fā)現(xiàn)他在第二組,就按下按鈕“第二組”,畫面中的人物次序會再次打亂,再找史進(jìn)所在組別……最多3次,電腦將會猜出你心中的英雄! 知道了玩法,下面我將介紹程序是如何實(shí)現(xiàn)的: 一、猜測的奧妙——推算原理 猜測的原理其實(shí)也不復(fù)雜,我們來模擬一下猜測的過程大家就清楚了。程序初始化時(shí)是把1~27將隨機(jī)打亂分別放入PageControl控件的三個(gè)選項(xiàng)卡中,每個(gè)選項(xiàng)卡放9張圖片。點(diǎn)擊一次按鈕后其實(shí)不是盲目地將順序打亂,而是進(jìn)行了篩選,把有用的圖片(就是點(diǎn)選的那組的9張圖片)篩選出來平均分配到PageControl控件的三個(gè)選項(xiàng)卡中,再把不需要的圖片集中起來平均分配到PageControl控件的三個(gè)選項(xiàng)卡中,最后在各個(gè)選項(xiàng)卡中把有用的、無用的圖片隨機(jī)打亂再次重新排列顯示出來,從而完成猜測。用表1來說明:點(diǎn)擊按鈕的次數(shù) 選項(xiàng)卡1 選項(xiàng)卡2 選項(xiàng)卡3 1 3 3 3 2 1 1 1 3 0 0 0 具體講,當(dāng)?shù)谝淮伟聪掳粹o時(shí),表示你相中的圖片在其中一個(gè)選項(xiàng)卡的9張圖片內(nèi)。于是把這9張圖片均分成3份,每份3張,分別送入3個(gè)選項(xiàng)卡,其余的圖片就不做考慮了。當(dāng)?shù)诙伟聪掳粹o時(shí),表示你相中的圖片在其中一個(gè)選項(xiàng)卡的3張圖片內(nèi),于是把這3張圖片均分成3份,每份1張,分別送入3個(gè)選項(xiàng)卡,當(dāng)?shù)谌伟聪掳粹o時(shí),表示你相中的圖片在其中一個(gè)選項(xiàng)卡的1張圖片內(nèi),毫無疑問,這張圖片就是你相中的圖片,于是程序把這張圖片顯示出來?! 〈騺y重排的算法 在程序中的很多地方要涉及打亂順序重排的問題,下面我們就來先簡單介紹一下打亂是如何實(shí)現(xiàn)的?! ∵@里要實(shí)現(xiàn)的方法是比較簡單的,也就是多次把數(shù)組的不同位置的值互換,就像讀小學(xué)時(shí)老師讓兩個(gè)同學(xué)互換位置一樣,老師不斷隨機(jī)抽兩個(gè)同學(xué)互換位置,最后同學(xué)們的座位就都重新排了一遍。 舉個(gè)例子:int I,temp1,temp2,a[2],b[27]for(i=1。i=27。i++)//先對數(shù)組賦初值b[i]=I。randomize()。for(i=1。i=500。i++)//i的大小決定打亂的程度,循環(huán)次數(shù)越多,打亂程度越高{temp1=random(27)+1。temp2=random(27)+1。a[1]=b[temp1]。b[temp1]=b[temp[2]。b[temp2]=a[1]。}//輸出ListBox1Clear()。for(i=1。i=27。i++)ListBox1ItemsAdd(IntToStr(b[i]))。 如上例所示,經(jīng)過打亂,b[27]數(shù)組將不再是舊時(shí)容顏?! 《?、實(shí)現(xiàn)的關(guān)鍵——篩選算法的介紹 在整個(gè)實(shí)現(xiàn)的過程中,如何在每一次打亂后對人物進(jìn)行篩選是程序的關(guān)鍵所在,處理不好,程序就不會有結(jié)果。而且篩選很容易把你攪得頭暈?zāi)X脹,所以涉及的各個(gè)數(shù)組之間的關(guān)系一定要先理順,先用一個(gè)例子來解釋如何進(jìn)行篩選。以點(diǎn)擊按鈕的次數(shù)是第一次并且點(diǎn)擊的按鈕是Button1為例加以介紹,其思路如下: 初始: 第一次執(zhí)行按鈕事件并且按下的是Button1時(shí)(表a的數(shù)組就是關(guān)鍵數(shù)組): 把表a打亂后平均拆分為3組分別送入內(nèi)存緩沖區(qū) 把表b和表c打亂后也平均拆分為3組分別送入內(nèi)存緩沖區(qū)(非重要的數(shù)組),然后將它們進(jìn)行組合,分別把有用的和無用的搭配重新組合為三張表并顯示出來: 把全部的篩選過程表述出來: : 把a(bǔ)[127]打亂并將 a[19] 賦給first[19] a[1018] 賦給second[19] a[1927] 賦給third[19] ?。僭O(shè)選中的是第二個(gè)選項(xiàng)卡) second[19]打亂后賦給temp1[13]、temp2[13]、temp3[13]