投稿類別 : 資訊類 篇名 : 作者 : 蔡少瑜 國立暨南國際大學附屬高級中學 高三 10 班廖承瀚 國立暨南國際大學附屬高級中學 高三 10 班蕭閔方 國立暨南國際大學附屬高級中學 高三 10 班 指導老師 : 楊智欽老師
壹 前言 一 研究動機 射擊類遊戲長年以來一直受到許多人的喜愛, 遊戲市場裡也有許多家喻戶曉的射擊遊戲, 如美國的 CSGO(Counter-Strike: Global Offensive) BF1(Battlefield 1) 等等 這類的遊戲雖然受到許多人的喜愛, 不過也因此有許多人卻沉迷於遊戲, 而把學習忘的一乾二淨, 甚至因沉迷遊戲而荒廢學業的人也不計其數 因此, 我們希望把學習跟遊戲結合在一起, 讓人們在玩樂之餘也能學習知識, 打破家長們對於遊戲只能對孩子帶來負面影響的觀念 二 研究目的 生活在二十一世紀的資訊時代之中, 幾乎每個人都會玩電腦遊戲, 而且遊戲的功能也愈來愈豐富, 遊戲除了可以幫助人們放鬆心情之外, 也可以應用在學習上, 我們希望做出一個寓教於樂的遊戲, 讓知識的學習能融入遊戲中, 我們的研究目的如下 : ( 一 ) 設計一款具有知識學習功能的射擊遊戲 ( 二 ) 提供多領域的題目, 有美術 數學 國文及音樂的題目可以用來輔助學習 三 研究流程 圖 1 研究流程圖 四 研究方法 ( 一 ) 文獻分析法 : 以射擊遊戲為主軸, 並試玩網路上闖關型 益智型及動作型遊戲 作為我們設計的參考 ( 二 ) 實作研究法 : 使用 Visual Basic 設計遊戲, 並以 PhotoImpact X3 及 Power Point2010 來繪製圖形 1
貳 正文 一 文獻探討 ( 一 ) 絕對武力 CS(Counter-Strike) 是很多人小時候接觸到到線上擊類遊戲, 是由 Valve 開發的第一人稱射擊遊戲, 遊戲中具有多種槍枝武器可更換與多種模式, 曾經是北美洲最熱門的遊戲之一 ( 二 ) 返校 是由台灣赤燭遊戲開發的恐怖解謎遊戲, 以台灣歷史做為背景, 主要是以解嚴 前的白色恐怖時期為時間主軸, 透過解謎的結果可以獲得兩種不同的結局 圖 2 CS 遊戲戰鬥畫面 ( 圖 2 資料來源 : 研究者遊戲截圖 ) 圖 3 返校遊戲畫面 ( 圖 3 資料來源 : 研究者遊戲截圖 ) ( 三 )CS 和返校比較 優點缺點參考內容 表 1- CS 與返校比較分析 絕對武力 Counter-Strike 返校 1 每週都有固定更新處理 BUG 1 遊戲畫面採用橫向捲軸模式 2 模式多樣化如爆破任務 搶救 2 故事節奏的掌握度佳, 遊戲全長大約 人質 團隊死鬥等供玩家遊玩 在 3~4 小時 1 模式武器道具種類樣式多, 對 1 遊戲部分操作說明不是很詳細, 需要 第一次接觸該遊戲的人不易上手 花時間找正確使用方式 2 遊戲畫面缺乏真實感且遊戲外 2 遊戲結局只有 2 種, 缺乏變化性 掛多 1 物件的位置配置 1 其遊戲的背景素材 2 遊戲進行的模式 2 遊戲場景的設計 ( 表 1 資料來源 : 研究者繪製 ) 2
二 遊戲流程圖 圖 4 遊戲流程圖 3
三 遊戲說明 遊戲一開始進入時會有開始遊戲與離開遊戲兩個按鈕, 如圖 5 所示, 選擇開始遊戲 可進入遊戲玩, 選擇離開遊戲則遊戲結束 圖 6 為點選開始遊戲後進入校園的畫面, 選 擇遊戲畫面紅色箭頭所指示的門口可以開始遊戲 圖 5 遊戲開始畫面 圖 6 進入遊戲 遊戲一共分為 4 個關卡, 第 1 關畫面為 210 教室, 有數學題測驗, 如圖 7 所示 ; 第 2 關為音樂教室, 有音樂題測驗, 如圖 8 所示 ; 第 3 關為活動中心, 有國文題測驗, 如圖 9 所示 ; 第 4 關為美術教室, 有美術題測驗, 如圖 10 所示 每個關卡進入時都會有說明視窗, 點選視窗即開始進行測驗遊戲 圖 7 210 教室說明畫面 圖 8 音樂教室說明畫面 4
圖 9 活動中心說明畫面 圖 10 美術教室說明畫面 4 個關卡的作答方式都是採用射擊的方式來點選作答, 上面會出現題目,4 個選項 則是每個 2 秒隨機會出現 1 個, 操作者必須在時間內迅速操滑鼠, 讓十字瞄準線對準答 案並點擊, 如圖 11~14 所示 如果點擊到正確答案可得 20 分, 錯誤則扣 10 分 圖 11 210 教室遊戲畫面 圖 12 音樂教室遊戲畫面 圖 13 活動中心遊戲畫面 圖 14 美術教室遊戲畫面 當作答一段間讓上方能量條集滿時, 會出現加分道具, 如圖 15 中央圓圈所示, 點選可以再額外加 10 分 每個關卡結束後皆有一個級數判斷, 如圖 16 所示, 成績 120 以上是特優, 大於等於 100 為甲, 大於等於 80 為乙, 大於等於 60 為丙, 大於等於 40 為丁, 40 以下則為戊 5
圖 15 能量滿格畫面 圖 16 遊戲級數判斷 四 遊戲程式碼 ( 一 ) 讀取題目 設立 btn_game 按鈕為遊戲開始前的說明鈕, 當玩家按下按鈕時會隱藏此按鈕開 始遊戲, 遊戲會啟動 2 個計時器,tmTime 為倒數計時器,tmTarget 為每隔 2 秒出現 題目與選項的計時器, 接著開啟題目文字檔隨機挑選出一個題目 btn_game.visible = False tmtime.enabled = True tmtarget.enabled = True Call RandXY() Call OpenQes("math.txt") Me.Refresh() ' 遊戲介紹隱藏 ' 時間開啟 ' 時間間距開啟 ' 題目的移動範圍 ' 開啟題目檔 ( 二 ) 殊功能增加 設定畫十字線 題目 選項畫筆的屬性, 設定 pen1 的準心顏色, 設定 brush1 的 題目顏色, 設定 brush2 的選項顏色, 再以 DrawString 和 DrawLine 方法繪製準心及題 的位置,f 則是用來題目字型的屬性 If btn_game.visible = False Then Dim pen1 As New Pen(Color.Black) ' 準心顏色 Dim brush1 As New SolidBrush(Color.White) ' 題目顏色 Dim brush2 As New SolidBrush(Color.Red) ' 選項顏色 Dim f As Font = New Font(" 微軟正黑體 ", 24, FontStyle.Bold) ' 題目字型 e.graphics.drawstring(s(0), f, brush1, 200, 90) ' 設定題目位置 e.graphics.drawstring(s(n + 1), f, brush2, x, y) e.graphics.drawline(pen1, 0, m_y, Me.Width, m_y) ' 設定準心 y 軸位置 6
e.graphics.drawline(pen1, m_x, 0, m_x, Me.Height) ' 設定準心 x 軸位置 ( 三 ) 計算分數 e.x 與 e.y 為點擊的滑鼠游標位置, 我們計算點擊座標與題目左上角的位置之距 離, 可以判斷是否點中選項, 當點擊到正確答案時分數及能量值可加 20 分, 反之則 扣 10 分, 當能量值 pw 達 100 時上方能量條會顯示全滿, 點擊可立刻加 10 分 If btn_game.visible = False Then ' 點擊距離 If e.x >= x AndAlso e.y >= y AndAlso n + 1 = Val(s(5)) Then Dim h, w As Double h = 24 w = Strings.Len(s(n)) * 24 ' 和文字距離 24 內點擊有效 If (e.x - x <= w And e.y - y <= h) Then lblscore.text += 20 ' 加分 pw.value += 20 ' 能量值上升 If pw.value = 100 Then ' 能量值 100 可以有特殊效果 Dim bmp As New Bitmap(My.Resources._10) p1.visible = True ' 特殊效果開啟 pw.value = 0 ' 能量值歸零 Else lblscore.text -= 10 ' 扣分 Call RandXY() ' 題目檔移動的範圍 Call OpenQes("math.txt") ' 題目 tmtarget.enabled = False ' 關閉題目 tmtarget.enabled = True ' 開啟題目 Me.Refresh() ( 四 ) 讀檔設定 先使 FileOpen 方法讀取題目檔的位置, 然後隨機讀入第 k 題的題目放入 ss 字串, 用 Split 方法將它分割成 1 個題目 4 個選項及 1 個答案, 並存放到陣列 s2 中, 再將 s2 陣列的內容存放到全域陣列 s 中, 讓其他段程式也能讀取到 7
FileOpen(1, filename, OpenMode.Input) ' 開啟檔案 Input(1, m) ' 將文字放入文字檔裡面 Randomize() ' 亂碼 k = Int(Rnd() * m) For i = 0 To k ss = LineInput(1) ' 放入字串 If i = k Then s2 = Split(ss, ", ") ' 題目檔內的字串間隔 Next For i = 0 To 5 ' 題目 選項與答案 s( i ) =s2( i ) ' 選擇的答案放入讀取設定 Next FileClose(1) ' 關閉題目 ( 五 ) 級數判斷 當遊戲結束時, 會依據玩家的分數來判斷學習的等級, 大於 120 為特優, 大於 等於 100 為甲, 大於等於 80 分為乙, 大於等於 60 分為丙, 大於等於 40 分為丁, 則 其他分數為戊 tmtime.enabled = True ' 時間計時器開啟 lbltime.text = Val(lblTime.Text) - 1 If Val(lblTime.Text) = 0 Then tmtime.enabled = False ' 時間計時器關閉 tmtarget.enabled = False ' 選項計時器關閉 Dim g As String g = "" ' 預設值為 0 Select Case Val(lblScore.Text) ' 成績等級 Case Is > 120 ' 分數大於 120 為特優 g = " 特優 " Case Is >= 100 ' 分數大於等於 100 為甲等 g = " 甲 " Case Is >= 80 ' 分數大於等於 80 為乙等 g = " 乙 " Case Is >= 60 ' 分數大於等於 60 為丙等 g = " 丙 " Case Is >= 40 ' 分數大於等於 40 為丁等 g = " 丁 " Case Else ' 若不為上述五種情形, 則為戊等 8
g = " 戊 " End Select If MsgBox(" 你一共得了 " & lblscore.text & " 分 " & g & " 等級 " & vbcrlf & " 可以移動至下一關 ", 4, " 成績 ") = MsgBoxResult.Yes Then Me.Visible = False ' 出現對話視窗, 顯示一共得分數及等第 Form2.Show() ' 前往下一個遊戲關卡 Else End ' 結束遊戲 参 結論 一 感想 剛開始我們曾對於自己能設計技術感到不太可能, 但透過老師的指導, 我們應用所學的程式設計能力, 和其他所學過的軟體用來設計這款遊戲, 不僅知道自己能夠如何應用所學, 還能從製作遊戲中更活用軟體, 最大的成果除了遊戲的成品外, 我們也學到了團隊合作, 組員各司其職, 截長補短, 讓整個遊戲的設計的過程從無到有很順利 二 未來展望 射擊遊戲的實作已具體完成, 但我們仍然想再增加一些功能, 期許這個遊戲能夠更 完美, 讓更多人喜愛 ( 一 ) 增加武器變化 : 例如 : 散彈槍 大砲等 ( 二 ) 增加遊戲模式 : 例如 : 爆破模式 雙人模式 挑戰模式等 ( 三 ) 提供多種難易度 : 例如 : 簡易 一般 困難模式 ( 四 ) 添增測驗題目 : 例如 : 日常生活常識的題目 ( 五 ) 加添特殊功能 : 例如 : 提示答案鈕 限時加分加倍 延長時間等 ( 六 ) 加強聲光效果 : 例如 : 背景特效 增加進場動畫 肆 引註資料 孫惠民 (2009) Visual Basic 6 創意遊戲設計 臺北市 : 統一元氣 江嘉頡 李長沛 (2009) Visual Basic 2008 網路遊戲程式設計 新北市 : 博碩文化 施威銘 (2010) 新觀念 Microsoft Visual Basic 2008 程式設計 台北市 : 旗標 9
葉志偉 (2007) 逢甲大學資訊工程學系專題研究報告 擷取日期 2017 年 9 月 26 日, 擷取自 : http://140.134.131.145/upload/paper_uni/961pdf/venom.pdf 10