推箱子VB課程設(shè)計說明書_第1頁
推箱子VB課程設(shè)計說明書_第2頁
推箱子VB課程設(shè)計說明書_第3頁
推箱子VB課程設(shè)計說明書_第4頁
推箱子VB課程設(shè)計說明書_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第1章課程設(shè)計目的與要求 11.1課程設(shè)計目的1.1.2課程設(shè)計的實驗環(huán)境 1.1.3課程設(shè)計的預備知識1.1.4課程設(shè)計要求1.第2章課程設(shè)計內(nèi)容2.2.1游戲介紹2.2.2游戲設(shè)計2.2.3游戲?qū)崿F(xiàn)1.2第3章課程設(shè)計總結(jié)1.4參考文獻1.6第1章 課程設(shè)計目的與要求1.1課程設(shè)計目的本課程的課程設(shè)計實際是學生學習完可視化編程技術(shù)課程后,進行的一次全面 的綜合訓練,其目的在于加深對可視化編程技術(shù)基本知識的理解,掌握運用VB開發(fā)應用程序的基本方法及基本技巧。1.2課程設(shè)計的實驗環(huán)境硬件要求能運行 Windows 9.X操作系統(tǒng)的微機系統(tǒng)。軟件:Microsoft Visual Basic 6

2、.01.3課程設(shè)計的預備知識熟悉Visual Basic 6.0程序設(shè)計的基本語法知識及常用技巧。1.4課程設(shè)計要求按課程設(shè)計指導書提供的課題,每個小組設(shè)計一個完整的小游戲應用程序。要求根 據(jù)規(guī)定設(shè)計游戲的具體要求,按照應用程序的設(shè)計步驟和VB的基本知識應用程序的分析與實現(xiàn)。應根據(jù)后面給出的基本學時分配合理安排設(shè)計時間,并獨立完成各方面的設(shè) 計。選擇同一題目的同學,可以共同協(xié)作完成一個應用程序的開發(fā)任務。要求書寫詳細 的設(shè)計說明書,對有復雜的代碼段和程序段的部分,應畫出程序流程圖,寫出全部的代 碼。在界面設(shè)計中,需畫出每個窗體的布局,進行屬性說明,杜絕雷同。11第2章課程設(shè)計內(nèi)容2.1游戲介紹

3、2.1.1游戲規(guī)則游戲要求:游戲開始時自動進入第一關(guān),狀態(tài)欄里顯示操作提示??梢酝ㄟ^方向鍵 控制小人的移動,按空格鍵重新開始本關(guān),或者用回車鍵、翻頁鍵選擇其他關(guān);當按下 <Esc>鍵時退出本游戲。在移動過程中,如果前方是一個箱子,并且箱子的前面沒有墻或 其他箱子阻擋,那么就可以把它向前推動一格。游戲的任務是把所有的箱子都推到標記 處。2.1.2游戲說明游戲的意圖是要求玩家推動箱子完成三個箱子任務,左右鍵用于走動,SHIFT鍵用于推動箱子,CONTROL于跳,SHIFT和CONTROL推動箱子一起跳,若游戲失敗可重新 開始游戲。2.2游戲設(shè)計2.2.1界面設(shè)計圖2-1界面設(shè)計2.2.

4、2屬性設(shè)置Forml(map.frm)屬性值:控件名屬性值Form1.FormHscroll1.HScrollBarPictrue1.PictureBoxLabel2.LabelNameForm1Hscroll1Picture1Label2BackColor&H8000000F&&H8000000F&&H8000000F&Capti onMe nace Map editorLeftValue1VisibleTrueTrueTrueTruefrmBlt(BLT.FRM)屬性值:控件名frmBlt.FormTimer1.timer屬性值Namefrm

5、BltTimer1BackColor&H8000000F&Capti onMen aceEn abledTrueFalseIn terbal100Splash(splash.frm)屬性值:控件名Comma ma ndButtonl magel .Im ageLabell.labelSplash.Form屬性值NameComma nd1ImagelLabellsplashAppeara nee1-3D1-3D1-3D1-3DCapti onPlay MenaceThe left and right arrows walk men ace.Men aceVisibleTrueTr

6、ueTrueTrueCan celFalseBorderStyle0-No ne0-No ne2-Sizable圖2-2屬性設(shè)置2.2.3編程思路及代碼游戲思路:使用棋盤法設(shè)計推箱子游戲“棋盤”游戲的種類豐富,俄羅斯方塊, 推箱子,象棋,五子棋 等等這些都可 以歸類到“棋盤”游戲中來。面對這類游戲設(shè)計的時候,我本人的見解是首先對“棋盤” 做研究,實在不行再去研究“棋子”。換句話說,就是以游戲中的活動區(qū)域為研究對象, 像象棋就是他的棋盤,俄羅斯方塊就是他整個的方塊的活動區(qū)域。我們這里姑且就把他 叫做“棋盤法”。“棋盤法”基本實現(xiàn)方法“棋盤法”實現(xiàn)起來其實很簡單,一般來說就是把棋盤看作一個網(wǎng)格,那

7、么我們就 把他看作與之對應的二維數(shù)組。然后適當組織數(shù)據(jù)結(jié)構(gòu)去抽象旗子,制定規(guī) 則,這樣就很容易實現(xiàn)游戲?!捌灞P法”的優(yōu)缺點任何一個算法或思想都是有優(yōu)缺點的,而我們的“棋盤法”的最大優(yōu)點就是可以方 便我們組織數(shù)據(jù)結(jié)構(gòu),簡化了游戲規(guī)則的編寫,使我們編程時思路比較清晰直觀,通常 就是直接根據(jù)游戲?qū)嶋H規(guī)則編寫就可以了,這個我們會以實例加以說明。然而他最大的 缺點就是可能耗費大量內(nèi)存,試想,如果我們的棋盤規(guī)格很大,那我們就得開辟一個比 較大的二維數(shù)組,并且如果你要將代碼移植到單片機,ARM等硬件平臺上。那你就不得不 考慮自己的方法問題,在這些硬件平臺上內(nèi)存資源是極其寶貴的。也許有朋友會說那在 PC機上總

8、可以的。的確現(xiàn)在P(機資源豐富,功能強大,可有時候還是不能如你所愿。一 個很經(jīng)典的例子就是五子棋的人工智能,為了讓五子棋在人機對戰(zhàn)中具備攻防兼?zhèn)涞闹?能,我們只有開辟一個于棋盤規(guī)格相呼應的二維的樹組來記錄棋盤上各點的勝算幾率,(有興趣的朋友可以到網(wǎng)上去找找資料)這樣的話,在DO下你就只能開辟一個約10X10 的棋盤,即使在WINDOWS也只能大約16 X 16的棋盤。(當然,這里是說直接開辟數(shù)組, 采用特別技術(shù)的不算)。所以說,這個“棋盤法”也是有他自己的限制的。游戲代碼:Form1(map.frm)代碼:Private Declare Fun ction CreateCompatibleDC

9、 Lib "gdi32" (ByVai hdc As Long) As LongPrivate Declare Function DeleteDC Lib "gdi32" (ByVai hdc As Long) As LongPrivate Declare Function DeleteObject Lib "gdi32" (ByVai hObject As Long) As Long Private Declare Function GetObject Lib "gdi32" Alias "GetObj

10、ectA" (ByVal hObject As Long, ByVal nCount As Lon g, lpObject As Any) As LongPrivate Declare Fun ction SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As LongPrivate Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function

11、Loadimage Lib "user32" Alias "LoadlmageA" (ByVal hlnstAs Long, ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 AsLong, ByVal un2 As Long) As LongPrivate Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x AsLong, ByVal y As Long, ByVa

12、l nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal n SrcWidth As Long, ByVal n SrcHeight As Long, ByVal dwRop As Long) As LongPrivate Declare Function ShowCursor Lib "user32" (ByVai bShow As Long) As LongConst ResolutionX = 640Const

13、 Resolutio nY = 480Dim dd As DirectDraw2Dim ddsdFro nt As DDSURFACEDESCDim ddsFr ont As DirectDrawSurface2Dim ddsBack As DirectDrawSurface2Dim aDDS As DirectDrawSurface2Dim tDDS As DirectDrawSurface2Dim ddCaps As DDSCAPSDim fx As DDBLTFXDim spn x%(40), spny %(40), spn w%(40), spn h%(40), spn ox%(40)

14、, spn oy%(40)Dimmode% , anim% , animshift% , bname$(30) , bcells%(30) , bchar%(30, 30), bxo%(30, 30) , byo%(30, 30) , blockx%(30) , blocky%(30) , blockcell%(30), blockmode%(30) , blockcount% , level%Dim map (40, 6) As In tegerDim mapl%, mapv%Private Function CreateDDSFromBitmap(ddAs DirectDraw2, ByV

15、al strFile As String)As DirectDrawSurface2Dim hbm As LongDim bm As BITMAPDim ddsd As DDSURFACEDESCDim dds As DirectDrawSurface2Dim hdcImage , mhdc , clr As Longhbm = LoadImage(ByVal 0&, strFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION)GetObject hbm, Len( bm), bmWith ddsd.dwSize

16、 = Len( ddsd).dwFlags = DDSD_CAPS Or DDSD_HEIGHT Or DDSD_WIDTH.DDSCAPS.dwCaps = DDSCAPS_OFFSCREENPLAIN.dwWidth = bm.bmWidth.dwHeight = bm.bmHeightPrivate Sub Form_Load()Dim a%, g$, bi%mapv% = 0mode% = 3anim% = 1ShowCursor 0DirectDrawCreate ByVai 0&, dd, Nothi ngdd.SetCooperativeLevel Me.hw nd, D

17、DSCL_EXCLUSIVE Or DDSCL_FULLSCREENdd.SetDisplayMode ResolutionX, ResolutionY, 8, 0, 0Set aDDS = CreateDDSFromBitmap(dd, App.Path & "me nace.BMP")Set tDDS = CreateDDSFromBitmap(dd, App.Path & "tiles.BMP")With ddsdFro nt.dwSize = Len( ddsdFro nt).dwFlags = DDSD_CAPS Or DDSD

18、_BACKBUFFERCOUNT.DDSCAPS.dwCaps = DDSCAPS_PRIMARYSURFAOE DDSCAPS_FLIP OrDDSCAPS_COMPLEX Or DDSCAPS_SYSTEMMEMORY.dwBackBufferCou nt = 1End Withdd.CreateSurface ddsdFr ont, ddsFr ont, Noth ingddCaps.dwCaps = DDSCAPS_BACKBUFFERddsFr on t.GetAttachedSurface ddCaps, ddsBackOpen App.Path & "me na

19、ce.spr" For Ran dom As #1 Len = 2For a% = 0 To 39Get #1, a% * 6 + 1, sp nox%(a% + 1)Get #1, a% * 6 + 2, sp noy%(a% + 1)Get #1, a% * 6 + 3, spn x%(a% + 1)Get #1, a% * 6 + 4, spn y%(a% + 1)Get #1, a% * 6 + 5, spn w%(a% + 1)Get #1, a% * 6 + 6, spn h%(a% + 1)Private Sub DrawNextFrame()Dim a%, b%, x

20、x%, ofx%, sp%, cbx%, cby%Dim t As RECTWith fx.dwSize = Len(fx).dwFillColor = RGB(0, 0, 0)End Witht.Top = 0t丄 eft = 0t.bottom = Resolutio nYt.Right = ResolutionXddsBack.Blt t, Noth ing, t, DDBLT_COLORFILL, fxofx% = map l% 60For a% = 0 To 11If a% + ofx% >= 0 And a% + ofx% <= 39 The nFor b% = 6 T

21、o 1 Step -1drawblock map(a% + ofx%, b% - 1), a% * 60 - (map l% Mod 60), b% * 60NextEnd IfNextFor a% = 1 To 30If blockmode%(a%) > 0 The n 'someth ing to dodrawblock blockcell%(a%), (blockx%(a%) - mapl%) - 300, blocky%(a%)Select Case blockmode%(a%)Case 1,2If blockmode%(a%) = 1 The n blockx%(a%)

22、 = blockx%(a%) - 6 Elseblockx%(a%) = blockx%(a%) + 6If blockx%(a%) Mod 60 = 0 ThenIfblockmode%(a%)= 1 Then cbx%= (blockx%(a%) - 235) 60 Elsecbx% = (blockx%(a%) - 355) 60cby% = (blocky%(a%) - 10) 60blockmode%(a%) = 3 'fallcheckabove cbx%, cby%End IfCase 3If map(blockx%(a%) - 300) 60, (blocky%(a%)

23、 + 10) 60) = 0 The nblocky%(a%) = blocky%(a%) + 10Elsemap(blockx%(a%) - 300) 60, (blocky%(a%) - 5) 60) = blockcell%(a%)blockmode%(a%) = 0checkforgroupEnd IfEnd SelectEnd IfNextSelect Case mode%Case 1,2Case 3, 4an im% = anim% + 1If anim% > bcells%(mode%) Then anim% = 1If map(mapl% + 300) 60, (mapv

24、% + 10) 60) = 0 And map(mapl% +355) 60, (mapv% + 10) 60) = 0 The nmapv% = mapv% + 10ElseIf mode% = 3 The n mode% = 6 Else mode% = 8End IfIf mapv% > 350 Thenmapv% = 350If mode% = 3 The n mode% = 6 Else mode% = 8End IfCase 5, 7 'jump left or rightan im% = anim% + 1If an im% > bcells%(mode%)

25、The nIf mode% = 5 The n mode% = 3 Else mode% = 4 anim% = 1ElseIf an im% <= 15 The nIf mode% = 5 Then 'leftIf map (m apl% + 300) 60, (map v% - 60) 60) = 0 mapl% = mapl% + bxo%(mode%, ani m%)Elsemode% = 3: anim% = 1If ani mshift% The n startmove 1Private Sub Timer1_Timer()Timer1.E nabled = 0Whi

26、le Not binendDrawNextFrameu = DoEve ntsWendSet aDDS = Nothi ngSet tDDS = Nothi ngdd.FlipToGDISurfacedd.RestoreDisplayModedd.SetCooperativeLevel 0, DDSCL_NORMALSet ddsBack = Nothi ngSet ddsFr ont = Nothi ngSet dd = Noth ingShowCursor 1Un load frmBItEnd SubIf t.Top >= 0 The nIf xx% < 0 Thent.Lef

27、t = t.Left + Abs(xx%)xx% = 0End IfIf xx% > 560 The nt.Right = t.Right - (xx% - 560)End IftDDS, t,If t.Right > t.Left The n ddsBack.BItFast xx%, yy%,DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAITEnd IfEnd SubIf Not flag% ThenFor b% = 0 To 5ct% = 0: cc% = 0For a% = 0 To 39If map (a%, b%) > 3 The nIf

28、 map (a%, b%) <> cc% The n ct% = 0cc% = map(a%, b%)ct% = ct% + 1NextSelect Case mode%Case 1,2Case 3, 4an im% = anim% + 1If anim% > bcells%(mode%) Then anim% = 1mapv% = mapv% + 10Else12NextEnd IfEnd Sub2.3游戲?qū)崿F(xiàn)2.3.1程序調(diào)試及測試程序調(diào)試:令利Ii.nl a.L.J itttMHDn: .TH m 懵用 m Uqi 出昨雹r*a»11口 iu腫E K I- _

29、"HIM 口 mrsl EA” hnmolbCTEQ rns4 Z rret 0 fr«B4>. >1LT FlPi 匕 nd-Mh ijiiLLWi h4:.上£ da«丄I 卒 bai l-.pl.fa. r-«圖2-3程序調(diào)試測試:n cb匸 I-. a口管° TibJCTI AFrmiii iBrlM-a Fhh-i& 3airi miJ Ld* 農(nóng)<1A:%: !:S=:Jbit LmqiLm«k-K'. At L-mml ft»<-:-w m L"e.

30、Ltftj»n 補 mo'* Ln Whjn-i hL Lbk:I >Li Lanfl嚴:112'寧;"11>'<*=沽墳聖:<11:>' IpvIl 憂”粉'詁碣3絲滋霜曲廠”"”'“-I: JK:朋:£囁帕 ;加“丁凱 jgp 4 KBEJF11 Eahilalmni Br«rrfa圖2-4測試182.3.2游戲運行圖2-5游戲運行玩家即可進入游戲。第3章課程設(shè)計總結(jié)我的課程設(shè)計內(nèi)容是設(shè)計游戲一一推箱子。 在這次課程設(shè)計中,我運用了 VB所學的 知識,并且能夠較熟

31、練的使用一些編程語句?;仡櫰鸫舜握n程設(shè)計,至今我們?nèi)杂泻芏喔杏|。的確,自從拿到題目到完成整個編 程過程,從理論到實踐,在這整整半個學期的日子里,學到過很多很多的東西,在做這 個課程設(shè)計時,不僅可以鞏固了以前所學過的知識,而且還學到了很多在書本上沒有學 到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知 識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中到應用,才能真 正提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到不少的問題,可以說得是困難重重,這畢竟新做的,難免會遇 到各種各樣的問題。同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對一些前面學過的知 識理解得不夠深刻,掌握得不夠牢固。通過這次課程設(shè)計之后,我們把前面所學過的知 識又重新溫故了一遍。其中有很多編程問題,起初,我不知道從什么地方入手,后來,慢慢的進入了狀態(tài)。 我們組做的是一個推箱子的設(shè)計,內(nèi)容包括很多,所以我們組員改為分工合作,經(jīng)過一 星期的努力

溫馨提示

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

評論

0/150

提交評論