投 稿 類 別 : 資 訊 類 篇 名 : 益 智 小 遊 戲 之 研 究 ~2048 作 者 : 作 者 : 張 証 堯 新 北 市 立 瑞 芳 高 級 工 業 職 業 學 校 資 訊 二 簡 志 軒 新 北 市 立 瑞 芳 高 級 工 業 職 業 學 校 資 訊 二 王 崧 驊 新 北 市 立 瑞 芳 高 級 工 業 職 業 學 校 資 訊 二 指 導 老 師 : 陳 思 亮 老 師 吳 心 蕙 老 師
壹 前 言 一 研 究 概 述 在 現 在 這 個 資 訊 爆 炸 的 時 代, 智 慧 型 的 產 品 已 經 成 為 了 不 可 或 缺 的 東 西 了! 智 慧 型 的 產 品 也 需 要 一 些 輔 助 的 程 式 也 就 是 APP, 所 以 APP 每 天 也 是 以 數 以 萬 計 的 速 度 在 增 加, 常 常 有 一 些 特 別 趣 味 的 APP 會 突 然 出 現! 它 不 用 畫 面 精 緻 也 不 需 要 多 大 的 動 畫, 其 實 就 只 要 這 個 idea 夠 吸 引 人 就 可 以 創 造 一 股 風 潮 二 研 究 動 機 APP 日 新 月 異, 不 管 是 硬 體 或 軟 體 都 是 一 門 高 深 的 學 問, 但 是 仔 細 去 研 究 就 可 以 發 現 那 些 程 式 其 實 就 是 用 一 些 我 們 生 活 上 常 用 到 的 簡 單 數 學, 再 透 過 寫 程 式 的 方 式 就 可 以 做 出 一 樣 的 概 念, 所 以 我 們 不 斷 探 討 以 及 研 究, 希 望 藉 此 機 會 來 累 積 自 己 開 發 軟 體 的 能 力, 所 以 我 們 設 計 出 此 程 式 來 進 行 實 作, 並 且 分 析 原 理 和 提 出 製 作 方 法, 最 重 要 的 是 培 養 團 體 間 的 默 契 及 發 揮 團 隊 精 神, 以 後 在 職 場 上 便 可 輕 鬆 與 人 溝 通 合 作 三 研 究 方 法 擬 定 主 題 後, 先 查 詢 學 習 時 使 用 的 課 本 Visual Basic 6.0, 再 大 量 翻 閱 與 論 文 主 題 有 關 資 料, 對 主 題 撰 寫 規 則 先 有 個 大 致 上 的 了 解 完 成 理 論 部 分 之 後, 開 始 針 對 理 論 部 分 利 用 程 式 語 言 並 與 老 師 同 學 討 論 之 後 開 始 實 際 模 擬 我 們 訂 定 了 下 列 的 研 究 步 驟 及 目 標, 並 以 甘 特 圖 的 方 式 呈 現, 如 下 圖 一 所 示 : 項 目 時 間 2/24~3/3 3/4~3/9 3/10~3/13 3/14~3/19 3/20~3/30 1. 收 集 相 關 資 訊 2. 統 整 研 究 資 料 3. 專 題 程 式 設 計 4. 系 統 測 試 優 化 5. 論 文 撰 寫 製 作 6. 錯 誤 檢 查 修 正 圖 一 研 究 步 驟 甘 特 圖 1
貳 正 文 一 研 究 設 備 下 表 一 為 本 次 專 題 研 究 所 使 用 的 軟 硬 體 設 備 彙 整 表 : 表 一 專 題 研 究 設 備 表 項 目 設 備 名 稱 設 備 規 格 01 作 業 系 統 Windows 7 02 CPU Inter(R) Pentium(R) CPU G2120@ 3.10GHz 03 程 式 語 言 Microsoft Visual Basic 6.0 04 顯 示 器 解 析 度 1920 x 1080 05 顯 示 卡 NVIDIA GeForce GTX 550 Ti 06 硬 碟 500G 二 研 究 理 論 此 次 專 題 遊 戲 設 計 主 要 利 用 下 述 四 種 主 要 設 計 技 巧, 分 別 說 明 如 下 : ( 一 ) 鍵 盤 事 件 在 電 腦 的 作 業 系 統 中, 鍵 盤 的 偵 測 是 很 重 要 的 工 作, 因 為 它 是 最 常 使 用 的 輸 入 工 具, 當 使 用 者 按 下 鍵 盤 上 某 個 按 鍵 時, 作 業 系 統 中 的 掃 描 程 式 便 會 依 據 掃 描 值, 回 傳 鍵 盤 按 鍵 按 下 的 編 碼, 程 式 也 可 依 此 判 斷 應 該 執 行 何 種 對 應 事 件 而 本 專 題 研 究 採 用 的 鍵 盤 事 件 主 要 有 三, 分 述 如 下 表 : 表 二 鍵 盤 事 件 表 鍵 盤 事 件 說 明 KeyDown 此 事 件 是 當 使 用 者 在 程 式 執 行 時, 物 件 擁 有 Focus 按 下 按 鍵 後 所 引 發 的 事 件, 與 KeyPress 不 同 KeyPress 此 事 件 是 當 使 用 者 按 下 按 鍵 時 所 引 發 的 事 件 但 與 KeyDown 事 件 不 同 的 是 該 按 鍵 一 定 得 是 回 傳 字 元, 才 會 引 發, 例 如 A KeyUp 此 事 件 是 當 使 用 者 在 程 式 執 行 時, 物 件 擁 有 Focus 按 下 按 鍵 後, 再 放 開, 當 按 鍵 彈 回 時 所 引 發 的 事 件 2
本 組 將 利 用 Key Down 事 件 中 回 傳 的 鍵 盤 方 向 鍵 掃 描 碼, 來 操 作 遊 戲 中 控 制 標 籤 物 件 的 上 下 左 右, 四 種 移 動 方 向 的 運 行 計 算 ( 二 ) 計 時 器 控 制 項 在 Visual Basic 程 式 語 言 中, 計 時 器 物 件 可 以 使 用 程 式 所 提 供 的 Timer 事 件, 依 規 則 地 按 照 程 式 所 設 定 的 時 間, 每 隔 一 段 時 間 自 動 執 行 一 次 Timer 事 件 內 設 計 師 撰 寫 的 程 式 碼 計 時 器 控 制 項 的 間 隔 時 間 值 以 interval 屬 性 來 進 行 設 定, 以 千 分 之 一 秒 執 行 一 次 為 最 小 單 位, 例 如 設 為 10 時 代 表 百 分 之 一 秒 執 行 一 次, 以 此 類 推 當 程 式 中 需 要 自 動 執 行 的 程 序 時, 計 時 器 控 制 項 可 以 提 供 社 記 者 一 個 簡 單 便 捷 且 效 能 不 錯 的 運 作 方 式 而 當 interval 屬 性 被 設 定 為 0 時, 計 時 器 控 制 項 會 被 關 閉, 但 如 是 在 執 行 中 才 被 設 定 為 0, 計 時 器 控 制 項 則 會 執 行 完 最 後 一 次 才 進 行 關 閉, 如 需 要 直 接 關 閉 計 時 器, 則 必 須 利 用 Enabled 屬 性, 當 該 屬 性 值 倍 設 定 為 False 時, 計 時 器 控 制 項 就 會 直 接 執 行 關 閉 動 作 ( 三 ) 標 籤 物 件 標 籤 物 件 顧 名 思 義 是 讓 程 式 設 計 者 任 意 載 入 文 字 並 且 可 以 隨 意 放 置 在 表 單 中 的 任 何 位 置, 標 籤 物 件 能 提 供 獨 立 的 文 字 顯 示 與 變 化 字 體 等 動 作, 讓 程 式 中 使 用 到 大 量 變 化 文 字 時 能 有 十 分 方 便 管 理 的 解 決 方 案, 而 且 還 支 援 控 制 項 陣 列, 讓 程 式 設 計 更 為 便 利, 標 籤 物 件 的 主 要 屬 性 如 下 所 示 表 三 標 籤 物 件 屬 性 表 項 目 內 容 項 目 內 容 項 目 內 容 Caption 標 籤 上 的 文 字 BorderStyle 框 線 設 定 Top Y 軸 坐 標 Align 對 齊 方 式 Visible 可 視 設 定 Width 圖 片 方 塊 寬 度 Font 字 型 選 擇 Left X 軸 坐 標 Height 圖 片 方 塊 高 度 ( 四 ) 不 重 複 亂 數 在 各 個 程 式 語 言 中, 均 有 提 供 亂 數 函 數, 讓 程 式 設 計 者 能 利 用 它 來 產 生 隨 機 亂 數, 但 兩 個 隨 機 產 生 的 亂 數, 並 不 能 保 證 不 會 重 複, 因 此 如 要 產 生 兩 個 不 重 複 的 亂 數 值, 就 不 能 只 靠 程 式 語 言 中 所 提 供 的 隨 機 亂 數 3
本 專 題 研 究 採 用 如 撲 克 牌 遊 戲 的 方 式, 來 產 生 不 重 複 的 亂 數, 首 先 將 值 都 填 入 設 定 好 的 陣 列 中, 就 如 將 撲 克 牌 做 好, 每 張 牌 都 不 一 樣 ; 然 後 隨 機 抽 出 兩 個 位 置 將 資 料 對 調, 就 算 抽 出 的 兩 個 位 置 相 同 也 無 妨, 因 為 那 也 是 機 率 的 一 部 分, 就 像 將 撲 克 牌 進 行 洗 牌 動 作 一 般, 這 樣 的 動 作 重 複 一 段 時 間, 內 容 就 混 亂 了, 在 依 序 發 出, 不 重 複 的 亂 數 就 完 成 了 三 研 究 設 計 ( 一 ) 程 式 演 算 法 下 面 是 本 專 題 研 究 所 使 用 的 程 是 演 算 法 : 1 主 程 式 演 算 法 Step1: 使 用 輸 入 遊 戲 進 行 中 所 要 遊 玩 的 盤 面 大 小 Step2: 初 值 設 定 及 洗 牌 Step3: 隨 機 產 生 兩 個 不 重 複 位 置 的 亂 數 進 行 遊 戲 Step4: 判 斷 使 用 者 按 下 的 方 向 鍵, 依 照 回 傳 的 掃 描 碼 進 行 上 下 左 右 等 四 個 方 向 的 移 動 計 算 Step5: 呼 叫 移 動 計 算 副 程 式 Step6: 判 斷 是 否 還 有 位 置 可 產 生 亂 數, 若 是 的 話 跳 回 執 行 Step3, 反 之 往 下 直 行 Step7 Step7: 顯 示 遊 戲 成 果, 並 判 斷 是 否 結 束 遊 戲, 若 是 則 結 束 遊 戲, 反 之 跳 回 執 行 Step1 2 移 動 計 算 副 程 式 Step1: 依 據 傳 來 的 參 數 值, 判 斷 該 往 上 下 左 右 哪 個 方 向 進 行 計 算 Step2: 將 label 陣 列 內 的 數 值, 依 據 移 動 方 向 進 行 判 斷, 如 與 移 動 相 方 向 相 鄰 的 位 置 內 數 值 一 樣, 則 執 行 Step3, 反 之 執 行 Step4 Step3: 將 兩 個 label 內 的 數 值 相 加, 保 留 於 與 移 動 相 方 向 比 前 方 的 label 內, 並 將 後 方 的 label 內 容 刪 除, 跳 至 Step5 Step4: 將 label 陣 列 內 的 數 值, 往 移 動 相 方 向 順 序 搬 移 Step5: 結 束 副 程 式, 返 回 主 程 式 ( 二 ) 程 式 流 程 圖 下 圖 是 本 專 題 研 究 的 程 式 流 程 圖 : 4
起 始 輸 入 方 向 可 判 斷 可 否 移 動 不 可 移 動 並 判 斷 數 字 是 否 相 等 有 是 否 有 移 動 是 否 產 生 數 相 加 並 移 動 移 動 全 方 向 是 否 皆 可 移 不 可 可 輸 了 結 束 圖 二 程 式 流 程 圖 ( 三 ) 程 式 說 明 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Dim G, H If KeyCode = 37 Then a = 0: b = 0 // 判 斷 方 向 鍵 的 上 下 左 右 If KeyCode = 39 Then a = 0: b = 1 If KeyCode = 38 Then a = 1: b = 0 If KeyCode = 40 Then a = 1: b = 1 Moving = 1 For k = 0 To Number - 1 // 使 用 者 要 玩 幾 乘 幾,2048 有 幾 條 要 移 動 5
If a = 1 Then // 判 斷 使 用 者 要 橫 向 移 動 直 向 移 動 For i = 0 To Number - 1 If b = 0 Then // 若 是 直 向 移 動 所 有 方 塊 執 行 上 下 移 動 G = i : Else : G = Number - 1 i End If If M(k, G) = 0 Then // 若 按 上, 判 斷 頂 部 是 否 為 空, 若 為 空 的, 將 For j = i + 1 To Number 1 // 下 方 不 為 空 的 方 塊 移 致 空 格 If b = 0 Then // 若 按 下, 判 斷 底 部 是 否 為 空, 若 為 空 的, 將 H = j // 上 方 不 為 空 的 方 塊 移 致 空 格 Else H = Number - 1 - j End If If M(k, H) <> 0 Then // 移 動 M(k,h) 到 M(k,g) M(k, G) = M(k, H): Moving = 0 M(k, H) = 0 Exit For End If Next If j = Number Then Exit For End If If M(k, H) <> M(k, G) And M(k, H) <> 0 Then 0, 且 不 等 於 自 己 If b = 0 Then F = 1 Else F = -1 If M(k, G + F) = M(k, H) Then Exit For M(k, G + F) = M(k, H): Moving = 0 M(k, H) = 0 Exit For End If If M(k, H) = M(k, G) Then M(k, G) = M(k, G) + M(k, H): Moving = 0 M(k, H) = 0 Exit For End If // 判 斷 後 方 的 方 塊 是 否 為 // 判 斷 是 否 要 移 動 到 下 一 行 // 判 斷 後 方 的 方 塊 是 等 於 自 己 // 若 等 於, 兩 數 相 加 四 操 作 說 明 2048 這 個 遊 戲 是 以 數 學 平 方 相 加 的 概 念 為 基 礎, 遊 戲 的 規 則 是 : 兩 個 相 同 的 數 字 合 併, 例 如 : 兩 個 2 碰 在 一 起, 會 變 成 4, 兩 個 4 碰 在 一 起, 會 6
變 成 8, 以 此 類 推 本 專 題 遊 戲 的 操 作 步 驟 如 下 表 四 之 說 明 : 表 四 操 作 步 驟 說 明 表 一 啟 動 遊 戲 後, 系 統 會 先 行 詢 問 玩 家, 希 望 由 玩 的 盤 面 大 小, 系 統 預 設 值 為 4*4, 但 玩 家 可 一 喜 好 輸 入 二 如 玩 家 輸 入 5, 系 統 會 自 動 產 生 一 個 5*5 的 遊 戲 盤 面, 並 隨 機 載 入 兩 個 標 籤 物 件 陣 列, 開 始 進 行 遊 戲 三 依 照 玩 家 所 按 下 的 方 向 鍵, 完 成 盤 面 標 籤 陣 列 的 計 算 與 移 動 左 圖 為 往 上 移 動 示 例 四 左 圖 為 往 左 移 動 示 例, 如 此 遊 戲 持 續 進 行, 職 到 判 不 可 再 移 動 為 止, 遊 戲 宣 告 結 束 五 研 究 成 果 7
下 表 五 為 一 場 簡 易 的 遊 戲 成 果 說 明, 不 用 任 何 技 巧, 僅 左 右 移 動, 來 呈 現 遊 戲 成 果 : 表 五 遊 戲 成 果 說 明 表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 8
參 結 論 一 研 究 心 得 Microsoft Visual Basic 6.0 是 我 們 現 在 課 堂 上 正 在 學 習 的 一 種 程 式 語 言, 使 用 本 程 式 語 言 來 撰 寫 出 這 款 程 式, 讓 我 們 有 一 股 意 義 非 凡 的 成 就 感 過 程 中 曾 碰 到 許 多 障 礙, 卻 也 讓 我 們 小 組 彼 此 更 加 了 解 組 員 們 各 自 的 想 法 所 以 撰 寫 期 間 團 隊 的 磨 合 也 很 重 要, 小 論 文 讓 我 們 學 到 的 不 只 是 程 式 語 言, 還 有 一 起 從 製 作 開 始 到 作 品 完 成 之 間 的 成 就 感 非 常 感 謝 老 師 教 導, 並 且 從 旁 協 助 二 未 來 展 望 希 望 能 強 化 此 程 式 的 美 觀 性, 讓 人 能 夠 百 看 不 膩, 並 且 將 此 程 式 用 硬 體 展 現 出 來, 使 用 七 段 顯 示 器 當 作 顯 示 數 字 的 儀 器 另 外, 也 希 望 在 遊 戲 裡 增 加 乘 除 加 減 來 提 升 遊 戲 的 樂 趣 肆 引 註 資 料 [1] 黃 世 陽 吳 明 哲 何 嘉 益 張 志 成 吳 志 忠 曹 祖 聖 編 著 (1998) Visual Basic 6.0 中 文 版 學 習 範 本 臺 北 市 : 松 崗 出 版 社 [2] 李 啟 龍 尤 信 翰 編 著 (2009) 資 料 結 構 與 程 式 設 計 臺 北 市 : 文 魁 資 訊 股 份 有 限 公 司 [3] 位 元 文 化 編 著 (2001) Visual Basic 遊 戲 設 計 實 務 臺 北 市 : 文 魁 資 訊 股 份 有 限 公 司 [4] 徐 毅 (2010) 主 題 式 Visual Basic 2008 專 題 製 作 臺 北 市 : 台 科 大 圖 書 [5] 洪 國 勝 (2010) Visual Basic 2010 程 式 設 計 與 專 題 製 作 臺 北 市 : 松 崗 圖 書 9