


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、推箱子設計報告書推箱子游戲設計使用說明書一、項目背景本實訓要求對“推箱子游戲”進行分析、設計及編程實現(xiàn)。本實訓對實訓項目已經(jīng)作了較為詳細的分析及相關知識講解,通過實訓,促使專業(yè)技 能得到綜合訓練,讓我們了解軟件開發(fā)基本技術和工作過程。同時,本實訓中了解圖形界 面設計基本技術。通過本系統(tǒng)的開發(fā),要了解軟件開發(fā)的整個過程,掌握軟件開發(fā)的基本方法,提前培 養(yǎng)從事軟件行業(yè)應具備的基本素質和能力,為以后的學習作一個鋪墊。二、需求分析:經(jīng)典的推箱子是一個來自日本的古老游戲,目的是在訓練人的邏輯思考能力。在一 個狹小的倉庫中,要求把木箱從開始位置推放到指定的位置。在倉庫有障礙物,稍不小心 就會出現(xiàn)箱子無法移
2、動或者通道被堵住的情況,而且箱子只能推,不能拉,所以需要巧妙 的利用有限的空間和通道,合理安排移動的次序和位置,才能順利的完成任務。本游戲一 共4關,由易到難。開始,移動,重新開始,選擇關卡,上一關,下一關,退出七個過程。(1初始化包括屏幕初始化和每一關卡的初始化(2)保存沒一關的地圖(3)需要時讀取所需要的地圖(4)下載入新的地圖(5)繪制地圖快(6)確認退出,保存提示(7)按鍵處理包括移動小人和移動箱子, 通過移動上下左右或 ASDV®來控制小人的移動, 從而推動箱子,以把箱子推到指定的目的地為過關。(8)每一關都可以重置。(9)記錄走的步數(shù),創(chuàng)建文件,記錄每關的最好成績。(10
3、)整個畫面刷新三、目的、意義和研究現(xiàn)狀分析1、目的、意義本次課程設計的重要目的及任務就是將平時所學應用到具體設計中,能夠熟練的應用學習中的各種方法。重在提高自身的 vb編程能力。2、研究現(xiàn)狀分析1. 系統(tǒng)結構的總體設計決定系統(tǒng)的總體結構,包括整個系統(tǒng)分哪些部分,各部分之間有什么聯(lián)系以及已確定 的需求對這些組成部分如何分配等方面。1)初始化模塊該模塊包括屏幕初始化和游戲每一關的初始化。屏幕初始化用于輸出歡迎信息和操作提 示,游戲每一關的初始化是構建每一關的關卡。2 ) 圖畫模塊。該模塊主要是被其他模塊調用,用于畫墻、在空地畫箱子、在目的地畫箱子、畫小人和 畫目的地。3 )移動箱子模塊該模塊用于移
4、動箱子,包括目的地之間、空地之間和目的地與空地之間的箱子移動4 )移動小人模塊該模塊用于控制小人移動,從而推動箱子到目的地。5)功能控制模塊該模塊是幾個功能函數(shù)的集合,包括屏幕輸出功能、指定位置狀態(tài)判斷功能和關卡重置 功能。2. 詳細設計對各功能模塊的功能定義,說明模塊之間的調用關系與接口(參數(shù))3. 編碼及調試根據(jù)詳細設計的要求,按照統(tǒng)一的要求和編碼規(guī)范,用vb語言編碼實現(xiàn),同時負責每個模塊的獨立調試。4 最終效果髭 A芮alIMiH INN (1 « -> W¥'ffii JI j+in a IH禪山 IBq'ivr> m t>a#-
5、si - E)D咄岡A a1方向醜-移動1空格-盍新開始丨回車-遠擇一關1Fftge Vp -上關F輻g Do -下關|E列-退出 J產(chǎn)推箱子第1關匚岡v2R冊和ElS TA-Ji 耐W罰* Ml-麗;冃眄和B* »* J 蟲口 - T H 1 % Qrwcf 也甘氏上 f- 才林!«國oj|Hri曇-rnJm 凹;口£、芒jkA P 3 6 J- H n a t3記 A + .-S三""R*>l口 左上Uln i<x4i.lri 叮 u-iA I-Gil A-l.hijpl lir-n. £ li.it | IJt 1
6、直« .afrii.iY-r O-sH命庫世翠非卡設計器度圧帝助第孕pg育的櫻忙都二酉握二、后I號留工直力衣關 朋起旃便善.謹格rlMW空一方P動圖團地一 一45出 穩(wěn)選竝豺上舌逅在整個的游戲實現(xiàn)過程中,主要有七個模塊,開始,移動,重新開始,選擇關卡,上 下一關,退出七個過程在具體實現(xiàn)的時候主要問題有,按鍵的處理問題,在各種情況下,下一步分別是什么 圖片;還有在撤銷的時候,需要對上一步進行判斷,在進行恢復退步。選關的時候需要定義臨時變量來傳遞玩家所選擇的關數(shù)。五、主要開發(fā)環(huán)境與工具、技術路線和解決方案課程設計的實驗環(huán)境軟件:Microsoft Visual Studio 2005課程
7、設計的預備知識熟悉Visual Basic .net 程序設計的基本語法知識及常用技巧。六、系統(tǒng)分析與設計流程圖七、系統(tǒng)編碼Option ExplicitEnd SubOption Explicit 'API函數(shù)聲明Private Declare Function BitBlt Lib "gdi32" (ByVai hDestDC As Long, ByVai X AsLong, ByVai Y As Long, ByVai nWidth As Long, ByVai nH eight As Long, ByVai hSrcDC As Long, ByVai xSr
8、c As Long, ByVai ySrc As Long, ByVai dwRop As Long) As Long'全局常量Private Co nst MAXX As In teger = 20Private Co nst MAXY As In teger = 15Private Const SIZE As Integer = 302Private Const D_LEFT As In teger = 1Private Co nst D_RIGHT As In teger = 0Private Const D_UP As In teger = 2鼠標小人X軸定位 鼠標小人丫軸定位
9、 制定小人大小控制小人向左運動 控制小人向右運動 控制小人向上運動 控制小人向下運動Private Co nst D_DOWN As In teger = 3Private Co nst B_GROUND As In teger = &H0 Private Const B_DESTPrivate Const B_BOXPrivate Const B_WALLPrivate Const B BACKAs In teger = &H1As In teger = &H2As In teger = &H4As In teger = &H8'定義空白
10、9;定義小人 '定義盒子 '定義墻'定義背景'全局變量'private指只在只在推箱子的窗口可用Private Map(MAXX, MAXY) As Integer'定義地圖的大小Private Seen esCo unt As In teger, CurrSee ne As In tegerPrivate BoxCo unt As In teger, Completed As In tegerPrivate X As In teger, Y As In teger, Dir As In tegerPrivate FileNum As In te
11、ger'定義場景和當前場景'定義當前的位置Private MapLoading As Boolean'定義地圖下載為邏輯變量Private Playing As Boolean'定義為邏輯變量'游戲開始Private Sub Form_Load()Playing = False'游戲開始MapLoading = False '地圖下載InitGame'定義一個過程名End Sub'游戲初始化Private Sub Ini tGame()'定義一個過程名'一個整型函數(shù),把文件賦給一個變量,下一個OPEN可以供
12、文件FileNum = FreeFile使用的文件序號Ope n "Map.dat" For Bin ary Access Read As FileNum 開'文件以二進制形式記錄打See nesCou nt = LOF(FileNum) / SIZE'文件尾函數(shù)/每關地圖長度If SeenesCount = 0 Then'如果輸出的場景為錯,則輸出沒有可用的地圖文件或文件格式出錯,""請把可用的Map.dat文件和游戲放在同一目錄。"文件讀取錯誤MsgBox "沒有可用的地圖文件或文件格式出錯,"&
13、amp; vbCrLf & _"請把可用的Map.dat文件和游戲放在同一目錄。",vbOKOnly Or vbExelamation,"文件讀取錯誤"EndEnd IfIILoadMap 1'地圖下載成功Playi ng = True '玩游戲End Sub'讀取關卡數(shù)據(jù)Private Fun cti on LoadMap(Sce ne As In teger) As Boolea nIf MapLoading Then Exit Function'系統(tǒng)推出功能If Sce ne < 1 Or Sce ne
14、 > Sce nesCo unt Then LoadMap = False Exit FunctionEnd If'如果場景是1或當前場景MapLoadi ng = True'加載失敗'則退出功能'地圖下載正確II'顯示推箱子在第幾關CurrSce ne = Sce ne Cap tio n ="推箱子'運行當前場景第"& CurrSce ne & "關BoxCou nt = 0: Completed = 0Dir = 0'定義方向鍵'選擇場景加一Dim Data As Byte
15、Get FileNum, (CurrScene - 1) * SIZE + 1, Data X = Data'x方向的數(shù)據(jù)Get FileNum, , DataY = Data'Y方向的數(shù)據(jù)Dim i As Long, j As LongFor i = 0 To MAXY - 1For j = 0 To MAXX - 1Get FileNum, , DataMap(j, i) = Data'定義地圖的大小If Map(j, i) And B_DEST The n BoxCo unt = BoxCo unt + 1 NextNextDrawMapLoadMap = Tru
16、eMapLoadi ng = FalseEnd Fun cti on '選擇關卡Private Sub SelectMap()'選擇關卡Dim Temp As In tegerTemp = Val(InputBox("請輸入關數(shù)(1 "& Trim(ScenesCount) & ")"," 選擇一關",1)If Temp >= 1 And Temp <= SeenesCount Then CurrScene = Temp '女口果 temp>=1并且 <=當前場景那么就選
17、擇此為當前場景LoadMap TempEnd Sub '顯示整個游戲畫面Private Sub DrawMap()Dim i As Long, j As LongFor i = 0 To MAXY - 1顯示游戲畫面的大小For j = 0 To MAXX - 1 DrawBox j, i, Map (j, i)NextNextDrawMa n X, YpicMai n.RefreshEnd Sub '顯示背景塊(包括地面、墻、箱子等)Private Sub DrawBox(ByVal X As In teger, ByVal Y As In teger, ByVal BoxT
18、ype As In teger)Dim Offset As In tegerSelect Case BoxTypeCase B_BACKOffset = 0'背景Case B GROUNDOffset = 1Case B_DESTOffset = 2空白處的背景顯示目標圖片Case B_BOX'顯示盒子Offset = 3Case B_WALLOffset = 4End Select顯示墻BitBlt picMai n.hDC, X * 32, Y * 32, 32, 32, picBoxs.hDC, Offset * 32, 0, vbSrcCopyEnd Sub'顯
19、示小人Private Sub DrawMa n( ByVal X As In teger, ByVal Y As In teger) 定義小人控件的位置,大小BitBltBitBltEnd Sub'使用API函數(shù),picMain.hDC, X * 32, Y * 32, 32, 32, picMan.hDC, Dir * 32, 32, vbS picMain.hDC, X * 32, Y * 32, 32, 32, picMan.hDC, Dir * 32, 0, vbSrcPaintcAnd(按鍵處理)'游戲操作Private Sub Form_KeyDow n(KeyCo
20、de As In teger, Shift As In teger)If Not Playing Then Exit SubSelect Case KeyCodeCase 37Ma nM ove -1,0Case 38ManM ove 0,-1Case 39Ma nM ove 1,0Case 40ManM ove 0, 1Case 32LoadMap CurrSce neCase 33LoadM ap CurrSce ne - 1Case 34LoadM ap CurrSce ne + 1Case 13SelectMapCase 27Un load MeEnd Select'小人的位置
21、向上移動'小人的位置向下移動'小人的位置向左移動'小人的位置向右移動'場景的切換'關卡減一關'關卡加一關'選擇地圖'下載推出End Sub游戲結束Private Sub Form_Unl oad(Ca ncel As In teger)Close'關閉窗口退出EndEnd Sub'小人移動Private Sub Ma nMove(OffsetX As In teger, OffsetY As In teger)Dim DestX As In teger, DestY As In tegerIf OffsetY =
22、-1 Then'小人向上移動Dir = D_UPElseIf OffsetY = 1 The nDir = D_DOWN '小人向下移動ElseIf OffsetX = -1 The nDir = D_LEFT '向左移動ElseDir = D_RIGHT '向右移動End IfDestX = X + OffsetX: DestY = Y + OffsetYSubIf DestX < 0 Or DestX >= MAXX Or DestY < 0 Or DestY >= MAXY The n Exit SubIfMap (DestX, D
23、estY) And B_WALlOr Map (DestX, DestY) And B_BACKThe n ExitIf Map (DestX, DestY) And B_BOX The n'定義地圖的目標地址值Push DestX, DestY, OffsetX, OffsetY'推動箱子ElseDrawMan DestX, DestY '小人的位置DrawBox X, Y, Map(X, Y)X = DestX: Y = DestYpicMai n.RefreshEnd IfEnd Sub'推動箱子Private Sub Push(SourceX As In
24、 teger, SourceY As In teger, OffsetX As In teger, OffsetY As In teger)Dim DestX As Integer, DestY As Integer'定義場景的大小DestX = SourceX + OffsetX: DestY = SourceY + OffsetYIf DestX < 0 Or DestX >= MAXX Or DestY < 0 Or DestY >= MAXY The n Exit SubIf Map (DestX, DestY) And B_WALL Or Map (D
25、estX, DestY) And B_BACK Or _Map (DestX, DestY) And B_BOX The n Exit Sub地圖大小為減去盒地圖大小為加上盒子的大小Map(SourceX, SourceY) = Map (SourceX, SourceY) - B_BOX 子的大小一Map(DestX, DestY) = Map (DestX, DestY) + B_BOXDrawBox DestX, DestY, B_BOX '畫出盒子的大小 DrawBox SourceX, SourceY, Map (SourceX, SourceY) DrawMan Sourc
26、eX, SourceY'定義小人位置DrawBox X, Y, Map(X, Y)'定義地圖位置X = SourceX: Y = SourceYpicMain.Refresh'刷新If Map (SourceX, SourceY) And B_DEST The n Completed = Completed - 1If Map (DestX, DestY) And B_DEST The n Completed = Completed + 1If Completed = BoxCou nt The n WinEnd Sub '過關處理Private Sub Win
27、()If MsgBox("你太聰明了!要繼續(xù)玩下一關嗎?", vbYesNo,"過關! ")= vbNo Then'過關了以后如果不繼續(xù)則下載當前玩的場景Un load MeEnd IfIf Not LoadM ap(CurrSce ne + 1) The nIfMsgBox("你已經(jīng)過了最后一關!還要繼續(xù)嗎? ", vbYesNo,"真厲害! ") = vbYesThe nLoadMap CurrScene'過關后如果選擇繼續(xù)則下載下一關的地圖ElseUn load MeEnd IfEnd IfE
28、nd SubPrivate Sub picMan_Click()End SubOption Explicit'API函數(shù)聲明Private Declare Function BitBIt Lib "gdi32" (ByVai hDestDC As Long, ByVai X AsLong, ByVai Y As Long, ByVai nWidth As Long, ByVai nH eight As Long, ByVai hSrcDC As Long, ByVai xSrc As Long, ByVai ySrc As Long, ByVai dwRop As
29、Long) As Long '全局常量'定義場景X軸的寬度'定義場景y軸的寬度'定義總背景常量并賦H0'定義小人常量并賦H1'定義盒子常量并賦H2'定義墻常量并賦H3'定義背景常量并賦H4Private Const MaxX As In teger = 20Private Const MaxY As Integer = 15Private Co nst B_GROUND As In teger = &H0As In teger = &H1As In teger = &H2As In teger = &
30、;H4As In teger = &H8Private Const B_DESTPrivate Const B_BOXPrivate Const B_WALLPrivate Const B BACK '全局變量Private Map (MaxX, MaxY) As In tegerPrivate X As In teger, Y As In tegerPrivate Seen esCo unt As In teger, CurrSce ne As In tegerPrivate FiieNum As In teger'當前使用的地圖塊'地圖是否改變,如果是,在切
31、換和退出時提示保存Private CurrBox As In tegerPrivate Chan ged As Booiea n'初始化Private Sub Form_Load()"空格-選圖"& vbCrLf & _"Ctri -繪圖"& vbCrLf & _" N -新地圖"& vbCrLf &,"PgUp-上一關"& vbCrLf & ,"PgDown-下一關"& vbCrLf & _"S
32、-保存"& vbCrLf & _"Esc -退出"& vbCrLf &vbCrLf && vbCrLf &II移動""& vbCrLf &ibiHeip.C aptio n = _" 方向鍵-" 其它說明:II、任何未保存的操作都會有提示;"& vbCrLf &、企鵝最后停留的位置為本關的起始位置。"'定義在頁面上顯示的按鈕FiieNum = FreeFiie'把一個文件賦給一個變量下一個語句可供文件使
33、用的文件序號Open "Map.dat" For Binary As FiieNum'打開一個地圖數(shù)據(jù)作為該文件Seen esCou nt = LOF(FileNum) / 302NewMapEnd Sub '保存地圖Private Sub SaveMap()If CurrSce ne > Sce nesCo unt Then Sce nesCo unt = CurrSce nePut FileNum, (CurrScene - 1) * 302 + 1, CByte(X)'定義當前地圖的坐標Put FileNum, , CByte(Y)
34、9;文件為空Dim i As Long, j As LongFor i = 0 To 14For j = 0 To 19Put FileNum, , CByte(Map(j, i)'保存當前地圖NextNextChan ged = FalseEnd Sub '讀取地圖Private Sub LoadM ap(Offset As In teger)If CurrSce ne + Offset > Sce nesCou nt ThenNewMap'進入新的地圖Exit SubEnd IfIf CurrSce ne + Offset < 1 The nExit S
35、ub'退出地圖End IfIf Not AskSave The n Exit SubCurrSce ne = CurrSce ne + OffsetlblInfo.Caption ="第"& CurrScene & "關"'顯示進入第幾關Dim Data As ByteGet FileNum, (CurrScene - 1) * 302 + 1, Data位置為空,自動讀取下一個位置X = DataGet FileNum, , DataY = DataDim i As Long, j As LongFor i = 0 To
36、 14For j = 0 To 19Get FileNum, , Data Map (j, i) = DataNextNext獲得空的文件數(shù)據(jù)DrawMap'繪制地圖Chan ged = FalseEnd Sub'新地圖Private Sub NewMap()If Not AskSave The n Exit Sub'如果不保存,則退出Dim i As Long, j As LongFor i = 0 To 14For j = 0 To 19Map (j, i) = B_BACKNextNext'載入新的背景地圖CurrSce ne = Sce nesCo un
37、t + 1lblI nfo.Caption ="第"& CurrSce ne & " 關"'進入第幾關X = 0: Y = 0Chan ged = FalseDrawMap加載地圖End Sub'按鍵處理Private Sub Form_KeyDow n(KeyCode As In teger, Shift As In teger)Select Case KeyCode '選擇鍵法Case 37 '改變坐標X = (X + 20 - 1) Mod 20 Case 38Y = (Y + 15 - 1) Mod
38、 15Case 39X = (X + 1) Mod 20Case 40Y = (Y + 1) Mod 15Case 32'空格:繪制地圖塊,并且當前使用地圖塊輪換'選擇當前盒子Select Case CurrBoxCase B_BACKMap(X, Y) = B_GROUNDCase B_GROUNDMap(X, Y) = B_DESTCase B_DESTMap (X, Y) = B_BOXCase B_BOXMap (X, Y) = B_WALLCase B_WALLMap (X,Chan ged = TrueCurrBox = Map(X, Y)BitBltpicBox.
39、hDC, 0, 0, 32, 32, picBoxs.hDC, DrawBox(X,* 32, 0, vbSrcCopypicMai n.Refresh'背景選擇背景'選擇空白的背景'定義小盒子的位置'定義墻的位置Y) = B_BACK '定義背景的位置EndSelectY, CurrBox)Case Asc("N")NewM apCase 33LoadM ap (-1)Case 34LoadM ap (1)Case Asc("S")SaveM apCase 27Un load MeEnd Select新建地圖
40、39;下載上一個地圖'下載下一個地圖'保存地圖'下載地圖imgBaby.Move X * 32, Y * 32'要注意的是,本程序中,小人不是用API繪制的,而是直接采用一個PictureBox控件,'小人移動只需改變控件的坐標即成。If Shift = vbCtrlMask The n'Ctrl 鍵繪制Map(X, Y) = CurrBoxChan ged = TrueDrawBox X, Y, CurrBox picMain.Refresh'該控件(小人)刷新End IfEnd Sub'繪制地圖塊Private Fun ction DrawBox(ByVal X As In teger, ByVal Y As In teger, ByVal BoxType As In teger) As In tegerDim Offset As In tegerSelect Case BoxType'繪制地圖
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)資化肥服務合同范本
- 70代勞動合同范本
- 公司設備收購合同范本
- 云南元旦晚會舞臺施工方案
- 出口黃金加工合同范本
- 公司交接合同范本
- 勞務委托施工合同范本
- 倉庫地面清潔合同范本
- 兼職推廣合同范本
- 加盟貨車合同范本
- 《火力發(fā)電廠水處理技術概述》課件
- 3.1產(chǎn)業(yè)轉移對區(qū)域發(fā)展的影響(第1課時) 【知識精研】高二地理課件(湘教版2019選擇性必修2)
- 2025年醫(yī)院實習協(xié)議書樣本
- 2022新教材蘇教版科學5五年級下冊全冊教學設計
- 2024-2025學年全國中學生天文知識競賽考試題庫(含答案)
- 加利福尼亞批判性思維技能測試后測試卷班附有答案
- 仿真技術在車架防腐性能開發(fā)中的應用
- 初一平面直角坐標系集體備課
- 公務員登記表
- 高一年級英語必修二學科導學案全冊
- 胡菊仁愛版九年級英語上教學計劃及教學進度表
評論
0/150
提交評論