1
中華大學
資訊工程學系
Android 手機應用 程式設計專題報告
指導老師:陳建宏 老師
專題組員:溫庭榮、林志嘉、王祖祥、林姿妤 專題編號: PRJ2012-CSIE-10119
執行時間:民國 101 年 3 月~102 年 6 月
2
摘要
本專題其目的主要是透過開放式平台 Android 作業系統在手機上開發遊戲 程式,並透過藍芽傳輸介面來達到相互連線傳遞資料的可能性,再搭配手機所擁 有的感應器來達到「不需碰到螢幕即可遊戲」的多種功能,讓此遊戲演變成「不 用碰就能玩」的多樣化遊戲,使使用者遊玩的時候多增添了許多趣味性。
起初在「Game Maker」平台上面做了「小精靈」的遊戲,由於「小精靈」
這遊戲的主角「小精靈」很可愛,且遊戲過關方式單純、簡單、好上手,原想說 把這遊戲概念移植到 Android 平台上面來開發,卻發現「小精靈」的遊戲性略微 不足,且能運用到的感測裝置也不多,後來就因「富甲天下系列」的遊戲性影響,
決定以「大富翁」為遊戲主題來開發,並沿用其獨特的遊戲豐富性、趣味性,再 運用現在的行動裝置及感測器的多樣化,來更豐富這「大富翁」。
3
目錄
摘要...2
目錄...3
壹.簡介...5
1.1 研究動機...5
1.2 研究目的...5
1.3 專題分工與時間分配表...6
貳.專題背景介紹...7
2.1 開發環境介紹...7
2.2 開發系統介紹...7
2.3 大富翁遊戲內容介紹...10
參.專題設計方式...11
3.1 重要元件的應用...11
3.2 程式運作流程圖...15
3.3 主要功能演算法...26
3.3.1 藍芽...26
3.3.2 畫面顯示...28
3.3.3 感應器的運用...33
肆.主要成果...36
4
伍.問題與解決方法...36
陸.專題製作心得...37
柒.結論與未來展望...37
捌.致謝...38
玖.參考文獻...38
5
壹.簡介
1.1 研究動機
現今的生活當中已經不再像是過往使用黑金鋼聯繫的時代,手機的使用漸漸 的在我們周遭發生不一樣的變化。尤其是智慧型手機的功能上,不光是顛覆過往,
更是成為日常不可或缺的一項電子產品,並且它也已經取代了傳統成為目前的主 流。在目前智慧型手機市場的高佔有率的現況下,也漸漸改變人們使用手機的習 慣,從原本單純聯繫的電話轉變成藉由手機與手機之間的互動,進而發展出另一 種人與人之間的互動模式,成了生活裡習慣的一部分。
於近年來,隨著Android平台的推出,Android SDK套件提供完整的API,讓 程式開發者可以在這塊領域上盡情發揮。各家手機廠商投入Android手機軟硬體 的開發,如此普遍的情況以及趨勢下,Android APP的開發也日漸茁壯。Android 原始碼在網路上以及許多書籍中都達到高度的開放,方便撰寫、研究開發各種應 用程式。
目前大多數的 Android 遊戲都為單機遊戲的形式為主,手機上的遊戲與其他 使用者互動的遊戲仍然不多。這也激起我們想開發互動式遊戲的想法 ,讓遊戲 不在只是獨樂樂,也可以和親朋好友一起眾樂樂。
1.2 研究目的
此遊戲可讓使用者等車、搭車、無聊之時可隨手拿起手機來遊玩,其獨特的 擲骰子、蓋房子、獨特事件格,皆不需「觸控」到螢幕即可完成此動作,並可透 過藍芽傳輸介面來達成多人連線遊戲,使用者可以在遊玩的過程中因獨特的玩法 而得到無限的樂趣;在未來的科技裡,也許這種「no-touch」的感應方式可以超 越聲控感應的穩定度,並帶領科技業者們新的流行趨勢。
6
1.3 專題分工與時間配表
專題分工:
時間分配表:
工作 人員
報告及 Android 程式設計開發 溫庭榮 Android 程式設計開發
程式測試與偵錯 王祖祥
蒐集資料 林志嘉
報告製作 林姿妤
月份 工作內容
3 月
4 月
5 月
6 月
7 月
8 月
9 月
10 月
11 月
12 月
1 月
2 月
3 月
4 月
5 月
6 月 搜集資料 V V V V V V V V V V
學習相關軟
體應用 V V V V V V V V V V V V V
程式開發 V V V V V V V
實作與整合 V V V
測試與偵錯 V V
問題討論 V V V V V
影片拍攝 V
書面報告製作 V
預定進度
累計百分比 5% 10% 15% 20% 25% 30% 35% 40% 45% 50% 55% 60% 70% 80% 90% 100
%
7
貳.專題背景介紹
2.1 開發環境介紹
Eclipse是著名的跨平台的自由整合適開發環境(IDE)。最初主要用來Java語言 開發,但是目前亦有人透過外掛程式使其作為C++、Python、PHP等其他語言的 開發工具。
Eclipse的本身只是一個框架平台,但是眾多外掛程式的支援,使得Eclipse 擁有較佳的靈活性。許多軟體開發商以Eclipse為框架開發自己的IDE。
Eclipse 是開放原始碼的專案,你可以到 www.Eclipse.org 去免費下載 Eclipse 的最新版本,一般 Eclipse 提供幾個下載版本:Release,Stable Build,Integration Build 和 Nightly Build。Eclipse 本身是用 Java 語言撰寫,但下載的壓縮包中並不 包含 Java 執行環境,需要用戶自己另行安裝 JRE,並且要在作業系統的環境變 數中指明 JRE 中 bin 的路徑。
Eclipse 的設計思想是:一切皆外掛程式。Eclipse 核心很小,其它所有功能 都以外掛程式的形式附加於 Eclipse 核心之上。Eclipse 基本核心包括:圖形 API (SWT/Jface), Java 開發環境外掛程式(JDT),外掛程式開發環境等。
2.2 開發系統介紹
「Android」是一個以 Linux 為基礎的半開放原始碼作業系統,主要用於行 動設備,由「Google」成立的 Open Handset Alliance(OHA,開放手機聯盟)
持續領導與開發中。Google 透過官方網上商店平台 Google Play,提供應用程式 和遊戲供用戶下載,截止至 2012 年 6 月,Google Play 商店擁有超過 60 萬個官 方認證應用程式。同時用戶亦可以通過第三方網站來下載。2010 年末數據顯示,
僅正式推出兩年的 Android 作業系統在市場佔有率上已經超越稱霸逾十年的諾基 亞 Symbian 系統,成為全球第一大智慧型手機作業系統。
8
本專題是採用 Android 2.3.3 的版本,Android 2.3.3 是開發當時大眾最 穩定的版本所以以此版本做開發。
以下為 2.2.1 跟 2.3.3 的比較表:
2.2/2.2.1 (Froyo)
基於 Linux Kernel 2.6.32
2010 年 5 月 20 日,2.2(Froyo 冷凍優格)版本軟 體開發套件發佈。主要的更新如下:
支援將軟體安裝至擴充功能內存
整合 Adobe Flash 10.1 支援
加強軟體即時編譯的速度
新增軟體啟動"快速"至電話和瀏覽器
USB 分享器和 WiFi 熱點功能
支援在瀏覽器上傳檔案
更新 Market 中的批次和自動更新
增加對 Microsoft Exchange 的支援(安全政策, auto-discovery, GAL look-up)
整合 Chrome 的 V8 JavaScript 引擎到瀏覽器
加強快速搜尋小工具
更多軟體能透過 Market 更新,類似 2.0/2.1 中 的 Map 更新
速度和效能最佳化
註:部分標稱為 2.2 的韌體仍然在使用 2.6.29 的核 心。這種韌體可以實作大部分 2.2 的功能(比如 flash),但效能上與 2.6.32 有一定差距。
9 2.3
(Gingerbread)
基於 Linux Kernel 2.6.35
2010 年 12 月 7 日,2.3(Gingerbread 薑餅)版本 軟體開發套件發佈。主要的更新如下:
修補 UI
支援更大的螢幕尺寸和解像度(WXGA 及更 高)
系統級複製貼上
重新設計的多點觸控式螢幕幕鍵盤
原生支援多個鏡頭(用於視訊通話等)和更多 感測器(陀螺儀、氣壓計等)
電話簿整合 Internet Call 功能
支援近場通訊(NFC)
強化電源、應用程式管理功能
新增下載管理員
最佳化遊戲開發支援
多媒體音效強化
從 YAFFS 轉換到 ext4 檔案系統
開放了螢幕截圖功能
對黑色及白色的還原更加真實
Google Talk 視訊功能
Android 2.3.3 更新包於 2011 年 2 月 9 日正式發布,僅針對上一個版本進行 了 API 改進,其他無變化。
10
2.3 大富翁遊戲內容介紹
此遊戲內容主要以「大富翁」為主,大富翁是一種多人策略圖版遊戲。參賽 者分得遊戲金錢,憑運氣(擲骰子)及交易策略,買地、建樓以賺取租金。英文 原名 monopoly 意為「壟斷」,因為最後只得一個勝利者,其餘均破產收場。遊戲 的設計當初旨在暴露放任資本主義的弊端,但是推出之後卻受到大眾歡迎。
美國 Parker Brothers 於 1935 年 11 月 5 日發售大富翁。英國版於 1936 年由 Waddington Games 推出。大蕭條時的大富翁在美國漸受歡迎。
大多數人認為大富翁由 Charles Darrow 發明,為的是向國會提出資本主義的 弊端,財主壟斷市場,小商戶鬥不過大企業,卻想不到這遊戲會受大眾歡迎。
早於 1904 年,Lizie J. Magie 已經為一種類似的遊戲大地主遊戲(The Landlord's Game)申請專利。此遊戲則發展成為不同的版本。
而現今手機遊戲上的大富翁預設多幅地圖,以擲骰點數前進,並有多種道 具、卡片使用,另外觸發一些「特別事件」。主要通過購買房產,收取對方的過 路費、租金,來導致對手破產。
11
參.專題設計方式
3.1 重要元件的應用
在元件的應用上,透過以下應用來完成遊戲每項功能的使用。
(1)Activity 的應用:
一個 Activity 就是用來處理使用者直覺的操作介面的元件,不同的 Activity 可以擁有不同的操作介面,且 Activity 跟 Activity 之間可以互相溝通。
(2)Intent 的應用:
Intent 是元件之間通訊溝通的橋樑,透過 Intent 物件將訊息傳遞,Intent 主要是執行於相同或不同的 Activity、Service 和 Broadcast Receiver 元件之間,
其作用的機制也不相同。
(3)Canvas 的應用:
Canvas 都是在 graphics 類別底下,都是屬於跟圖片處理相關的類別,在遊戲 製作中裡扮演很重要的腳色,Bitmap 可以將圖片的像素儲存,並利用 Canvas 來 管理儲存在 Bitmap 裡的圖片,遊戲場景都是透過 Canvas 來著色上去的。
(4)Gesture 的應用:
在 Android 的系統當中,在手勢的識別上,是透過
GestureDetector.OnGestureListener 來實現的,所有的 View 都可以透過 setOnTouchListener()、setOnKeyListener()等方法來對某一件事情監聽。
在遊戲的操作上,我們一共有三種手勢由左往右滑、由右往左滑以及輕觸 螢幕,由左往右和由右往左是分別抓取起點跟終點的 X 座標去計算,利用此 手勢去切換選擇人物與地圖……等等,利用輕觸螢幕去執行遊戲中的動作。
12 (5) SurfaceView 類:
SurfaceView 類繼承自 VIEW,但它與 VIEW 不同,VIEW 是在 UI 的主線程 中更新畫面的,而 SurfaceView 是在一個新的線程更新畫面,VIEW 的特性決定 了其不適合做動畫,因為如果更新畫面時間過長,那麼主 UI 線程就會被正在畫 的函數中斷住,所以在 Android 中通常用 SurfaceView 顯示動畫效果,相當適合 許多 Game 的製作
(6)Orientation 感應器:
Orientation 感應器可以讀取以手機為座標中心的三軸轉動角度,也就是 Direction、Pitch 和 Roll,Direction 是以手機正面向上法線(Z 軸)為軸旋轉,Pitch 是以手機中間橫向(Y 軸)為軸旋轉,Roll 是以手機中間直向(Y 軸)為軸旋轉,我 們在專題只用到 Pitch 和 Roll 的量值,在程式中 Pitch 的值代表 forward 的前進向 量量值,Roll 代表的 turn 是轉彎向量量值。
SensorEventListener 說明:
資料 意義 資料範圍
event.value[0] Direction 0~359 event.value[1] Pitch -180~180 event.value[2] Roll -90~90
我們從 X、Y、Z 軸的變化量特別定義了搖晃到一定程度便會執行擲骰子的 動作,其他也有判斷往前傾斜、往後傾斜、往左傾斜、往右傾斜來執行遊戲裡的 動作。
13 (7)bluetooth 的應用:
Android 的藍芽物件定義在 Android.bluetooth 底下,BluetoothAdapter 類別主 要是控制手機藍芽裝置功能和取得手機系統上的藍芽裝置。
BluetoothDevice 類別是表示遠端的藍芽裝置;BluetoothSocket 類別表示 Cluent 端傳輸介面;BluetoothServerSocket 表示 Server 端連接介面,這種運作 方式和網路 TCP Socket 非常相似。
1.要使用藍芽設備,必頇在 AndroidManifest.xml 註冊使用權限
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
2.利用 BluetoothAdapter.getDefaultAdapter()方法來取得本地端的藍芽裝置,
再來就是要啟動藍芽裝置,可以利用 isEnabled()去檢查藍芽是否有沒有啟動,沒 有的話可以利用動作 Intent:ACTION_REQUEST_ENABLE 並且搭配
startActivityForResult()來啟動本地的藍芽裝置。
3.可以呼叫 getBondedDevice()方法來找到以前曾經配對過的裝置,它會回覆 一組 BluetoothDevice,從 BluetoothDevice 可以取得一個 MAC address 來建立一 個連接,並且可以利用 startDiscovery 來搜尋附近的藍芽裝置。
4.實作 Server 端:呼叫 listenUsingRfcommWithServiceRecord(),取得
BluetoothServerSocket 實體物件,並且呼叫 accept()方法監聽遠端藍芽裝置的連線 請求,當接受到遠端藍芽的連線請求,accept()方法會回傳一個實體物件
BluetoothServerSocket,利用該物件建立連線串流,當連線已經建立就呼叫 close() 關閉端口。
5.實作 Client 端:從搜尋或已經配對的藍芽裝置的 MAC,呼叫
BluetoothAdapter 物件實體的 getRemoteDevice(String MAC)方法,傳回指定連接 遠端的 BluetoothDevice(遠端的 Server),接著呼叫遠端 BluetoothDevice 物件的 listenUsingRfcommWithServiceRecord()方法取得實體物件,再利用
BluetoothSocket 物件實體的 connect()方法與遠端 Server 建立連線,建立連線之後,
14 就可以開始藉由串流傳送資料。
6.當藍芽連線已經建立,就可以用 IuputStream 和 OuputStream 來處理透過 socket 的資料,讀寫資料給串流是透過 read(byte [])與 write(byte [])。
(8)Handler 的應用:
Handler 類別主要用於應用程式的主執行緒同使用者自己新建的執行緒進行 通訊,應用程式在主執行緒中維護一個訊息佇列。Handler 機制使得執行緒之間 的通訊透過 Message 和 Runnable 物件來傳遞和處理。Handler 在主要的用法就是 安排 Message 和 Runnable 物件使其在未來的某個時刻被處理或執行。
我們利用藍芽傳遞的訊息,就是透過 Handler 利用 Message 將這些訊息傳遞 出去再做處理。
15
3.2 程式運作流程圖
(1)在一開始讓藍芽開啟後,手機裝置偵測於本地的藍芽裝置後,按下玩 家要連線的裝置。
(2)按下確定連線之後就畫面右上角就會顯示 connecting,一但連線成功 便會顯示 connected to 連接上的裝置名稱,由被連接的玩家為 player1,連接的玩 家為 player2。
16
(3)點選開始遊戲後,player1 進入選擇角色畫面,一共有 4 位角色可以選 擇,接著由 player2 進入選擇角色畫面。
(4)接著 player1 進入選擇地圖畫面,一共有 2 張地圖可以選擇,而這時 player2 是進入 waiting 畫面等待 player1 選擇完地圖和模式。
17
(5)player1 選擇完地圖後,接著進入選擇模式畫面,一共有三個模式,分 別是:1.金錢數率先達到一千萬、2.100 回合數金額最高、3.一方玩家破產後由另 一方獲勝。
(6)player1 選擇完地圖以及模式後便後開始遊戲,此時 player2 讀取到地 圖以及模式資訊後也從 waiting 畫面進入開始遊戲。
18
(7)進入大富翁遊戲畫面後,由 player1 開始第一回合,可以選擇使用道具 干擾對手或是擲骰子來決定玩家停留的格子,而所停留的格子種類不同有相對應 的事件發生。
(8)格子種類以及道具:
下列介紹格子種類:
可購買的空地:
當玩家走到空地時,可以自行決定是否購買空地的所有權。持有土地的 所有權才可以對其他玩家收取過路費。
19 房屋:
一但有了該土地的所有權,當第二次以後再停留該土地上時可以選擇 是否要購置房子,甚至已經建構過的房子可以在升級。
機會/命運:
走到此格子時,會隨機從眾多事件中來擇一發生會產生不可預期的 結果。
下列介紹會發生的事件
1. 暫停事件:一旦觸發此事件將會有 1~3 回合之間無法做出任何動作
20
2. 監獄事件:一旦觸發此事件將會被關進監獄 1~3 回合無法做出任何 動作,結束後從監獄出發
3. 旅行事件:一旦觸發此事件將會移動到特定格子
4. 增加金錢事件: 一旦觸發此事件會獲得金錢
21
5. 減少金錢事件: 一旦觸發此事件會減少金錢
過路費:
持有此土地所有權的玩家將會收取過路費,會依照土地的狀況來收取過 路費。
22 銀行:
經過銀行可以進行存款提款的動作,存在銀行的存款可以藉由一定比例 的利息增加。
空地:
這類型的土地不能購買,也不會有任何狀態。
下列介紹可使用的道具:
道具一:可使用道具使對方暫停 1~3 個回合數。
23
道具二: 可依照自已需求指定要移動的步數(1~6 步數)。
(9)以上事件擇一發生或使用道具後結束回合,將會檢查是否有達到模式選 擇下結束遊戲的條件,若是沒有將會輪到 player2 玩家。
(10)Player2 玩家也可以選擇使用道具干擾對手或是擲骰子來重複以上動作,
若是沒有達到結束遊戲的條件,回合將會以此模式輪流直到達到結束遊戲的條件 產生贏家為止。
24
藍芽連線流程圖:
25
遊戲運作流程圖:
26
3.3 主要功能演算法
3.3.1 藍芽:
1.一進入 APP 程序便會開啟藍芽功能,有藍芽權限的要求,並確定開啟 藍芽應用。
2.按下"是"之後,會開啟藍芽功能,並且等待連線。
3.如果是第一次跟另外藍芽裝置做連線,可以選擇讓本地端被搜尋,讓 其他裝置來搜尋取得 MAC address,以便做連線。
4.等待連線當中,本身會先處於被動的狀態下會先執行AcceptThread 的執行緒先假設每臺裝置都有可能想要跟它做藍芽連線。若是主動按下 menu 鍵可以主動與其他裝置作連接,主動連線的一端會先關閉
AcceptThread 的執行緒接著執行ConnectThread的執行緒去嘗試作連接,
畫面上會顯示Connecting。
5.此時按下連接的那端我們將設定他為 Client 端,而被動同意連線的 一端我們設定為 Sever 端,以方便我們區別玩家的連線狀態來傳遞資訊。
6.一但成功連線之後就會同時關閉AcceptThread 和 ConnectThread 的 執行緒,此時Sever 端與 Client 端同時執行ConnectedThread 的執行緒,
同時在我們的畫面上便會顯示 Connected to 連線上的裝置,我們這時就 可以做資料上的傳遞了。
7.兩方在這個時候都拿到這次藍芽溝通專用的 BluetootheSocket,
Socket 相當於一個連接彼此的接口,彼此利用 BluetoothSocket 互相做 資料傳輸,資料傳輸利用 InputStream 和 OutputStream 並透過旗下的 write(byte [])和 read(byte [])在做 2 隻藍芽裝置的溝通。
8.write(byte [])和 read(byte [])都只能讀取
byte array,我們所需要傳遞的 資料都是以 integer 資料型態為主,因此我們需要將要傳遞的 integer 資料型 態轉變成 string 型態再用 getbyte()的方法放進 byte array 寫入到
write(byte [])
,再由
read(byte [])讀取到傳遞到的byte array 轉回成 string,再使 用
Integer.parseInt()變成我們所需要integer 資料型態。
9.接收到資料後我們先區分Sever 端和 Client 端在不同的遊戲狀態下 所接收到不同的值做出相應的動作。
27 程式碼如下:
28 3.3.2 畫面顯示
與 SurfaceHolder.Callback 相關聯的三個程序 : public void surfaceCreated(...) 當畫面建立時使用 public void surfaceChanged(...) 當畫面改變時使用 public void surfaceDestroyed(...) 當畫面結束時使用
場景畫面的呈現,利用 bitmap 將讀進來的顏色圖片存成 bitmap 型態,在利用 canvas 類別當中的 drawBitmap 這個方法將整個遊戲場景 著色。
如何讓一個動畫產生?
就是在短時間內不斷的更新圖片和座標,來產生一個連續的畫面,即為 動畫。而我們在產生畫面時,我們寫了一個 draw()來產生畫面。
其中裡面分別產生的畫面有:
1.選單介面 a.背景圖。
b.按鈕圖(I want play a game、exit)。
2.選人物 a.背景圖。
29 b.左右箭頭圖(可切換角色)。
c.確認圖。
3.選地圖(只有在伺服端才會顯示) a.背景圖。
b.左右箭頭圖(可切換地圖)。
C.確認圖。
4.等待畫面(只有在客戶端才會顯示) a.Waiting 圖。
5.遊戲進行
a.背景(草地、道路、蓋房子格、房子)。
、 、 、 、 b.角色。
30
c.視窗(事件、確認蓋房子、跳回選單介面)。
31 d.銀行。
地圖顯示方法:
利用二維陣列將地圖存取,
再利用 for 迴圈在螢幕上繪製出地圖。
地圖為必須先繪製的,
然後再覆蓋人物圖、房子圖、視窗…等圖片
32
public static int[][] taiwan_map= {
{11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11}, {11,11,11,11,11,11,11,11,11,2,2,2,2,11,11,11,11,11,11,11}, {11,11,11,11,11,11,11,11,11,1,1,1,1,11,11,11,11,11,11,11}, {11,11,11,11,11,11,11,11,1,1,0,0,1,1,2,11,11,11,11,11}, {11,11,11,11,11,11,11,1,1,0,0,0,0,1,11,11,11,11,11,11}, {11,11,11,11,11,2,1,1,0,0,9,0,2,1,1,2,11,11,11,11}, {11,11,11,11,11,11,1,0,0,0,9,0,0,0,1,2,11,11,11,11}, {11,11,11,2,1,6,1,7,0,9,9,0,8,8,1,11,11,11,11,11}, {11,11,11,2,1,0,0,0,0,9,9,0,8,8,1,2,11,11,11,11}, {11,11,11,2,1,0,0,9,9,9,9,8,8,8,1,2,11,11,11,11}, {11,11,11,2,1,1,0,0,0,0,9,8,2,1,1,2,11,11,11,11}, {11,11,11,11,11,6,9,9,9,0,9,8,8,6,11,11,11,11,11,11}, {11,11,11,11,11,1,1,10,9,0,0,0,0,1,7,11,11,11,11,11}, {11,11,11,11,11,1,9,9,9,9,2,0,1,1,2,11,11,11,11,11}, {11,11,11,11,7,1,1,1,0,8,1,1,1,11,11,11,11,11,11,11}, {11,11,11,11,11,11,11,1,1,0,1,11,2,11,11,11,11,11,11,11}, {11,11,11,11,11,11,11,11,1,1,1,2,11,11,11,11,11,11,11,11}, {11,11,11,11,11,11,11,11,11,2,11,11,11,11,11,11,11,11,11,11}, {11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11}, {11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11}, };
33
3.3.3 感應器的運用
取得 SensorManager 物件:透過 SensorManager 物件方能取得各種感應器 的資訊,而要取得該物件必須呼叫 Context 的 getSystemService(),並指定欲 取得的系統服務名稱。
實作 SensorEventListener:實作 SensorEventListener 的
onSensorChanged(),當感應器的值改變時會自動呼叫此方法,並傳入 SensorEvent 物件,透過該物件可以取得產生事件的感應器。
34
為指定的感應器註冊 SensorEventListener:呼叫 SensorManager 的 registerListener() 替指定的感應器註冊 SensorEventListener,當感應器的值 變化時,SensorEventListener 的 onSensorChanged() 才會自動被呼叫。
有了以上的條件之後就產生了我們需要的感應器,可以藉由實體手機感測到 不同的 X,Y,Z 軸的值做出相對應的遊戲內的動作。
當 X,Y,Z 軸到達一定程度的變化量時就會產生擲骰子的動作效果。
35
當我們需要選擇是或否的抉擇動作時,我們設定成「往左傾斜」為 YES 動 作,「往右傾斜」為 NO 動作,或是我們進入了銀行需要做出存款提款的動作時 設定時「往左傾斜」為存款動作,「往右傾斜」為提款動作。
當我們需要離開當前這個畫面的時候可以使用「往下傾斜」的動作來離開當 前畫面。
36
肆.主要成果
影片 demo
使用到的手機型號:Butterfly(X920d)
Sony Ericsson Ray(ST18i) Samsung Galasy S2(GT-I9100)
伍.問題與解決方法
Q:如何產生繪圖?
A:起初是用 view 來產生繪圖,後來面臨到畫面更新問題,而找到 SurfaceView 有 thread 可以刷新畫面。
Q:藍芽連線資料傳輸問題 ?
A:由於起初資料型態是 int 的,藍芽傳輸的資料型態只能用 byte 去做傳輸,但 只有字串才可以使用 getbyte(),所以我們就先把資料型態 int 的資料轉成 字串再使用 getbyte()來去達到資料傳輸出,而資料輸入時 getbyte()先轉 成字串,再轉回 int。
Q:蓋房子時如何判斷該格子是否可以蓋房子?
A:當人物每次移動時,需要判斷人物移動格的上下左右是否有可以蓋的 房子,而我們利用代碼的不一樣來區分土地等級,這樣有可以判斷該格子 是否可以蓋房子。
Q:如何增加遊戲的趣味性?
A:利用事件發生的機率來使玩家對隨機的事件產生意外的衝擊,進而增加趣 味性。
37
陸.專題製作心得
經過這次的專題製作發現不僅能培養學生發現問題、解決問題的能力,也 能培養溝通協調與團隊合作的能力,例如尋找研究問題、瞭解研究方法、收集資 料的方法、資料整理與分析、工作分配、時間管理、專題製作格式的認識,簡報 的技巧等。
因為我們是初次作專題製作研究,起初是先觀摩學長們的歷屆作品,讓我們 有了初步具體的概念以及有關研究法的書面資料,較能掌握專題的架構與格式,
以及專題參考資料的寫法。另外在製作的過程中,學生需要具備基本的電腦文書 處理能力,例如使用 WORD 排版、表格的呈現與繪製、PPT 的設計等,這些都 是專題製作的研究之一。
在製作專題過程中,雖然辛苦且投入了很多時間,尤其在這之中修改了不少 次,雖然覺得很挫折,但大家還是非常努力地完成。藉由這次的學習經驗,讓我 們體會到團結、訓練口才及表達能力的重要性,相信這對畢業後的我們會是一大 幫助,很感謝能有這次機會讓我們得知如何去做好一個報告及上台發表,使我們 受益良多。
柒.結論與未來展望
一開始從無到有,任何資訊都不大了解,後來冷靜下來跑去詢問了去年 專題製作的學長們,在他們給予的資訊與老師的教導有方之下,終於有了些許頭 緒,清楚的知道我們這次該做的主題與方向,進而再去摸索需要增加的項目和功 能,在某次老師的建議之下「no-touch」的概念就此衍生出來了。
只要有平衡的感應裝置,「no-touch」就可應用在此裝置上面,而在「no-touch」
的概念之下,未來很多科技也許可以利用此概念,來創造出勝於聲控的控制指令,
例如:開車不須碰觸方向盤,也許可利用3D座椅來控制車子前進的方向與速度,
進而減少肢殘人士開車方面的困擾與負擔。
相信在未來的科技進步之下,「no-touch」一定可以帶給人們更多的便利。
38
捌.致謝
本專題報告得以順利完成,首先要感謝陳建宏指導教授一路細心耐心的協 助幫助我們,且定時撥空出時間和我們討論本專題的製作,給予意見,讓本專題 得以順利完成。
其次,要感謝學校的學長提供我們關於專題上所需的相關資料及資源,使我 們的專題能順利進行。
也感謝組員們的分工合作及資料收集,在製作專題期間的陪伴及互相加油打 氣。
最後也要感謝學校所提供的書籍與設備,在專題製作過程中才能更加完整,
也能更順利的完成,在此本組特別的感謝,致上最高的敬意與謝意。
玖.參考文獻
Android 參考書:
新觀念 Android SDK 程式設計範例教本
Google ! Android 3 手機應用程式設計入門 第四版 參考網頁:
維基百科 Eclipse http://zh.wikipedia.org/wiki/Eclipse 維基百科 Android http://zh.wikipedia.org/wiki/Android 維基百科 Monopoly http://zh.wikipedia.org/wiki/Monopoly
台大批踢踢 AndroidDev 版:http://www.ptt.cc/bbs/AndroidDev/index.html android developer:http://developer.android.com/reference/java/lang/System.html