投稿類別 : 資訊類 篇名 : RPG 遊戲實作 作者 : 陳友信 高雄市立高雄高級工業職業學校 資訊三甲 簡嘉均 高雄市立高雄高級工業職業學校 資訊三甲 莊明璋 高雄市立高雄高級工業職業學校 資訊三乙 指導老師 : 康姿瑩
壹 前言 一 研究動機 學了一學年的 Visual Basic 2008, 我們決定利用所學做出一個應用程式, 由 於現在遊戲產業頗為熱門, 因此我們決定實作出一個小遊戲, 並且透過撰寫遊戲 較複雜功能的過程中, 產生有意義的挑戰價值 二 研究方法 由於遊戲的種類很多, 因此我們以 RPG 與一對一回合對戰為主軸, 先介紹 遊戲基本功能, 並且以圖片和程式碼的方式來分析與介紹, 最後提出我們對這小 遊戲的未來發展與實作心得 三 研究步驟 我們先從熱門的線上遊戲與一些小遊戲常有的基本功能寫下, 代表這些功能是基本不可缺少的 接著, 我們開始設計遊戲的地圖 人物 武器等圖片與對戰動畫, 並且利用 Adobe Flash CS4 完成 完成圖片與動畫後, 我們使用 Visual Basic 2008 設計表單的畫面與物件 之後, 我們開始撰寫程式碼, 並且利用偵錯功能修改出程式錯誤的地方 最後完成實品, 我們自己做最後的遊戲測試, 並且修改餘漏的錯誤, 完成此遊戲 貳 正文 一 使用軟體介紹 ( 一 )Visual Basic 2008 簡介 Visual Basic 是多種程式語言其中較為簡單的一種, 因為有內建多種物件及其功能可供程式員使用, 搭配視覺化的介面, 藉由拖曳的方式於表單中排版物件, 並在其內部設計程式碼, 因為 VB 在設計時就已內定為多功能的程式語言, 功能 使用簡單, 自由度高 ( 二 ) Visual Basic 2008 使用的物件與畫面介紹 (1) : 通常用來產生點擊 (Click) 事件的物件 1
(2) : 用來顯示字串的物件 (3) : 能以條列式來顯示多行字串, 並能點選資料行觸發 (4) : 可讓使用者輸入資料, 用來處理文字字串的物件 (5) : 可點選及取消之物件, 有排斥功能即若有兩個以上 RadioButton, 只會有一個為點選狀態 (6) : 程式執行時是隱藏狀態, 能設定每次間隔時間來觸發程式碼 (7) : 用來呈現圖片或動畫 (GIF 檔 ) 的物件 圖一 Visual Basic 2008 程式碼設計畫面 圖二 Visual Basic 2008 版面設計畫面 2
二 遊戲大綱流程圖 新建遊戲 讀取遊戲 狀態 背包 商店 點選地圖對戰 查看升級使用物品購買物品 勝利 失敗 確定能力點數 獎賞 結束 三 重要程式碼 ( 一 ) 儲存 讀取遊戲功能 Private Sub YesButton_Click Dim saveperson As String = "" ' 人物狀態寫入分別為 ( 名子, 力量點, 敏捷點, 體力點, 等級, 血量, 攻擊, 防禦, 飢餓值, 經驗值, 總能力點, 迴避, 服裝, 武器 ) Saveperson = ifmt(0) & "," & ifmt(1) & "," & ifmt(2) & "," & ifmt(3) & "," & Label6.Text & "," & Label2.Text & "," & ifmt(6) & "," & ifmt(7) & "," & 主畫面.Hungry & "," & Label5.Text & "," & ifmt(10) + 3 & "," & ifmt(11) & "," & ifmt(12) & "," & ifmt(13) Dim savefile As System.IO.StreamWriter = New System.IO.StreamWriter(Application.StartupPath & "\ 人物.txt") savefile.write(saveperson) savefile.flush() savefile.close() End Sub 表一 儲存遊戲功能的程式碼 3
圖三 讀取 圖四 儲存 ( 二 ) 商店 - 武裝 商品 Private Sub WeaponRadioButton_CheckedChanged ListBox1.Items.Clear() If RadioButton1.Checked = True Then ListBox1.Items.Add(" 大刀 ") ListBox1.Items.Add(" 雷鳴刀 ") ListBox1.Items.Add(" 龍嘯刀 ") ListBox1.SelectedIndex = 0 R = 1 ElseIf RadioButton2.Checked = True Then ListBox1.Items.Add(" 長劍 ") ListBox1.Items.Add(" 青焰劍 ") ListBox1.Items.Add(" 紫雲劍 ") ListBox1.SelectedIndex = 0 R = 1 ElseIf RadioButton3.Checked = True Then ListBox1.Items.Add(" 長槍 ") ListBox1.Items.Add(" 蛇迴槍 ") ListBox1.Items.Add(" 龍蟠槍 ") ListBox1.SelectedIndex = 0 R = 1 ElseIf RadioButton4.Checked = True Then ListBox1.Items.Add(" 布衣 ") ListBox1.Items.Add(" 銀甲 ") ListBox1.Items.Add(" 金甲 ") 4
ListBox1.SelectedIndex = 0 R = 2 End If End Sub 表二 選擇不同武器類型時更換不同裝備的程式碼 圖五 商店點選武器類型 ( 刀 ) 圖六 商店點選武器類型 ( 甲 ) Private Sub FoodRadioButton_CheckedChanged If RadioButton5.Checked = True Then PictureBox12.Image = My.Resources. 藥水 Label22.Text = 100 Label16.Text = 250 Label20.Text = 0 Food = " 藥水 " ElseIf RadioButton6.Checked = True Then PictureBox12.Image = My.Resources. 餅 Label22.Text = 100 Label16.Text = 50 Label20.Text = 20 Food = " 餅 " ElseIf RadioButton7.Checked = True Then PictureBox12.Image = My.Resources. 果子 Label22.Text = 50 Label16.Text = 0 Label20.Text = 20 Food = " 果子 " ElseIf RadioButton8.Checked = True Then PictureBox12.Image = My.Resources. 肉 5
Label22.Text = 200 Label16.Text = 50 Label20.Text = 50 Food = " 肉 " End If End Sub 表三 選擇不同商品時更換不同商品資訊的程式碼 圖七 商店點選補品 ( 餅 ) ( 三 ) 背包 Private Sub UseButton_Click ReadImage() Dim UseCount As String = "" For i = 0 To 8 If item(i) = 1 Then UseCount = ifmtfd(i + 1) Select Case UseCount Case " 藥水 " RecoverBloodOrHungry(blood(0), 250, blood(1), Label6) Case " 餅 " RecoverBloodOrHungry(blood(0), 50, blood(1), Label6) RecoverBloodOrHungry( 主畫面.Hungry, 20, 100, Label7) Case " 果子 " RecoverBloodOrHungry( 主畫面.Hungry, 20, 100, Label7) Case " 肉 " RecoverBloodOrHungry(blood(0), 50, blood(1), Label6) RecoverBloodOrHungry( 主畫面.Hungry, 50, 100, Label7) 6
End Select ifmtfd(i + 1) = "Nothing" Writeblood() WriteMoneyAndImage() ReadImage() AllPictureChange() Exit For End If Next Dim s() As String = Label7.Text.Split("/") 狀態.Label20.Text = Label6.Text 狀態.Label22.Text = s(0) Label1.Text = "" 主畫面.ReadAll() End Sub Private Sub RecoverBloodOrHungry(ByRef NowBOH As Integer, ByRef RecoverBOH As Integer, ByRef MaxBOH As Integer, ByRef Label As Label) If NowBOH + RecoverBOH > MaxBOH Then NowBOH = MaxBOH Else NowBOH += RecoverBOH End If Label.Text = NowBOH & "/ " & MaxBOH End Sub 表四 點選與使用背包裡物品的判斷程式碼 圖八 背包 7
三 實作結果 圖九 主選單 圖十 新創角色 圖十一 遊戲主畫面 ( 滑鼠經過小橋時閃爍, 並顯示 小橋 ) 圖十二 玩家狀態 圖十三 戰鬥起始畫面 8
圖十四 戰鬥中畫面 圖十五 戰鬥後的收獲 參 結論 透過這次實作, 我們不但對遊戲實作有更多的經驗與了解, 也更熟用 Visual Basic 2008 與 Adobe Flash CS4, 雖然我們尚未加上背景音樂 音效與網路一對一對戰的功能, 但我們相信有了此次的實作經歷, 下一次的作品會更精緻, 也能產生許多像是任務破解 NPC 對話等新功能, 讓此遊戲有更大的魅力 實作的過程常常有一些微小的程式碼錯誤, 像是讀取資料的部分, 必須小心謹慎 處理讀到的資料, 以免造成像是該顯示金額卻顯示成血量的錯誤, 因此我們花了 許多時間偵錯與修改 透過這次實作, 我們不但寫出屬於自己的遊戲感到很有成就感, 更是活用老師所 教 Visual Basic 2008 的教材創造出自己想要的遊戲功能與需求, 完成這個遊戲 時, 我們的心中充滿無比歡樂 9
肆 引註資料 1 陳會安 (2009) Visual Basic 2005 程式設計範例教本 台北市:旗標 2 王國榮 (2009) 新觀念 Visual Basic 6.0 教本 台北市 : 旗標 3 MSDN 論壇 2011 年 11 月 6 日 取自 http://social.msdn.microsoft.com/forums/zh-tw/categories/ 10