資訊管理系 專題成果報告 行動 APP 製作 節奏遊戲 Rhythm Stars 學生 : 黃政皓 謝瑋良 謝政宏 楊啟杰 李皓揚 本成果報告書經審查及口試合格特此證明 考試委員 : 指導老

Size: px
Start display at page:

Download "資訊管理系 專題成果報告 行動 APP 製作 節奏遊戲 Rhythm Stars 學生 : 黃政皓 謝瑋良 謝政宏 楊啟杰 李皓揚 本成果報告書經審查及口試合格特此證明 考試委員 : 指導老"

Transcription

1 中國科技大學 資訊管理系 專題成果報告 行動 APP 製作 -- 節奏遊戲 Rhythm Stars 學生 : 黃政皓 謝瑋良 謝政宏 楊啟杰 李皓揚 指導老師 : 陳瓊瑤 中華民國 105 年 5 月 中國科技大學

2 資訊管理系 專題成果報告 行動 APP 製作 節奏遊戲 Rhythm Stars 學生 : 黃政皓 謝瑋良 謝政宏 楊啟杰 李皓揚 本成果報告書經審查及口試合格特此證明 考試委員 : 指導老師 : 中華民國 105 年 5 月

3 目錄 目錄... 3 圖目錄... 4 致謝... 1 摘要... 2 第一章前言 APP 的發展與趨勢 研究動機 研究目的... 3 第二章文獻探討 APP 開發工具 節奏遊戲歷史 節奏遊戲介紹... 9 第三章研究探討 研究方法 ANDROID APP 開發工具說明 ANDROID APP 程式架構 ANDROID APP GUI 布局 ANDROID APP/JAVA 應用程式偵錯 第四章 ANDROID APP 音樂遊戲實作 RHYTHM STARS 音樂遊戲架構 畫面設計 程式設計 第五章團隊分工 團隊分工 進度規劃 第六章研究結果與心得 參考文獻 附錄 專題製作會議紀錄... 90

4 圖目錄 圖 1. ANDROID 開發環境... 4 圖 2. 1SIMON... 9 圖 3. REFLEC BEAT... 9 圖 4. MAIMAI 圖 5. 太鼓達人 圖 6. ANY BEATS 圖 7. CYTUS 圖 8. XML 中 LAYOUT 的類型 圖 9. LINEARLAYOUT 的排版 圖 10. TABLELAYOUT 的排版 圖 11. 本專題遊戲 APP 首頁 圖 12. 遊戲畫面 圖 13. 遊戲說明畫面 圖 14. 音樂天地畫面 圖 15. 遊戲成績畫面 圖 16. 註冊畫面 圖 17. 遊戲設定畫面 圖 18. 遊戲設定畫面... 50

5 致謝 感謝專題指導老師陳瓊瑤老師這幾個月下來的幫忙與指導, 我們製作的是音樂的節奏遊戲, 比起做其他類型的專題來的困難與麻煩 因為有她用心的幫我們找尋相關的程式與思考遊戲的配置與建構, 我們的專題作品才能夠完成 也感謝各位評審老師們, 提出你們的意見與鼓勵, 讓我們的專題作品可以改正錯誤的地方, 並且功能更加齊全 -1 -

6 摘要 行動裝置的實用性與便利性, 使得 APP 快速發展, 造就現今社會上的龐大市場, 因此我們希望能夠學習 APP 的製作, 了解 APP 的營運方式與增進 APP 的開發邏輯概念, 搭上這股時代的洪流 APP 目前主要分 IPHONE 及 Android 二大主流, 本專題選擇 Android 開發 Android APP 程式的 IDE 軟體, 簡易的有 App Inventor, 功能較完整的則有 Eclipse 及 Android Studio, 雖然 Google 即將不支援 Eclipse, 但由於圖書館及網路上參考資料仍以 Eclipse 為多, 故本專題選擇使用 Eclipse 作開發工具 遊戲類的 APP 在各大 APP 下載平台的下載量都是最高的, 所以我們以遊戲為出發點, 希望可以製作一款能夠讓大眾在閒暇之餘可以享受節奏快感的音樂遊戲 當實際進行開發後, 才發現其難度超出預期, 許多專業功能並非小組目前能力所能及, 故本專題選擇實現基本功能, 實作一簡單音樂遊戲 :Rhythm Stars -2 -

7 第一章前言 1.1 APP 的發展與趨勢手機軟體從翻天覆地的變化到進入我們的生活僅僅發生在這短短的幾年中 現代社會多數人持有行動裝置 ( 智慧型手機 平板電腦 ), 原習慣透過 Web 上網找 尋資訊的使用者逐漸轉移至行動裝置與 App 上 智能手機及其應用程序已經成為了我們日常生活中的重要組成部分, 並已極短的時間成為了我們幾乎不可缺少的一部分 或許你可以原諒自己上學堂不帶書, 但是你很難接受一個人出門不帶手機的事實 附近有什麼好吃的 路怎麼走 股票現在是漲還是跌? 過去這些當下的需求, 無法立即被滿足, 但是有了行動裝置之後, 立即搜尋 消費成為亟待滿足的新商機 隨著消費者停留在裝置上瀏覽網頁 閱讀 遊戲 社交活動等行為越來越普遍, 行動裝置用戶花在瀏覽 App 的時間已大幅超越網頁瀏覽 近年也出現有線智慧電視, 於目前提供給用戶的 APP 服務內容, 常見的包括影音服務 生活應用 休閒遊戲 股票證券等 身處移動裝置時代的我們, 看似正在被科技分離的更遠, 但實際上我們也正因為科技的進步與革新變得更加緊密, 協作交流更加日常化和便捷化 以下介紹幾種類型的 APP 應用於日常的實例 : 1. 社交性 APP: 讓大家即時掌握朋友現況, 也能立即傳達訊息, 很多公司也都會建立群組來交代事務, 甚至有專門交友的 APP 可以認識新朋友, 增進自己的人脈 2. 生活性 APP: 像是交通運輸的時刻查詢, 新聞與氣象新訊或是旅遊指南等, 現在只要有行動裝置, 這些都能一手掌握 3. 學習性 APP: 從前要利用時間看書 寫試題都要大本小本帶著走, 現在很多提供學習的 APP 可以讓大眾在閒暇之餘也能有效利用時間增進知識, 而且如果介面設計得宜, 也能更快找到重點, 帶來比書本更大的學習效益 4. 創作性 APP: 比如圖片編輯 APP 樂器模擬 APP 繪畫 APP 或是文件處理 APP, 這類 APP 能將一時的靈感記錄下來, 讓大眾可以隨心所欲的創作 有了這類 APP 就不怕錯失靈感, 能為社會增添幾分藝術色彩 5. 遊戲性 APP: 與其他平台的遊戲相比 APP 的客群年齡層相對較廣, 以輕鬆遊玩為主的玩家也比較多,APP 遊戲的小品風格可以讓玩家煞時間得同時能獲得樂趣與成就感 早些年的時候, 行動裝置尚未出現, 我們還很依賴電腦, 但是有一個非常普遍的現象就是, 每台電腦裡都會安裝至少一種殺毒軟體 比起 PC 端的各種應用軟體,APP 的無害化得到驗證, APP 的安全性讓移動終端用戶非常放心, 於是激起 -1 -

8 了 APP 開發者們的創業激情, 因為只要產品做得好, 就不用擔心用戶不下載 在 APP 面前, 每位用戶都是一個主體, 你可以建立帳戶,APP 專為你服務 開發者能夠根據不同的作業系統, 開發出各式各樣的應用程式 使得這些行動裝置, 能夠提供更多的功能 舉凡教育 娛樂 工具等各種多元的應用, 都可以透過開發者的巧思, 讓這些應用能夠執行在行動裝置上, 同時還可帶動硬體銷售 廣告支出與科技創新 面對日益激烈的行業競爭和愈加殘酷的淘汰機制, 儘管 App Store 與 Google Play 行動應用軟體數持續增加, 但並不代表開發人員或是開發團隊可以從中獲取更高利益 App 開發不能只著重於程式端的超高技能, 必須著重於 創意 設計 與 行銷 上, 才能有效開創高獲利的契機 例如 : 品牌業者的行銷預算將逐漸由傳統媒體轉移至行動領域, 利用新型態應用 App 進行實驗, 進而抓住行銷與銷售良機, 才能突破重圍突顯自家產品 提升品牌形象並維繫消費者忠誠度 著名 APP 遊戲 Angry Birds 而言, 售價僅 0.99 美元的小遊戲在世界各地持續發燒, 不僅遊戲下載排名經常佔據 App Store 的 Top25 榜上, 週邊商品與電影動畫也陸續推出, 獲得世界廣大消費者的喜愛 整體而言, 免費為目前最當道的商業模式, 對消費者來說, 不需支付分毫即 可享受 APP 的趣味便利性, 背後倚靠的是 APP 廣告的龐大市場 未來我們該如何 更好的設計和包裝自己的 APP 應用, 便成了很多業界人士最關心的事情之一 在 APP 的種類 數量節節攀升,APP 使用者的時間在被稀釋的同時, 他們的地位也得到了顯著提升, 用戶體驗被放在一個至關重要的位置 例如 :Facebook Android Market 及 App Store 等, 都因其平台開放性, 造就了大量 APP 百花爭豔的高度競爭市場, 不僅成就了平台本身, 開發商 消費者 廣告商, 甚至是第四方的廠商也都因此受惠, 形成了龐大商機 在未來, 這種趨勢依舊會只增不減, 極致的用戶體驗將成為 APP 開發者們的終極奮鬥目標 參考文獻 [1]~[11] 1.2 研究動機因為現在智慧型手機普及化 APP 是時下流行的軟體, 在遊戲類的 APP 下載方 面也是各類遊戲中最多的, 市場非常的龐大, 於是想體驗設計一個簡易 APP 節奏 遊戲,APP 也是很多獨立開發者能自由發揮 [ 創意 ] 的平台, 所以希望能夠正式上架 分享給大家我們的想法與提供大家一個休閒又富有挑戰性的遊戲, 也能藉此增進 自己對 APP 的開發概念, 與邏輯思考的能力, 期望可以透過此專題來更了解 APP 這個領域與這龐大的市場 當實際進行開發後, 才發現其難度超出預期, 許多專 -2 -

9 業功能並非小組目前能力所能及, 故本專題選擇實現基本功能, 實作一簡單音樂 遊戲 :Rhythm Stars 參考文獻 :[12]~[14] [18] 1.3 研究目的本專題計劃其內容包括 : 1. 自製一個手機節奏遊戲 APP 2. 此一 APP 可接受使用者設定音樂, 撥放各種類型的歌曲 3. 可搭配音樂節奏, 進行觸碰式遊戲 4. 遊戲介面包括會員管理 遊戲說明 音樂上傳 遊戲主體 玩家計分 -3 -

10 第二章文獻探討 2.1 APP 開發工具 2.1.1Android 系統 Android 作業系統是一個以 Linux 為基礎的開放原始碼行動作業系統, 要用於智慧型手機和平板電腦, 由 Google 成立的 Open Handset Alliance(OHA, 開放手機聯盟 ) 持續領導與開發中 系統架構 Android 系統是基於 Linux 核心開發, 使用 Java 作程式語言, 使介面到功能, 都有層出不窮的變化 除了核心之外, 則是中介層 資料庫元和用 C/C++ 編寫的 API 以及應用程式框架 Android 的應用程式通常以 Java 資料庫元為基礎編寫, 運行程式時, 應用程式的代碼會被即時轉變為 Dalvik dex-code ( Dalvik Executable), 然後 Android 作業系統通過使用即時編譯的 Dalvik 虛擬機來將其運行 目前 Android 的 Linux kernel 控制包括安全 記憶體管理 行程管理 網路堆疊 驅動程式模型等 下載 Android 源碼之前, 先要安裝其構建工具 Repo 來初始化源碼 Repo 是 Android 用來輔助 Git 工作的一個工具 圖 1. Android 開發環境 參考來源 : Android 開發 app - SlideShare -

11 Android 系統中的 Activity 等同於 J2ME 的 MIDlet, 一個 Activity 類別負責建立視窗, 一個活動中的 Activity 就是在 foreground( 前景 ) 模式, 背景執行的程式叫做 Service 兩者之間透過由 Service Connection 和 AIDL 連結, 達到複數程式同時執行的效果 如果執行中的 Activity 全部畫面被其他 Activity 取代時, 該 Activity 便被停止, 甚至被系統清除 View 等同於 J2ME 的 Displayable, 程式人員可以透過 View 類別與 XML layout 檔將 UI 放置在視窗上, 並可以利用 View 打造出所謂的 Widgets, 其實 Widget 只是 View 的一種, 所以可以使用 xml 來設計 layout 至於 ViewGroup 是各種 layout 的基礎抽象類別,ViewGroup 之內還可以有 ViewGroup View 的建構函式不需要在 Activity 中呼叫, 但是 Displayable 的是必須的, 在 Activity 中, 要通過 findviewbyid() 來從 XML 中取得 View,Android 的 View 類的顯示很大程度上是從 XML 中讀取的 View 與事件息息相關, 兩者之間透過 Listener 結合在一起, 每一個 View 都可以註冊 event listener, 例如 : 當 View 要處理使用者觸碰的事件時, 就要向 Android 框架註冊 View.OnClickListener 另外還有 Image 等同於 J2ME 的 BitMap 中介軟體作業系統與應用程式的溝通橋樑, 並用分為兩層 : 函式層和虛擬機器器 Bionic 是 Android 改良 libc 的版本 Android 包含了 Chrome 瀏覽器引擎 Surface flinger 是就 2D 或 3D 的內容顯示到螢幕上 Android 使用工具鏈為 Google 自製的 Bionic Libc Android 採用 OpenCORE 作為基礎多媒體框架 OpenCORE 可分 7 大塊 :PVPlayer PVAuthor Codec PacketVideo Multimedia Framework(PVMF) Operating System Compatibility Library(OSCL) Common OpenMAX Android 使用 Skia 為核心圖形引擎, 搭配 OpenGL/ES Skia 與 Linux Cairo 功能相當, 但相較於 Linux Cairo,Skia 功能還只是陽春型的 2005 年 Skia 公司被 Google 收購,2007 年初,Skia GL 源碼被公開, 目前 Skia 也是 Google Chrome 的圖形引擎 Android 的多媒體資料庫採用 SQLite 資料庫系統 資料庫又分為共用資料庫及私用資料庫 使用者可透過 Content Resolver 類別取得共用資料庫 Android 的中間層多以 Java 實作,4.4 版之前使用特殊的 Dalvik 虛擬機器器 Dalvik 虛擬機器器是一種 暫存器型態 的 Java 虛擬機器器, 變數皆存放於暫存器中, 虛擬機器器的指令相對減少 5.0 版起改用 Android Runtime(ART) Dalvik 虛擬機器器可以有多個例項, 每個 Android 應用程式都用一個自屬的 Dalvik 虛擬機器器 -5 -

12 來執行, 讓系統在執行程式時可達到最佳化 Dalvik 虛擬機器器並非執行 Java 位 元組碼, 而是執行一種稱為.dex 格式的檔案 目前的 Android 作業系統具有以下幾個功能 : 顯示布局 Android 作業系統支援更大的解像度,VGA,2D 顯示,3D 顯示都給予 OpenGL ES 3.0 標準規格 (4.3 版本開始支援 OpenGL ES 3.0), 並且支援傳統的智慧型手機 資料存儲 Android 作業系統內置 SQLite 小型關聯式資料庫管理系統來負責存儲資料 網路 Android 作業系統支援所有的網路制式, 包括 GSM/EDGE IDEN CDMA TD-SCDMA EV-DO UMTS Bluetooth Wi-Fi LTE NFC 和 WiMAX 資訊作為原設計給智慧型手機使用的作業系統,Android 作業系統原生支援簡訊和信件, 並且支援所有的雲端資訊和伺服器資訊 語言 Android 作業系統支援多語言 瀏覽器 Android 作業系統中內建的網頁瀏覽器基於 WebKit 核心, 並且採用了 Chrome V8 引擎 在 Android 4.0 內置的瀏覽器測試中,HTML5 和 Acid3 故障處理中均獲得了滿分, 並且於 2.2 版至 4.0 版之前能原生支援 Flash,4.0 版本後去除對 Flash 的支援 支援 Java 雖然 Android 作業系統中的應用程式大部分都是由 Java 編寫的, 但是 Android 卻是以轉換為 Dalvik executables 的檔案在 Dalvik 虛擬機上執行的 由於 Android 中並不自帶 Java 虛擬機, 因此無法直接執行 Java 程式 不過 Android 平台上提供了多個 Java 虛擬機供用戶下載使用, 安裝了 Java 虛擬機的 Android 系統可以執行 Java_ME 的程式 5.0 版 (Lolipop) 開始以 Android Runtime(ART) 取代 Dalvik 虛擬機 媒體支援 Android 作業系統本身支援以下格式的音訊 / 視訊 / 圖片媒體 :WebM H.263, H.264 (in 3GP or MP4 container) MPEG-4 SP AMR, AMR-WB(in 3GP container) AAC, HE-AAC(in MP4 or 3GP container) MP3 MIDI Ogg Vorbis FLAC WAV JPEG PNG GIF BMP 如果用戶需要播放更多格式的媒體, 可以安裝其他第三方應用程式 流媒體支援 Android 作業系統支援 RTP/RTSP(3GPP PSS, ISMA) 的流媒體以及 (HTML5 <video>) 的流媒體, 同時還支援 Adobe 的 Flash, 在安裝了 RealPlayer 之後, 還支援蘋果 -6 -

13 公司的流媒體 硬體支援 Android 作業系統支援識別並且使用視頻 / 相片攝像頭, 多點電容 / 電阻觸控螢幕, GPS, 加速計, 陀螺儀, 氣壓計, 磁力儀 ( 高斯計 ), 鍵盤, 滑鼠,USB Disk, 專用 的遊戲控制器, 體感控制器, 遊戲手把, 藍牙裝置, 無線裝置, 感應和壓力感測 器, 溫度計, 加速 2D 位位塊傳輸 ( 硬體方向, 縮放, 像素格式轉換 ) 和 3D 圖形 加速 多點觸控 Android 支援原生的多點觸控, 在最初的 HTC Hero 智慧型手機上即有這個功能 該功能是內核級別 ( 為了避免對蘋果公司的觸控螢幕技術造成侵權 ) 藍牙 Android 支援 A2DP,AVRCP, 發送檔案 (OPP), 存取電話簿 (PBAP), 語音撥號和 方送智慧型手機之間的聯繫 同時支援鍵盤, 滑鼠和搖桿 (HID) 多工處理 Android 作業系統支援原生的多工處理 語音功能 除了支援普通的電話通話之外,Android 作業系統從最初的版本開始就支援使用語 音操作來使用 Google 進行網頁搜尋等功能 從 Android 2.2 開始, 語音功能還可以用來輸入文字 語音導航等功能 無線共享功能 Android 作業系統支援用戶使用本機充當 無線路由器, 並且將本機的網路共享 給其他智慧型手機, 其他機器只需要通過 WiFi 尋找到共享的無線熱點, 就可以上 網 而在 Android 2.2 之前的作業系統則需要通過第三方應用或者其他定製版系 統來實現這個功能 截圖功能 從 Android 4.0 開始,Android 作業系統便支援截圖功能, 該功能允許用戶直接抓 取智慧型手機螢幕上的任何畫面, 用戶還可以通過編輯功能對截圖進行處理, 還 可以通過藍牙 / / 微博 / 共享等方式發送給其他用戶或者上傳到網路上, 也可 以拷貝到電腦中 eclipse Eclipse 是由 Open Source Community 所創建的開發軟體, 並被廣泛地使用在 許多不同的領域 例如 : 可作為 Java 應用程式與 Android App 的開發環境 大多數人都知道 Eclipse 是 Java 的 Integrated Development Environment(IDE) 至今, 它已佔據超過全世界 Java 開發環境市場的 50% Eclipse 計畫是由 Eclipse 基金會所管理 Eclipse 基金會是一個非營利性的組織, 大多由以科技公司為背景的成員所組成 -7 -

14 Eclipse 可由額外的附加功能擴充, 目前已有幾個 open source 的計劃案與公 司, 將額外的附加元件擴充至 Eclipse 中, 例如 :Android 開發 Eclipse 也可被 用在一般性用途的應用程式開發上 Eclipse 的優點 : 1. 從編寫 查錯 編譯 幫助等等各方面爲 Java 語言貼身定做 2. 可無限擴展的強大插件功能 3. 衆多公司 廠商 組織的鼎立支持 4. 開放, 自由, 免費 2.2 節奏遊戲歷史音樂遊戲是電子遊戲類型的一種 玩家配合音樂與節奏做出動作 ( 依畫面指 示按鈕 踏舞步 操作模仿樂器的控制器等 ) 來進行遊戲 通常玩家做出的動作 與節奏吻合即可增加得分, 相反情況下則會扣分或不計分, 部分作品甚至會因為 有類似血量限制的設定, 倘若失誤過多, 會強制結束遊戲 (Game Over) 此外某 些遊戲會要求一定的得分, 若無法達成則會結束遊戲 第一款 演奏音樂 的遊戲, 是電子遊戲之父拉爾夫 貝爾在 1978 年發明的一款叫做 Simon 的玩具 Simon 的每個按鍵對應一個固定的聲音, 在其發音後玩家需要根據記憶以同樣的順序按下對應的按鍵 音樂的三要素包括節奏 旋律 和聲, 只是通過記憶音素似乎並不能稱為真正的 音樂遊戲 真正被公認為音樂遊戲始祖的, 則是 1996 年 PS 平台上的啪啦啪啦啪 ( パラッパラッパー ), 這款遊戲確立了 根據節奏做出動作 的概念, 至今為止幾乎被所有的音樂遊戲所沿用 隨後 KONAMI 於 1997 年在街機平台推出 Beatmania 1998 年推出 pop'n music Dance Dance Revolution 等作品形成了 Bemani 系列, 使得音樂遊戲開始大眾化, 同時也慢慢走上核心道路 在音樂遊戲複雜化和高難度化的趨勢下,Namco( 現 BNGI) 於 2001 年推出了太鼓達人, 以其簡單的操作和可愛的角色在各地造成迴響 家用機和掌機方面也出現了 Mad Maestro 應援團 節奏天國等, 這些作為正統的音樂遊戲雖然都保留了核心的要素, 但在操作上已經越來越簡化 與此同時, 類似於 Cytus 這種面向普通玩家的非核心向休閒遊戲, 以及 Deemo 偶像大師 學園偶像祭等以音樂遊戲為外殼的其他類型遊戲也開始流行 [12]~[14][26] -8 -

15 電子遊戲之父拉爾夫 貝爾發明的一款叫做 Simon 的玩具 圖 2. 1Simon 參考來源 :Simon says game, 節奏遊戲介紹 REFLEC BEAT RB 並非是對特定樂器或音樂器材的模擬遊戲 而是引入了觸摸屏以及對戰的 要素 這也是 Bemani 系列裡首款使用觸摸螢幕設備的遊戲系列 融合了音樂遊戲以及氣墊球的遊戲理念, 配合音樂節奏, 將畫面上朝己方判 定線飛來的節奏標靶以觸控方式打回給對方, 以獲得的分數來與對手一較高低 [27] 我們所製作的節奏遊戲, 有很大的一部分是參考這款遊戲的星形判定 原本我們打算用它球到處亂彈跳的界面, 但是看似亂數的球彈到正確的位置, 有一定難度, 不過我們的星型判定, 最剛開始的原型是從這遊戲判定的中間三個點發想, 我們想要在一般的譜面上, 在多一點花樣於是參考於此 這遊戲的優點是他具有對戰功能, 能夠透過網路連線的方法和其他玩家共用 一個畫面, 一邊是藍色一邊是紅色, 勝者可以獲得比較多的獎勵, 裡面也有可以 擾亂對手的殺球這個特殊判定, 十分具有挑戰與趣味性 缺點是譜面十分複雜, 對於新手來說在對戰中會不斷敗北, 可能會因為挫敗 而不想玩, 當然複雜的畫面也是遊戲特色, 彈初學者會較難上手 -9 -

16 圖 3. Reflec Beat 參考來源 : Maimai MAIMAI 又稱洗衣機或舞萌, 是一款由 SEGA 開發的街機音樂遊戲, 對應智慧卡 為 Aime 機台的螢幕呈圓形, 玩家可以通過觸碰螢幕或按鍵來遊玩, 遊玩時圖形會從螢幕中心向外移動, 種類分別是環形的 TAP 兩個環形同時出現, 黃色的 EACH 角條形的 HOLD 和星條形的 SLIDE, 分數達 80% 以上便可以通關, 而遊玩時動作自然變得與跳舞一樣, 機台亦附設攝錄功能, 只要通過自設網站 maimainet 便可以將遊玩過程上載至 niconico 動畫 [31] -10 -

17 我們的譜面設計概念, 從中央飛出球體的概念是參考這款遊戲, 原本是想照 RB 的亂數彈跳去執行, 在製作過程中發現實行有難度, 才採取 maimai 球會從中心 點移動到判定點的做法 優點是它具有錄影功能, 可以錄製自己遊玩的畫面, 很少有大型機台會記錄 自己的遊玩畫面, 是很新穎的設計, 而且在遊玩時可以看到歌曲 PV, 使背景更生 動有趣 缺點是由於此遊戲太多滑動的動作, 會讓玩家玩久了以後感到手部的不適, 雖然有很多專業人士會戴上手套預防傷害, 但也因此讓沒玩過的人有這遊戲沒戴 手套玩不行的想法, 導致此遊戲的玩家增加量減少 圖 4. Maimai 參考來源 : 動漫新聞 太鼓之達人系列太鼓達人是一款於 2001 年起由南夢宮萬代 ( 原南夢宮 ) 發售的業務用街機音樂遊戲系列作品 遊戲玩法與科樂美的 Bemani 系列類似, 玩家需要配合音樂, 敲打機台上的日本傳統樂器 太鼓 的框體, 從而打出正確的節奏 這個系列後來還在 PlayStation 2 PlayStation Portable PlayStation Vita 任天堂 DS Wii 任天堂 3DS Wii U ios 上推出了家用版, 一般使用手柄按鍵進 -11 -

18 行遊戲, 但在 ios PlayStation 2 和 Wii 上也有專門推出的家庭用太鼓 (Tatacon) 操控設備, 使玩家可以在家庭中感受到街機的遊玩效果 [30] 太鼓達人可以說是一款適合全家大小的節奏遊戲, 可愛有趣的畫面 簡易的操作介面 各種類型的歌曲, 讓太鼓達人在節奏遊戲界有著超高人氣 我們也希望製作的節奏遊戲可以有各種類型的歌曲, 讓各個年齡層的人都可以體會遊戲樂趣 裡面我們有參照這遊戲的設定功能, 因為太鼓達人有家用主機的版本, 而且 歷史悠久, 設定功能適切的提供玩家需求 優點是操作簡單只有藍紅按鍵, 可以說是目前最適合全家遊玩的節奏遊戲, 在 wii 裡還能提供最多 4 人對戰, 而且每人都能選擇自己適合的難度 畫面會隨分數的改變而不同, 甚至還用成 RPG 的模式, 在對戰中電腦會干擾你的譜面畫面, 讓玩家措手不及, 還收入許多家喻戶曉 膾炙人口的歌曲, 增加遊戲的吸引力, 而且遊戲整體有種祭典的歡愉氣氛 缺點是因為歌曲數量多, 如果都要版稅, 成本會很高, 所以歌唱的聲音都會 另外錄製, 不是原版的歌聲, 我覺得這是很可惜的地方 參考來源 : 電玩巴士 PSV 中文網 圖 5. 太鼓達人 Any Beats Any Beats 是個網頁遊戲, 使用者可以用自己的 MP3 檔, 單純享受音樂遊戲的 快樂 完全不用自己設計, 網站會直接生成一個譜面給玩家遊玩, 十分方便 -12 -

19 玩法其實和上面 Dance Dance Revolution 一樣, 對應上面的四向箭頭, 抓對 節拍來遊玩的遊戲 也可以隨意更改判定譜面的出現方式與速度 [19] 打完以後, 也可以直接用 Twitter 或 Facebook 分享自己的成績跟曲目名稱 我們期望能像這遊戲一樣能夠分享自己的分數, 因為我們的開發程式也能連結 Twitter, 所以打算嘗試這項功能 優點是它可以上傳 mp3, 可以用玩家自己喜歡的歌, 遊戲背景的圖也可以自己 找, 譜面速度與按鍵出現方式也能自己設定, 而且這網站完全免費 缺點在因為是讀取 mp3 自動生成, 這種方式做出來的譜面, 通常會對不太到 音樂, 常常會有音樂與譜面是分開的玩起來就比較沒有爽快與成就感, 趣味性大 大降低 圖 6. ANY BEATS 參考來源 : ANY BEATS 截圖 Cytus 是由台灣雷亞遊戲 (Rayark) 開發的一款音樂遊戲 遊戲的 ios 版本於 2012 年 1 月 12 日在全球的 App Store 上架 玩家需要隨著遊戲介面中, 上下移動的掃 -13 -

20 描線來適時演奏對應音符 遊戲中有三種拍點按鈕 : 點擊音符 (Click Note), 長 按音符 (Hold Note) 和拖動音符 (Drag Note) [29] 這款遊戲可以說是我們打算做節奏遊戲 APP 的啟蒙, 因為平台一樣是手機, 也是首款質量如此優越的節奏手遊, 在遊戲界面的布置, 有些部分也是參考於這 款遊戲 優點是每首歌曲都是原創或改編的, 能帶有新鮮感, 而且插圖都很漂亮, 很 有藝術性, 在視覺衝擊上加分很多, 而且有些歌曲插圖還有隱藏要素, 也是節奏 遊戲前所未見的獨特設定 缺點是不知為何, 有時在遊玩時都會有按鍵比歌曲快的感覺, 在玩其他的節 奏遊戲比較沒有這種感覺, 可能是譜面判定的時間有點問題, 還有遊戲被分類為 十個章節, 而且選曲歌曲都要一個一個滑, 在章節與歌曲選擇時比較麻煩 圖 7. Cytus 資料來源 :Youtube 截圖

21 第三章研究探討 3.1 研究方法 3.2 Android APP 開發工具說明 SDK 說明 ( 軟體開發工具組 ) 是用來幫一個產品或平台開發應用程式的工具組, 由產品的廠商提供給開發者使用的 通常是某一家廠商針對某一平台或系統或硬體所發佈出來用以開發應用程式 的工具組, 在這個工具包裡面, 可能包含了各式各樣的開發工具, 模擬器等 API 說明 ( 應用程式介面 ) 以功能為導向的 " 方法 " 或 " 函式 " 清單, 每個 API 主要都是為了達成某特定功能所設計的 在同一個平台下的兩個不同東西 ( 程式 or 系統 ), 能取用對方的功能等等, 所以一個程式寫了一組函式, 讓同一平台的其他程式取用程式的功能, 那組函式就可以說是那個程式 or 某個函式庫, 對外開放的 API 通常 SDK 裡也會帶有很多 API, 用來調用一些系統平台程式提供的功能 例如說 : 視窗顯示, 圖形特效等等 3.3 Android APP 程式架構 src 目錄 : 存放著該專案執行時所需的 Java 程式檔案 res 目錄 : 專案所需的資源 ( 例如 : 文字 圖形與聲音檔案等 ) 以及與 Ul 設定有 關的 layout 檔案接存於 res 目錄的對應子目錄中, 要特別注意的是在此目錄內的 檔案名稱只能為小寫字母 數字 _( 底線 ).( 點 ) 以規則運算式來表示即為 : [a-z0-9_.] gen 目錄 : 存放著 R.java 檔案, 該檔案是根據 res 目錄內容而自動產生 ; 開發者 就是透過此檔案取得 res 目錄內的相關資訊, 無須修改 R.java 檔案, 因為 res 目 錄內的檔案內容一有更動, 就會重新產生改檔案 raw 目錄 : 存放音樂 音效相關的 mp3 檔案 drawable 目錄 : 提供圖形相關資源, 例如圖形檔案 ( 支援 PNG JPG GIF 檔案 ) layout 目錄 : 專門存放與 Ul 設計有關的 layout 檔案 ( 預設為 main.xml) values 目錄 : 存放 Ul 所需用到的文字 ( 預設為 string.xml) -15 -

22 3.4 Android APP GUI 布局行動裝置提供各種不同應用的程式, 讓使用者可以隨時執行一些工作 瀏覽 網頁和玩一些遊戲 因為螢幕尺寸的關係, 它不會像一般個人電腦上的應用程式, 需要設計一些很複雜的操作畫面 透過觸控螢幕的操作, 行動裝置應用程式提供 簡單與直覺的操作畫面, 通常不需要使用說明書, 就可以讓使用者順利的使用應 用程式 Android 是一個開放的作業系統, 這表示所有廠商都可以設計與製造各種使用 Android 作業系統的行動裝置, 這些裝置的螢幕尺寸和內建的設備, 並不是固定的 尤其是螢幕的尺寸和解析度, 會讓 Android 應用程式的畫面設計, 跟其它技術比較不一樣 一個設計良好的應用程式, 在螢幕是 3.4 吋 解析度是 480X800 的裝置上執行, 還有在螢幕是 4.7 吋 解析度是 1920X1080 的裝置上執行, 應用程式的畫面看起來應該是一樣的 Android 應用程式的畫面設計, 採取一種比較靈活的方式, 作法也跟其它技術 比較不一樣 這一章說明設計應用程式畫面的重要概念與方式, 學習使用各種 Android 畫面控制項和版面配置元件 設計使用者介面一般的 Android 應用程式, 通常需要提供一些畫面, 讓使用者執行操作或瀏覽資料 應用程式的畫面是使用一些 Android API 中的畫面物件組合起來的, 這些畫面 API 主要在 android.widget 套件下, 這個套件提供各種畫面元件的類別, 例如在應用程式畫面上的一個按鈕, 就是一個 Button 類別的物件 認識基本的畫面元件以後, 在規劃與設計應用程式的畫面時, 就可以製作規劃資料裡面, 可以決定使用哪些畫面元件, 例如用來顯示文字的 TextView 元件, 或是讓使用者輸入文字用的 EditText 元件 針對整個畫面的安排, 也會決定控制元件排列方式的畫面配置元件, 例如這個畫面適合使用 RelativeLayout 這種畫面配置元件 像按鈕或輸入這類元件, 需要在程式碼中設計按鈕的工作與讀取輸入的內容, 所以需要為它們取一個名稱, 這個工作也可以在規劃應用程式的畫面時就決定好元件的名稱, 在設計畫面與撰寫程式的時候, 會使用這些名稱執行一些設定 Android 跟畫面相關的元件在 android.view 和 android.widget 兩個套 件中 下圖顯示主要的套件和部份的元件類別 : -16 -

23 上面的類別圖形只有顯示少數幾個元件, 在 android.view 套件下的 View 類別, 是所有畫面元件的父類別 同樣在這個套件下的 ViewGroup 是所有畫面配置元件的父類別 它們各自有很多子類別, 提供各種畫面和配置元件 大部份的 Android 應用程式設計, 應該使用 XML 格式的畫面配置檔為 Activity 元件設計畫面, 它放在 res\layout 目錄下, 這是在這裡說明的主要設計方式 畫面元件的基本設定 Android 的畫面元件是 View 和 ViewGroup 的子類別, 提供各種應用程式畫面需要的元件 在畫面配置檔中設計應用程式的畫面, 是採用與這些與元件類別名稱一樣的標籤, 再依照需要加入一些設定, 所以跟程式設計的作法很不一樣 畫面配置檔一定要放在 res/layout 目錄, 檔案名稱必須是小寫的字母和底線, 副檔名一定是.xml 一個基本的畫面配置檔內容會像這樣: <?xml version="1.0" encoding="utf-8"?> <!-- 使用 Button 標籤, 設定整個畫面只有一個按鈕元件 --> <!-- xmlns:android="..." 這個設定一定要加在第一個標籤, 後面還有其它標籤的話, 就不用再加入這個設定 --> <Button xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:text="hello! GUI!" /> 這個畫面配置檔只有在畫面中加入一個按鈕元件, 它使用的是 Button 標 籤, 在 API 裡面也有一個名稱為 Button 的類別 設計好需要的畫面配置檔, -17 -

24 就可以在 Activity 元件的 oncreate 方法中, 呼叫 setcontentview 指定元件 使用指定的畫面資源 : public class TestActivity extends Activity protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // 設定畫面配置資源 // 指定的參數在 R.layout. 後面是檔案名稱 setcontentview(r.layout.activity_test); 不管是設計一個簡單或複雜的畫面, 對放到畫面中的元件, 都有一些基本而 且通用的設定, 在大部份的情況下, 一定要為畫面元件加入下列決定大小的設定 : android:layout_width: 設定畫面元件的寬度 android:layout_height: 設定畫面元件的高度 因為各種 Android 裝置的螢幕尺寸與解析度並不是一樣的, 所以在設定畫面元件的大小時, 應該要設定為 matchparent 或 wrapcontent 例如把元件的寬度設定為 matchparent 時, 這個畫面元件的寬度就會佔滿所用的空間 設定為 wrapecontent 的話, 會根據這個畫面元件自動調整為足夠顯示內容的空間 如果畫面中只有一個按鈕元件, 不同的設定組合會有不同的效果 : 這樣的設定方式, 讓應用程式的畫面在不同尺寸與解析度的螢幕顯示的時候, 看起來會是一樣的 你也可以為畫面元件指定固定的寬與高, 在設定的時候使用這些單位, 例如 android:layout_width= "120sp" : px: 螢幕畫素 dp: 每英吋畫面,160dp 為一英吋 sp: 和 dp 一樣, 不過會根據裝置設定的字型大小自動調整 in: 英吋 mm: 公厘 決定畫面元件的大小以後, 你可能需要設定與其它元件的間隔距離, 這個設定在畫面有比較多元件的時候, 可以讓所有元件不會黏成一團, 畫面看起來會好一些 這些是用來執行與其它元件的間隔距離設定, 使用上面說明的單位設定需要的間隔 : -18 -

25 android:margintop: 設定上方的間隔 android:marginbottom: 設定下方的間隔 android:marginleft: 設定左側的間隔 android:marginright: 設定右側的間隔 android:margin: 設定上 下 左 右為同樣的間隔 你還可以控制畫面元件內容的間隔距離設定, 讓一個元件的內容與它使用的空間有一點間隔, 元件本身看起來就不會那麼擁擠 這些是用來執行元件內容間隔距離的設定 : android:paddingtop: 設定內容上方的間隔 android:paddingbottom: 設定內容下方的間隔 android:paddingleft: 設定內容左側的間隔 android:paddingright: 設定內容右側的間隔 android:padding: 設定內容上 下 左 右為同樣的間隔 畫面元件還有一個可以控制內容位置的設定, 設定名稱是 android:gravity, 可以讓你比較容易把內容設定為需要的位置 下面是它的設定值 : top bottom left right: 設定畫面元件的內容對齊上 下 左 右 centervertical centerhorizontal: 設定畫面元件的內容對齊垂直或水平的中央 center: 設定畫面元件的內容對齊垂直與水平的中央 fillvertical fillhorizontal: 設定畫面元件的內容佔滿垂直或水平空間 fill: 設定畫面元件的內容佔滿垂直與水平空間 這些設定值也可以使用組合的方式, 例如希望把內容對齊下方的右側, 就可以設定為 bottom right, 多個設定值之間使用 隔開 這是一個設定效果的範例, 它使用一個佔滿整個畫面的 TextView 元件, 如果沒有設定的話, 預設的內容位置是在左上方, 使用一些不同的設定控制內容的位置 : 如果是可以顯示文字內容的畫面元件, 例如文字 (TextView) 按鈕 (Button) 或輸入 (EditText) 元件, 可以為它們加入文字內容與樣式設定 : android:text: 設定畫面元件的文字內容 android:textsize: 設定文字的大小 android:textappearance: 使用系統的預設值設定文字的大小, 設定的格式為?android:attr/ 設定值, 有 textappearancelarge ( 大 ) textappearancemedium( 中 ) 和 textappearancesmall( 小 ) 三種設定值 android:textcolor: 設定文字的顏色 -19 -

26 android:background: 設定背景顏色 使用畫面配置元件就算是一個簡單的 Android 應用程式, 大部份都會在一個畫面中使用多個畫面元件, 組合成應用程式需要的畫面, 一個畫面只有一個畫面元件的情況應該是不多的 所以你在規劃與設計應用程式的畫面時, 除了知道要使用哪一些畫面元件, 也要規劃好畫面使用配置方式, 就是決定所有需要的元件如何在畫面上排列 因為各種 Android 實體裝置的螢幕尺寸與解析度並不是一樣的, 所以畫面元件的排列 位置與大小也應該不是固定的, 應用程式在不同裝置運作的時候, 畫面看起來才會一樣 所以 Android 建議你應該使用 Layout 來設計畫面元件的排列方式,Layout 是 ViewGroup 的子類別,ViewGroup 是一種容器元件, 可以把其它元件放在這些元件裡面, 組合成需要的畫面 在規劃與設計應用程式畫面的時候, 應該就可以決定它們該使用哪一種 Layout Android 在 android.widget 套件中提供的 LinearLayout 和 RelativeLayout 是基本的 Layout 元件 LinearLayout 可以設定為依照水平 (horizontal) 或垂直 (vertical) 排列 RelativeLayout 使用畫面元件相對的位置來排列, 適合用在比較不規則的畫面元件配置 畫面元件放在這兩種 Layout 中的效果會像這樣 : 圖 8. Xml 中 Layout 的類型如果應用程式的畫面比較複雜一些, 這樣的 Layout 應該就不夠用了, 所以使用這些 Layout 的時候, 可以使用巢狀的方式組合成一個複雜的排列 例如這個畫面的排列方式, 在最外層使用垂直排列的 LinearLayout, 裡面又包含上下兩個 LinearLayout, 它們也可以依照自己的需求, 設定為垂直和水平排列 : -20 -

27 圖 9. LinearLayout 的排版 ViewGroup 還提供一種很常使用的 TableLayout, 它可以把畫面切割為表格, 你可以依照畫面的需求設定為像是 2X4 的區塊, 每一個區塊都可以放一個畫面元件, 如果需要的畫面不是一個固定的表格, 也可以調整它們的區塊 使用 TableLayout 排列的畫面會像這樣 : 圖 10. TableLayout 的排版 LinearLayout LinearLayout 可以提供比較簡單的畫面配置, 你可以設定它依照水平 ( 由左到右 ) 或垂直 ( 由上往下 ) 排列畫面元件 如果需要使用這種排列方式, 在畫面配置檔中加入 LinearLayout 標籤, 使用 android:orientation 設定排列的方式, horizontal 為水平, vertical 為垂直: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical 或 horizontal" > // 放在這裡的畫面元件會依照指定的方式排列 -21 -

28 </LinearLayout> 放在 LinearLayout 裡面的元件, 還可以設定它們佔用的空間比例, 這樣就可以讓這種看起來很單純的排列方式, 變得比較靈活一些 要設定元件佔用的空間比例, 使用 android:layout_weight=" 比例 ", 依照 LinearLayout 設定為水平或垂直排列, 設定元件的比例後, 它的寬或高就由比例來決定, 所以應該把元件的寬或高設定為 0dp 如果其中有一個元件沒有設定比例, 它會依照自己寬與高的設定決定大小, 其它空間再由比例決定各自的大小 搭配使用這些設定, 就可以很靈活的設定各種畫面的配置 : RelativeLayout 應用程式需要的畫面, 可能不會都是很規則的排列, 如果畫面元件的位置與排列比較複雜與不規則的時候, 就比較適合使用 RelativeLayout 這種排列方式 它可以讓你決定元件在畫面上位置, 還有設定元件與元件之間的相關位置與對齊方式 這種配置方式使用 RelativeLayout 標籤: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" > // 使用關聯的方式排列畫面元件 </RelativeLayout> 放在 RelativeLayout 標籤中的畫面元件, 可以依照畫面的需求, 決定自己在 畫面中的位置, 也可以設定自己與其它元件的相對位置 這些是在 RelativeLayout 標籤中的畫面元件可以使用的設定 : android:layout_ 位置 ="@id/ 元件名稱 ": 決定自己在指定元件的相對位置, 格式中的 位置 可以使用 above below toleftof 或 torightof, 依照順序表 示把自己放在指定元件的上方 下方 左邊或右邊 -22 -

29 android:layout_align 對齊 元件名稱 ": 決定自己和指定元件的對齊 方式, 格式中的 對齊 可以使用 Top Bottom Left 或 right, 依照順序表示把 自己的上 下 左或右對齊指定的元件 android:layout_alignparent 對齊 ="true flase": 決定自己與容器的對齊 方式, 格式中的 對齊 可以使用 Top Bottom Left 或 right, 設定為 true 的 時候, 依照順序表示把自己對齊容器的上 下 左或右 android:layout_center 對齊 ="true flase": 決定自己與容器對齊中央的方 式, 格式中的 對齊 可以使用 Horizontal Vertical 或 InParent, 設定為 true 的時候, 依序表示將自己對齊容器的水平中央 垂直中央或容器中央 搭配使用這些 RelativeLayout 提供的設定, 就算是比較複雜或不規則的畫面, 也可以很容易完成設計的工作 : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout > <TextView android:id="@+id/account" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="account: " android:textsize="24sp" /> <!-- 把自己放在 account 元件的右邊 --> <EditText android:id="@+id/account_value" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_torightof="@id/account" android:paddingleft="6sp" /> <!-- 把自己放在 account_value 元件的下方, 而且對齊容器右邊 --> <Button android:id="@+id/ok" android:layout_width="wrap_content" android:layout_height="wrap_content" -23 -

30 24 android:layout_alignparentright="true" android:text="ok" /> 27 <!-- 把自己放在 ok 元件的左邊, 而且上方也對齊它 --> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="cancel" /> </RelativeLayout> 這個畫面配置檔呈現的畫面會像這樣 : TableLayout ViewGroup 還提供一種很常使用的 TableLayout 畫面排列方式, 它可以把畫面切割為表格, 你可以依照畫面的需求, 把畫面切割為像是 2X4 的區塊, 每一個區塊都可以放一個畫面元件, 如果需要的畫面不是一個固定的表格, 也可以調整它們的區塊 這種畫面配置使用 TableLayout 標籤, 搭配 TableRow 標籤建立需要的表格 TableLayout 會控制畫面元件的寬與高, 所以在這個標籤中的畫面元件都不需要設定寬與高, 就算加入設定也不會有效果 : 1 2 <?xml version="1.0" encoding="utf-8"?> <TableLayout -24 -

31 xmlns:android=" id" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- 第一列 --> <!-- TableRow 不需要設定寬與高 --> <TableRow> <!-- 所有的元件都不需要設定寬與高 -->... </TableRow> <!-- 第二列 --> <TableRow>... </TableRow> </TableLayout> TableLayout 會管理與控制畫面元件的大小, 預設的情況, 畫面元件的寬度都 是 wrap_content 的效果 你可以在 TableLayout 標籤中加入這些設定, 執行 元件的寬度與是否隱藏的設定 : android:stretchcolumns: 放大指定的欄位寬度 第一個欄位是 0, 可以設定 多個欄位, 例如 1,3,5 ; 設定為 * 表示所有欄位 android:shrinkcolumns: 寬度不夠顯示所有內容的時候, 指定的欄位會自動 縮小 第一個欄位是 0, 可以設定多個欄位, 例如 1,3,5 ; 設定為 * 表示所 有欄位 android:collapsecolumns: 隱藏指定的欄位 第一個欄位是 0, 可以設定多 個欄位, 例如 1,3,5 ; 設定為 * 表示所有欄位 在 TableLayout 中加入 android:stretchcolumns 的設定, 可以讓指定的欄位 佔用較大的空間 -25 -

32 5-3-4 結合多種畫面排列元件以上 LinearLayout RelativeLayout 和 TableLayout, 單獨使用的時候, 在設計一些比較複雜的畫面時, 就比較不符合需求 不過只要是 Layout 元件都可以搭配使用, 所以在規畫與設計應用程式的畫面時, 如果想要設計一個比較複雜的畫面, 應該要把畫面上所有的元件切割成適合的區塊, 為每一個區塊挑選一個合適的排列方式, 最後再把它們結合起來 例如像這個計算機應用程式的畫面, 就會依照它們的需求使用 LinearLayout 和 TableLayout 組合成這樣的畫面 : 建立記事本應用程式主畫面 瞭解 Android 應用程式畫面的設計方式後, 現在要回到記事本應用程式, 為 它設計一個用來顯示所有資料的主畫面 : -26 -

33 這個畫面的需求並不會太複雜, 使用 LinearLayout 畫面配置元件就可以了, 安排畫面元件的時候, 最好幫它們設定邊界, 元件才不會擠在一起 開啟 res/values/dimens.xml, 加入需要的尺寸資源 : <resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> <dimen name="default_padding">6dp</dimen> <dimen name="title_txt_size">24sp</dimen> <!-- 加入邊界尺寸資源設定 --> <dimen name="default_margin">2dp</dimen> </resources> 接下來開啟 res/layout/activity_main.xml 檔案, 把它改為下面的內容 : <LinearLayout xmlns:android=" xmlns:tools=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".mainactivity"> <ListView android:id="@+id/item_list" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:layout_margin="@dimen/default_margin" -27 -

34 android:dividerheight="1sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" </LinearLayout> 執行這個應用程式, 看看它在模擬裝置中顯示的畫面 這個畫面中的 ListView 是用來顯示資料列表的元件, 目前還沒有為它設定任何資料, 所以看起來是空白 的 指定資料的工作必須在 Activity 元件的程式碼執行, 所以在畫面配置檔為 ListView 元件使用 android:id 為它設定一個名稱 開啟專案的 MainActivity.java, 修改為下面的內容 : package net.macdidi.at2; import android.os.bundle; import android.support.v7.app.actionbaractivity; import android.view.menu; import android.widget.arrayadapter; import android.widget.listview; public class MainActivity extends ActionBarActivity protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); // 為 ListView 元件設定三筆資料 -28 -

35 15 String[] data = { 16 " 關於 Android Tutorial 的事情 ", 17 " 一隻非常可愛的小狗狗!", 18 " 一首非常好聽的音樂!"; 19 int layoutid = android.r.layout.simple_list_item_1; 20 ArrayAdapter<String> adapter = 21 new ArrayAdapter<String>(this, layoutid, data); 22 ListView item_list = (ListView) findviewbyid(r.id.item_list); 23 item_list.setadapter(adapter); public boolean oncreateoptionsmenu(menu menu) { 27 // Inflate the menu; this adds items to the action bar if it is 28 present. 29 getmenuinflater().inflate(r.menu.menu_main, menu); return true; 執行這個應用程式, 檢查 ListView 元件是否顯示三筆資料 : -29 -

36 3.5 Android APP/Java 生命週期 資源分配 (Create/Destroy) 完整的 Activity 生命週期由 Create 狀態開始, 由 Destroy 狀態結束 建立 (Create) 時分配資源, 銷毀 (Destroy) 時釋放資源 可見與不可見 (Start/ReStart/Stop) 當 Activity 運行到 Start 狀態時, 就可以在螢幕上看到這個 Activity 相反地, 當 Activity 運行到 Stop 狀態時, 這個 Activity 就會從螢幕上消失 當使用者按下 Back 按鈕回到上一個 Activity 時, 會先到 Restart 狀態, 再到一般的 Start 狀態 使用者能否直接存取螢幕 (Resume/Pause) 當有個 Toast AlertDialog 簡訊 電話等訊息亂入時, 原來的 Activity 會進入 Pause 狀態, 暫時放棄直接存取螢幕的能力, 被中斷到背景去, 將前景交給優先級高的事件 當這些優先級高的事件處理完後,Activity 就改進入 Resume 狀態, 此時又直接存取螢幕 oncreate 在 Activity 物件被第一次創建時調用, 即通常用來做程式的初使化動作 onstart 當 Activity 變得可見時調用該函數 onresume 當 Activity 開始準備與用戶交互時調用該方法, 即把保存的資料拿回來使用 -30 -

37 onpause 當系統即將啟動另外一個 Activity 之前調用該方法, 即把需要保存的資料保存 onstop 當前 Activity 變得不可見時調用該方法 ondestroy 當前 Activity 被銷毀之前將會調用該方法, 即通常都拿來把 oncreate() 時的資料做釋放的動作 onrestart 當一個 Activity 再次啟動之前將會調用該方法 一般 Android Application 遵循的動作流程 : (1) 一般啟動 oncreate à onstart à onresume 啟動一個 Activity 的基本流程是 : 分配資源給這個 Activity(onCreate), 然後將 Activity 內容顯示到螢幕上 (onstart), 在一切就緒後, 取得螢幕的控制權 (onresume), 使用者可以開始使用這個程式 (2) 呼叫另一個 Activity onpause(1) à oncreate(2) à onstart(2) à onresume(2) à onstop(1) 先凍結原本的 Activity, 再交出直接存取螢幕控制權 (onpause) 的過程 直到 Activity 2 完成一般啟動流程後,Activity 1 才會被停止 (3) 回復原 Activity onpause(2) à onrestart(1) à onstart(1) à onresume(1) à onstop(2) à ondestroy(2) 按 Back 鍵可以回到原本的 Activity (4) 退出 / 結束 onpause à onstop à ondestroy 如果程式中有直接呼叫 finish 函式來關閉 Activity 的話, 系統會暫停 (onpause) 後停止 (onstop), 然後才是銷毀 (ondestroy) (5) 回收後再啟動 oncreate à onstart à onresume 被回收掉的 Activity 一旦又重新被呼叫時, 會像一般啟動一樣再次呼叫 Activity 的 oncreate 函式 多活動 (MultiActivity) 間之轉換設定 java 對應每個 xml setcontentview(r.layout.main); 然後取得每個 button btn_1 = (Button) findviewbyid(r.id.btn_1); 加上每個 button 對應的表單 case R.id.btn_1: -31 -

38 { Intent intent = new Intent(); intent.setclass (mainactivity.this, activity_a.class); startactivity(intent); 聲音播放 Android 中播放音樂有二類,SoundPool 與 MediaPlayer SoundPool 主要是用在極短聲音的音效, 利如遊戲中之撞擊聲 而播放音樂歌曲則是使用 MediaPlayer, 簡單說明如下 : 使用 MediaPlayer 播放音樂播放 Audio 檔案 將 Audio 檔案放到 res/raw 目錄內 呼叫 MediaPlayer.create() 來建立 MediaPlayer 的物件實體, 然後再呼叫 start() 即可播放 audio 檔案 //ring:audio 檔案名稱, 不用加副檔名 MediaPlayer mp = MediaPlayer.create(context,R.raw.ring) ; Mp.start(); 如欲暫停播放, 可以呼叫 pause() ; 暫停後如欲繼續播放可以再次呼叫 start(), 就會從上次的暫停點繼續撥放 如欲停止播放, 呼叫 stop(), 如果不再播放, 應該呼叫 release() Public class PlayResAudio extends Activity{ private MediaPlayer mp; // 播放器 private TextView tvinfo; // 訊息方塊 private Button btnplay; // 播放 按鈕 private Button btnpause; // 暫停 按鈕 private Button btnstop; // 停止 按鈕 private Boolean isstoped = true; //true Public void oncreate(bundle savedinstancestate) { -32 -

39 Super. oncreate(savedinstancestate); setcontentview(r.layout.main); findviews(); Private void findviews() { tvinfo = (TextView) findviewbyid(r.id.tvinfo); btnplay = (Button) findviewbyid(r.id.btnplay); btnpause = (Button) findviewbyid(r.id.btnpause); btnstop = (Button) findviewbyid(r.id.btnstop); // 按下 播放 按鈕 btnplay.setonclicklistener(new View.OnClickListener() { public void onclick(view view) { if(mp == null isstoped) { mp = MediaPlayer.create(PlayResAudin.this,R.raw.ring); isstoped = false; tvinfo.settext(getstaring(r.string.audiosource) + getstaring(r.raw.ring)); mp.start(); ); // 按下 暫停 按鈕 btnpause.setonclicklistener(new View.OnClickListener() { public void onclick(view view) { if(mp == null isstoped) return; mp.pause(); ); // 按下 停止 按鈕 btnstop.setonclicklistener(new View.OnClickListener() { public void onclick(view view) { if(mp == null isstoped) return; mp.stop(); -33 -

40 Protected void onpause() { Super.onPause(); If(mp!= null) { mp.release(); mp = null; 使用 SoundPool 播放音效建立 SoundPool 第一個參數 :SoundPool 不像 MediaPlayer 一個實體管理一個音樂檔案, SoundPool 可以一個實體管理多個檔案第二個參數 : 串流類型第三個參數 : 取樣品質, 預設用 0 SoundPool sound = new SoundPool(10, AudioManager.STREAM_MUSIC, 5); int OK = sound.load(this, R.raw.ok, 1); int OO = sound.load(this, R.raw.oo, 1); Step3: 播放音效 -> play() // 第二 三參數分別為左右喇叭的音量, 可用 0 到 1 // 第四參數固定用 0 // 第五個參數為播放次數,0 為不重複,-1 為無限重複 // 第六個參數為播放速度, 可用 0.5 到 2 sound.play(this.ok, 1, 1, 0, 0, 1); sound.play(this.oo, 1, 1, 0, 0, 1); Android 的服務連接 Service 本身是個無介面, 只單純提供功能讓其他元件 (Activity) 呼叫使用的元件, 如果有需要長時間執行的程序, 可以寫成 Service 元件提供其他人呼叫使用 -34 -

41 Service 本身並非一個獨立的 Process, 也不會脫離 Main Thread 獨立運作, 如果需要做長時間的運算, 為了不影響到主程式運作, 可以在 Service 內產生 Thread, 讓 thread 幫你作一些工作,Service 的子類別 IntentService 即是一個有自己 Thread 的 Service,Service 並無直接與使用者互動的介面 當 Service 元件被產生時, 一定會執行其 oncreate(), 如果有需要產生 Thread, 則同時產生新的 thread 當 Service 有被設定在 Manifest 上時, 就可以被自己與其他的 Activity 做存取, 也可以被其他 APP 使用 service, 此種情況需在他自己 App 的 Manifest 內的 uses-permission 作宣告 執行 Service 功能的兩種方式 startservice 當有元件呼叫 Context.startService(), 系統會讀取被呼叫的 Service( 產生 instance 並執行其 oncreate()), 然後將 client 所傳進來的 intent 帶進 Service 的 onstartcommand(intent, int, int) 內 這 service 會一直執行, 直到有人呼叫 Context.stopService() 或內部呼叫 stopself() 而停止 無論 Context.startService() 被呼叫了多少次, 如果要停止 Service, 只要執行一次 Context.stopService(), 或在 Service 內執行 stopself(), 就會被停止 如果是在 Service 內使用 stopself(int), 可以保證 intent 已經有被處理了, 才會被停止 對於已被啟動的 Service, 如果需要有不同的 Service 執行模式, 可以在 override onstartcommand() 時, 設定不同的回傳值 這回傳值常數已經被定義好 在 Service Class 內 1.START_STICKY: 當 Service 在執行時被砍掉後, 若沒有新的 intent 進來, Service 會停 留在 started state, 但 intent 資料不會被保留 2.START_NOT_STICKY 或 START_REDELIVER_INTENT: 當 Service 在執行時被砍掉後, 若沒有新的 intent 進來, service 會離 開 started state, 若沒有很明確的再啟動, 將不會產生新的 service 物件 3.bindService -35 -

42 Client 可以利用 Context.bindService() 去建立與 service 持續性的連線, 如果建立連線時, 還沒產生 Service instance, 會自動產生並呼叫執行 oncreate 與 startservice 不同的地方是, 接下來並不會呼叫 onstartcommand 要執行 bindservice, 首先要先建立一個 serviceconnection 物件, 把這 conection 物件當作參數放到 bindservice 內讓 Context 與 Service 建立連線, Context.bindService(Intent service, ServiceConnection conn, int flags) flags 參數預設是 Context.BIND_AUTO_CREATE, 也就是 bind 的時候會自動產生 service 當連線成功後, 會自動呼叫執行這個 connection 內的 onserviceconnected(componentname classname, IBinder service) function, 在這 function 會接收到由 service 內的 onbinde() 所丟出來的 Ibinder 物件 利用這 IBinder 物件取得 Service 物件, 就可以直接操作 Service 內各個 public 的 method 三.Service Process 重要性判斷 系統會盡量保持 Service 的 Process 運作, 但若需要刪除 Process, 以下是 重要性判斷準則 1. 正在執行 oncreate(), onstartcommand() 或 ondestroy() 的 Service 會被當成前景執行程序, 不會被刪除 2. 假若這 ervice 已經被啟動 (started), 那這 service 所在的 process 的重要性, 會是在 visible process 與 hide process 之間 3. 如果 service 所在的 Process 上有元件是 visible, 那這 Service 的重要性就相當於是 visible 4. 一個已經 started 的 service 可以利用 startforeground(int, Notification) 放在比較重要的前景執行狀態, 在記憶體少的時候比較不會被刪除 當記憶體不足 Service 被刪除後, 它稍後還是會被重新啟動產生出來, 但通常重新啟動後, 原本的 intent 並不會被保留, 如果需要在重新啟動後, 再重發 intent 給 Service, 必須在 override onstartcommand() 時 return START_REDELIVER_INTENT 讓重新啟動的程序裡的 onstartcommand(intent intent, int flags, int startid) 內的 flags 值 =START_FLAG_REDELIVERY -36 -

43 MusicService.java 程式參考碼如下 : package com.cutemis.rhythmmusic; import android.app.service; import android.content.intent; import android.media.mediaplayer; import android.media.mediaplayer.oncompletionlistener; import android.os.binder; import android.os.bundle; import android.os.ibinder; import android.util.log; public class MusicService extends Service implements OnCompletionListener { private MediaPlayer mplayer; private final IBinder msbinder=new public IBinder onbind(intent intent) { return msbinder; public class MusicServiceBinder extends Binder { MusicService getservice() { return public void oncreate() { mplayer = MediaPlayer.create(this, R.raw.breeze); mplayer.setoncompletionlistener(this); -37 -

44 @Override public int onstartcommand(intent intent, int flags, int startid) { if (!mplayer.isplaying()) { mplayer.start(); return START_STICKY; mplayer.setoncompletionlistener(new MediaPlayer.OnCompletionListener() { public void oncompletion(mediaplayer mp) { finish(); // finish current activity public void ondestroy(){ if (mplayer.isplaying()) { mplayer.stop(); mplayer.release(); mplayer public int onstartcommand(intent intent, int flags, int startid) {Log.v(TAG,"onStartCommand"); if(!mplayer.isplaying()) {mplayer.start(); return START_STICKY; //return super.onstartcommand(intent, flags, startid); public void PauseMusic() { -38 -

45 if(mplayer.isplaying()) {mplayer.pause(); public void ResumeMusic() { if(!mplayer.isplaying()) {mplayer.start(); public boolean IsPlayNow() { return mplayer.isplaying(); 下拉式選單先在 xml 先宣告一個 Spinner <Spinner android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/myspinner" /> 接著初始化 Spinner private Spinner spinner; private ArrayAdapter<String> arraylist; private Context mcontext; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); mcontext = this.getapplicationcontext(); spinner = (Spinner)findViewById(R.id.mySpinner); 宣告一個陣列, 是你想要放進去 Spinner 理面的資料 private String[] lunch = {"00001", "00002", "00003"; 使用 ArrayAdapter 把它指定給 Spinner private String[] stringdata = {"00001", "00002", "00003"; -39 -

46 arraylist = new ArrayAdapter<String>(SpinnerDemo.this, android.r.layout.simple_spinner_item, stringdata); spinner.setadapter(arraylist); 離開程式使用 onrelease onrelease = function() { 我們將此用在離開程式上, 當要離開時跳轉回首頁點選下方得離開按鈕, 我們用 onrelease 叫用執行離開程序的函式 Android 平台上, 我們可以使用 Log 函數, 來達到自己在程式碼中加入一個個 記錄點 或 檢查點, 並可以通過開發環境中的 LogCat 工具來查看記錄 當程序流程每次運行到 記錄點 時, 相應的 記錄點 就會在開發工具記錄中輸出一條除錯用的訊息 開發者通過分析這些記錄, 來檢查程序執行的過程 使用到的參數, 是否與我們期望的結果符合 依此來判斷程式碼中可能出錯的區域, 以便對症根治造成問題的程式區段 3.6 應用程式偵錯手機模擬 : 有時候覺得開模擬器太慢 程式又跑很久才出來, 如果要長時間使用的話其 實是很浪費時間的一件事情, 就可以考慮使用智慧型手機來模擬 使用手機來模擬的時候必須先成為開發人員, 並且把 USB 偵錯 和允許模擬 地點打勾, 這樣手機設定部分就完成了 -40 -

47 定 如果要開始模擬 APP 程式的話, 可以到 Run/Run Configurations 裡面去做設 進入後在 Target 下的 Launch on all compatible devices/avd s 裡面設定為 Active devices, 之後點選 Run 就可以成功模擬了 -41 -

48 -42 -

49 3-7spoton 使用到的功能與應用 1. 補間 View 動畫 2. 影格 View 動畫 3.Button 4.Interpolator : 使得基本的動畫效果 (α, 規模化, 平移, 旋轉 ) 來加速, 減速, 重複等 5.imageView : <?xml version= 1.0 encoding= utf-8?> <ImageView xmlns:android= > </ImageView> 當建立遊戲中的每個新原點時, 會以動態方式來擴展及設定這個 ImageView 6.LinearLayout : 顯示剩餘的生命 <?xml version= 1.0 encoding= utf-8?> <ImageView xmlns:android= ><ImageView> 7.resetGame : 將遊戲還原至其初始狀態以 animationtime= INITIAL_ANIMATION_DURATION;// init animation length spotstouched= 0; // reset the number of spots touched score = 0; // reset the score level =1 ; // reset the level gameover=false;//the game is not over 重設用來管理此遊戲的實體變數 9.animationTime : 指定每個關卡的長度 10.spotsTouched : 協助判斷何時到達新關卡 11.score : 存放著目前的分數 12.level : 存放著目前的關卡 13.gameOver : 表示遊戲是否結束 14.touchedSpot : 使用者每次觸碰到代表圓點的 ImageView 時被呼叫 15.missedSpot : 每次圓點還沒被使用者碰到前就結束其動畫時被呼叫 -43 -

50 第四章 Android APP 音樂遊戲實作 4.1 Rhythm Stars 音樂遊戲架構 4.2 畫面設計良好背景圖片可增加玩家對遊戲情境的感受, 本遊戲計劃分別設計二款適合 熱門音樂及優雅音樂的畫面, 並可切換選擇不同色調, 可供配合不同音樂及玩家 喜好 圖 11. 本專題遊戲 APP 首頁 進入遊戲後可以看到遊戲首頁的畫面, 有上列選項可以選擇, 玩家選擇之後 就會針對選擇的項目跳轉到對應的功能介面 -44 -

51 圖 12. 遊戲畫面開始遊戲之後背景音樂就會自動撥放, 玩家可以隨著音樂點選黃色和粉色的星星, 隨著玩家點擊的星星越多等級就會越高, 星星的分數也會提高, 遊戲一開始有三個愛心, 如果沒有點到或是點錯的話就會扣分和減少愛心, 當愛心歸零時遊戲就結束, 並儲存遊戲的分數, 或更新最高分紀錄 -45 -

52 圖 13. 遊戲說明畫面 玩家第一次接觸遊戲時可以先來遊戲說明的畫面來看, 可以讓玩家更快的熟 悉了解這個遊戲的功能和玩法 -46 -

53 圖 14. 音樂天地畫面 音樂天地提供音樂試聽的功能, 玩家在遊玩之前可以來這裡聽遊戲的音樂, 點播放就可以聽到音樂, 點停止就會關閉撥放 -47 -

54 圖 15. 遊戲成績畫面 如果玩家想要看到之前遊玩的最高分紀錄, 可以進入遊戲成績裡看到歷史的 最高分 -48 -

55 圖 16. 註冊畫面 玩家可以來這裡註冊帳號, 只需輸入簡單的一些基本資料就可以完成註冊, 74 頁會有更詳細的介紹 -49 -

56 圖 17. 圖 18. 遊戲設定畫面 這裡可以提供一些客製化的功能設定, 像是遊戲等級設定 ( 如上圖 ), 還有遊 戲主題設定 以及背景音樂設定, 讓玩家能根據自己的喜好來設置 4.3 程式設計 Rhythm Star 主畫面與活動轉換 Rhythm Star 主畫面與活動轉換之程式碼如下 : Main.java: package com.cutemis.rhythmmusic; import android.app.activity; import android.content.intent; import android.os.bundle; import android.view.view; import android.widget.button; -50 -

57 public class Main extends Activity { public Button b1, b2, b3, b4, b5, protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); // 取得 main.xml 上的 Button 介面元件 b1 = (Button) findviewbyid(r.id.btn_1); b2 = (Button) findviewbyid(r.id.btn_2); b3 = (Button) findviewbyid(r.id.btn_3); b4 = (Button) findviewbyid(r.id.btn_4); b5 = (Button) findviewbyid(r.id.btn_quit); b6 = (Button) findviewbyid(r.id.btn_music); // 設定多按鈕元件 onclick 共用一個 Listener b1.setonclicklistener(mylistener); b2.setonclicklistener(mylistener); b3.setonclicklistener(mylistener); b4.setonclicklistener(mylistener); b5.setonclicklistener(mylistener); b6.setonclicklistener(mylistener); private Button.OnClickListener mylistener = new Button.OnClickListener() { public void onclick(view v) { switch(v.getid()) { case R.id.btn_1: { Intent intent = new Intent(); intent.setclass (Main.this,RhythmMusic.class); -51 -

58 startactivity(intent); break; case R.id.btn_2: { Intent intent = new Intent(); intent.setclass (Main.this, ActivityB.class); startactivity(intent); break; case R.id.btn_3: { Intent intent = new Intent(); intent.setclass (Main.this, ActivityC.class); startactivity(intent); break; case R.id.btn_music: { Intent intent = new Intent(); intent.setclass (Main.this, MusicActivity.class); startactivity(intent); break; case R.id.btn_4: { Intent intent = new Intent(); intent.setclass (Main.this, SettingGame.class); startactivity(intent); break; case R.id.btn_quit: { Intent intent = new Intent(); intent.setclass (Main.this, ActivityEnd.class); startactivity(intent); -52 -

59 break; protected void onstart() { protected void onrestart() { protected void onresume() { protected void onpause() { protected void onstop() { protected void ondestroy(){ super.ondestroy(); -53 -

60 Main.xml 檔內容如下 : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=" xmlns:tools=" android:layout_width="fill_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingbottom="@dimen/vertical_margin" android:paddingleft="@dimen/horizontal_margin" android:paddingright="@dimen/horizontal_margin" android:paddingtop="@dimen/vertical_margin" > <TextView android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparenttop="true" android:layout_centerhorizontal="true" android:layout_margintop="15dp" android:text="@string/welcome" android:textalignment="center" android:layout_weight="2" android:textsize="25sp" /> <Button android:id="@+id/btn_1" android:layout_width="215dp" android:layout_height="wrap_content" android:layout_below="@+id/textview1" android:layout_centerhorizontal="true" android:layout_margintop="15dp" android:text="@string/goto1" android:textalignment="center" android:padding="5dp" -54 -

61 android:textsize="18sp" android:layout_weight="1" android:background="#998877" /> <Button android:layout_width="215dp" android:layout_height="wrap_content" android:layout_margintop="15dp" android:padding="5dp" android:textsize="18sp" android:layout_weight="1" android:background="#999999" /> <Button android:layout_width="215dp" android:layout_height="wrap_content" android:layout_margintop="15dp" android:padding="5dp" android:textsize="18sp" android:layout_weight="1" android:background="#779988" /> <Button android:layout_width="215dp" android:layout_height="wrap_content"

62 android:layout_marginbottom="34dp" android:layout_margintop="15dp" android:textsize="18sp" android:padding="5dp" android:layout_weight="1" android:background="#888888" /> <Button android:layout_width="130dp" android:layout_height="wrap_content" android:layout_margintop="15dp" android:padding="5dp" android:layout_weight="1" android:textsize="18sp" android:background="#aabbaa" /> <Button android:layout_width="215dp" android:layout_height="wrap_content" android:layout_margintop="50dp" android:layout_weight="1" android:background="#aaaaaa" android:padding="5dp" android:textsize="18sp" /> -56 -

63 <Button android:layout_width="130dp" android:layout_height="wrap_content" android:layout_margintop="35dp" android:layout_weight="2" android:background="#c0c0c0" android:padding="5dp" android:textalignment="center" android:textsize="18sp" /> </RelativeLayout> Manifest.xml 檔如下 : <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" package="com.cutemis.rhythmmusic" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="19" android:targetsdkversion="23" /> <application android:allowbackup="true" android:icon="@drawable/icon" android:theme="@android:style/theme.notitlebar"> > <activity android:name=".main" android:label="@string/app_name" android:configchanges="orientation keyboardhidden" android:theme="@android:style/theme.notitlebar" > > -57 -

64 <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".musicactivity" > </activity> <activity android:name=".activityb" > </activity> <activity android:name=".activityc" > </activity> <activity android:name=".settinggame" > </activity> <activity android:name=".activityend" > </activity> <activity android:name=".rhythmmusic" > </activity> <activity android:name=".spotonview" > </activity> <service android:name="com.cutemis.rhythmmusic.boundmusicservice" android:enabled="true"> <intent-filter> <action android:name="com.cutemis.rhythmmusic.boundmusicservice" /> /> <category android:name="android.intent.category.default" </intent-filter> </service> </application> -58 -

65 </manifest> 節奏音樂遊戲主體 程式 rhythmmusic.java 內容如下 : package com.cutemis.rhythmmusic; import android.app.activity; import android.content.componentname; import android.content.context; import android.content.intent; import android.content.serviceconnection; import android.media.mediaplayer; import android.os.bundle; import android.os.ibinder; import android.util.log; import android.view.view; import android.widget.button; import android.widget.relativelayout; import android.widget.toast; public class RhythmMusic extends Activity implements View.OnClickListener { private SpotOnView view; Button btn[]=new Button[4]; private MusicService mserv; RelativeLayout layout; MediaPlayer oursong; //Bind music services private Boolean isbound; public BoundMusicService ms; public Intent intent; private String TAG; private ServiceConnection sc = new ServiceConnection() { -59 -

66 public void onserviceconnected(componentname name, IBinder service) { BoundMusicService.LocalBinder binder = (BoundMusicService.LocalBinder)service; ms = binder.getservice(); Log.v(TAG,"Service connedted with "+name); isbound =true; public void onservicedisconnected(componentname name) { ms = null; isbound=false; Log.v(TAG,"Service is Disconnected from" +name ); public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.spotgame); layout= (RelativeLayout) findviewbyid(r.id.gamefield); // create a new SpotOnView and add it to the RelativeLayout view = new SpotOnView(this, getpreferences(context.mode_private), layout); layout.addview(view, 0); btn[0]=(button)findviewbyid(r.id.btn_playgame); btn[1]=(button)findviewbyid(r.id.btn_pausegame); btn[2]=(button)findviewbyid(r.id.btn_resumegame); btn[3]=(button)findviewbyid(r.id.btn_stopgame); for (int i=0; i<3; i++) { btn[i].setonclicklistener(this); -60 -

67 public void onclick(view v){ Intent imusic = new Intent(); imusic.setclass(getapplicationcontext(), MusicService.class); switch(v.getid()) { case R.id.btn_playgame: startservice(imusic); // 加入音樂 oursong= MediaPlayer.create(this, R.raw.breeze); oursong.start(); break; case R.id.btn_pausegame: onpause(); mserv.pausemusic(); break; case R.id.btn_stopgame: onstop(); oursong.stop(); mserv.stopmusic(); break; case R.id.btn_resumegame: onresume(); mserv.resumemusic(); break; case View.NO_ID: default: startservice(imusic); break; -61 -

68 // called when this Activity moves to the background protected void onstart() { super.onstart(); Intent intent = new Intent(this, BoundMusicService.class); bindservice(intent, sc, Context.BIND_AUTO_CREATE); isbound=true; Toast.makeText(getBaseContext(), "service is binded succeddfully", public void onpause() { super.onpause(); view.pause(); // end method onpause // called when this Activity is brought to the public void onresume() { super.onresume(); public void onstop() { super.onstop(); finish(); public void ondestroy() { -62 -

69 super.ondestroy(); // end class RhythMusic 遊戲進行中的 SpotOnview.java 程式碼如下 : package com.cutemis.rhythmmusic; import java.util.hashmap; import java.util.map; import java.util.random; import java.util.concurrent.concurrentlinkedqueue; import java.util.queue; import android.animation.animator; import android.animation.animatorlisteneradapter; import android.app.alertdialog; import android.app.alertdialog.builder; import android.content.componentname; import android.content.context; import android.content.dialoginterface; import android.content.intent; import android.content.serviceconnection; import android.content.sharedpreferences; import android.content.res.resources; import android.media.audiomanager; import android.media.mediaplayer; import android.media.soundpool; import android.os.handler; import android.os.ibinder; import android.util.log; import android.view.layoutinflater; import android.view.motionevent; import android.view.view; import android.widget.imageview; import android.widget.linearlayout; -63 -

70 import android.widget.relativelayout; import android.widget.textview; import android.widget.toast; public class SpotOnView extends View { // constant for accessing the high score in SharedPreference private static final String HIGH_SCORE = "HIGH_SCORE"; private SharedPreferences preferences; // stores the high score // variables for managing the game private int spotstouched; // number of spots touched private int score; // current score private int level; // current level private int viewwidth; // stores the width of this View private int viewheight; // stores the height of this view private long animationtime; // how long each spot remains on the screen private boolean gameover; // whether the game has ended private boolean gamepaused; // whether the game has ended private boolean dialogdisplayed; // whether the game has ended private int highscore; // the game's all time high score // collections of spots (ImageViews) and Animators private final Queue<ImageView> spots = new ConcurrentLinkedQueue<ImageView>(); private final Queue<Animator> animators = new ConcurrentLinkedQueue<Animator>(); private TextView highscoretextview; // displays high score private TextView currentscoretextview; // displays current score private TextView leveltextview; // displays current level private LinearLayout liveslinearlayout; // displays lives remaining private RelativeLayout rlayout; // displays spots private Resources resources; // used to load resources private LayoutInflater layoutinflater; // used to inflate GUIs -64 -

71 // time in milliseconds for spot and touched spot animations private static final int INITIAL_ANIMATION_DURATION = 6000; private static final Random random = new Random(); // for random coords private static final int SPOT_DIAMETER = 100; // initial spot size private static final float SCALE_X = 0.25f; // end animation x scale private static final float SCALE_Y = 0.25f; // end animation y scale private static final int INITIAL_SPOTS = 5; // initial # of spots private static final int SPOT_DELAY = 500; // delay in milliseconds private static final int LIVES = 3; // start with 3 lives private static final int MAX_LIVES = 7; // maximum # of total lives private static final int NEW_LEVEL = 10; // spots to reach new level private Handler spothandler; // adds new spots to the game // sound IDs, constants and variables for the game's sounds private static final int HIT_SOUND_ID = 1; private static final int MISS_SOUND_ID = 2; private static final int DISAPPEAR_SOUND_ID = 3; private static final int SOUND_PRIORITY = 1; private static final int SOUND_QUALITY = 100; private static final int MAX_STREAMS = 4; private SoundPool soundpool; // plays sound effects private int volume; // sound effect volume private Map<Integer, Integer> soundmap; // maps ID to soundpool private Intent i; // constructs a new SpotOnView public SpotOnView(Context context, SharedPreferences sharedpreferences, RelativeLayout parentlayout) { super(context); // load the high score preferences = sharedpreferences; -65 -

72 highscore = preferences.getint(high_score, 0); // save Resources for loading external values resources = context.getresources(); // save LayoutInflater layoutinflater = (LayoutInflater) context.getsystemservice( Context.LAYOUT_INFLATER_SERVICE); // get references to various GUI components rlayout = parentlayout; liveslinearlayout = (LinearLayout) rlayout.findviewbyid( R.id.lifeLinearLayout); highscoretextview = (TextView) rlayout.findviewbyid( R.id.highScoreTextView); currentscoretextview = (TextView) rlayout.findviewbyid( R.id.scoreTextView); leveltextview = (TextView) rlayout.findviewbyid( R.id.levelTextView); spothandler = new Handler(); // used to add spots when game starts // end SpotOnView constructor // store SpotOnView's protected void onsizechanged(int width, int height, int oldw, int oldh) { viewwidth = width; // save the new width viewheight = height; // save the new height // end method onsizechanged // called by the SpotOn Activity when it receives a call to onpause public void pause() -66 -

73 { gamepaused = true; soundpool.release(); // release audio resources soundpool = null; cancelanimations(); // cancel all outstanding animations // end method pause // cancel animations and remove ImageViews representing spots private void cancelanimations() { // cancel remaining animations for (Animator animator : animators) animator.cancel(); // remove remaining spots from the screen for (ImageView view : spots) rlayout.removeview(view); spothandler.removecallbacks(addspotrunnable); animators.clear(); spots.clear(); // end method cancelanimations // called by the SpotOn Activity when it receives a call to onresume public void resume(context context) { gamepaused = false; initializesoundeffects(context); // initialize app's SoundPool if (!dialogdisplayed) resetgame(); // start the game // end method resume // start a new game public void resetgame() { -67 -

74 spots.clear(); // empty the List of spots animators.clear(); // empty the List of Animators liveslinearlayout.removeallviews(); // clear old lives from screen animationtime = INITIAL_ANIMATION_DURATION; // init animation length spotstouched = 0; // reset the number of spots touched score = 0; // reset the score level = 1; // reset the level gameover = false; // the game is not over displayscores(); // display scores and level // add lives for (int i = 0; i < LIVES; i++) { // add life indicator to screen liveslinearlayout.addview( (ImageView) layoutinflater.inflate(r.layout.life, null)); // end for // add INITIAL_SPOTS new spots at SPOT_DELAY time intervals in ms for (int i = 1; i <= INITIAL_SPOTS; ++i) spothandler.postdelayed(addspotrunnable, i * SPOT_DELAY); // end method resetgame // create the app's SoundPool for playing game private void initializesoundeffects(context context) { // initialize SoundPool to play the app's three sound effects soundpool = new SoundPool(MAX_STREAMS, AudioManager.STREAM_MUSIC, SOUND_QUALITY); -68 -

75 // set sound effect volume AudioManager manager = (AudioManager) context.getsystemservice(context.audio_service); volume = manager.getstreamvolume(audiomanager.stream_music); // create sound map soundmap = new HashMap<Integer, Integer>(); // create new HashMap // add each sound effect to the SoundPool soundmap.put(hit_sound_id, soundpool.load(context, R.raw.hit, SOUND_PRIORITY)); soundmap.put(miss_sound_id, soundpool.load(context, R.raw.miss, SOUND_PRIORITY)); soundmap.put(disappear_sound_id, soundpool.load(context, R.raw.disappear, SOUND_PRIORITY)); // end method initializesoundeffect // display scores and level private void displayscores() { // display the high score, current score and level highscoretextview.settext( resources.getstring(r.string.high_score) + " " + highscore); currentscoretextview.settext( resources.getstring(r.string.score) + " " + score); leveltextview.settext( resources.getstring(r.string.level) + " " + level); // end function displayscores // Runnable used to add new spots to the game at the start private Runnable addspotrunnable = new Runnable() { public void run() { addnewspot(); // add a new spot to the game // end method run -69 -

76 ; // end Runnable // adds a new spot at a random location and starts its animation public void addnewspot() { // choose two random coordinates for the starting and ending points int x = random.nextint(viewwidth - SPOT_DIAMETER); int y = random.nextint(viewheight - SPOT_DIAMETER); int x2 = random.nextint(viewwidth - SPOT_DIAMETER); int y2 = random.nextint(viewheight - SPOT_DIAMETER); // create new spot final ImageView spot = (ImageView) layoutinflater.inflate(r.layout.untouched, null); spots.add(spot); // add the new spot to our list of spots spot.setlayoutparams(new RelativeLayout.LayoutParams( SPOT_DIAMETER, SPOT_DIAMETER)); spot.setimageresource(random.nextint(2) == 0? R.drawable.green_spot : R.drawable.red_spot); spot.setx(x); // set spot's starting x location spot.sety(y); // set spot's starting y location spot.setonclicklistener( // listens for spot being clicked new OnClickListener() { public void onclick(view v) { touchedspot(spot); // handle touched spot // end method onclick // end OnClickListener ); // end call to setonclicklistener rlayout.addview(spot); // add spot to the screen // configure and start spot's animation spot.animate().x(x2).y(y2).scalex(scale_x).scaley(scale_y).setduration(animationtime).setlistener( new AnimatorListenerAdapter() -70 -

77 public void onanimationstart(animator animation) { animators.add(animation); // save for possible cancel // end method onanimationstart public void onanimationend(animator animation) { animators.remove(animation); // animation done, remove if (!gamepaused && spots.contains(spot)) // not touched { missedspot(spot); // lose a life // end if // end method onanimationend // end AnimatorListenerAdapter ); // end call to setlistener // end addnewspot method // called when the user touches the screen, but not a public boolean ontouchevent(motionevent event) { // play the missed sound if (soundpool!= null) soundpool.play(miss_sound_id, volume, volume, SOUND_PRIORITY, 0, 1f); score -= 15 * level; // remove some points score = Math.max(score, 0); // do not let the score go below zero displayscores(); // update scores/level on screen return true; // end method ontouchevent // called when a spot is touched -71 -

78 private void touchedspot(imageview spot) { rlayout.removeview(spot); // remove touched spot from screen spots.remove(spot); // remove old spot from list ++spotstouched; // increment the number of spots touched score += 10 * level; // increment the score // play the hit sounds if (soundpool!= null) soundpool.play(hit_sound_id, volume, volume, SOUND_PRIORITY, 0, 1f); // increment level if player touched 10 spots in the current level if (spotstouched % NEW_LEVEL == 0) { ++level; // increment the level animationtime *= 0.95; // make game 5% faster than prior level // if the maximum number of lives has not been reached if (liveslinearlayout.getchildcount() < MAX_LIVES) { ImageView life = (ImageView) layoutinflater.inflate(r.layout.life, null); liveslinearlayout.addview(life); // add life to screen // end if // end if displayscores(); // update score/level on the screen if (!gameover) addnewspot(); // add another untouched spot // end method touchedspot // called when a spot finishes its animation without being touched public void missedspot(imageview spot) -72 -

79 { spots.remove(spot); // remove spot from spots List rlayout.removeview(spot); // remove spot from screen if (gameover) // if the game is already over, exit return; // play the disappear sound effect if (soundpool!= null) soundpool.play(disappear_sound_id, volume, volume, SOUND_PRIORITY, 0, 1f); // if the game has been lost if (liveslinearlayout.getchildcount() == 0) { gameover = true; // the game is over // if the last game's score is greater than the high score if (score > highscore) { SharedPreferences.Editor editor = preferences.edit(); editor.putint(high_score, score); editor.commit(); // store the new high score highscore = score; // end if cancelanimations(); // display a high score dialog Builder dialogbuilder = new AlertDialog.Builder(getContext()); dialogbuilder.settitle(r.string.game_over); dialogbuilder.setmessage(resources.getstring(r.string.score) + " " + score); dialogbuilder.setpositivebutton(r.string.reset_game, new DialogInterface.OnClickListener() { -73 -

80 public void onclick(dialoginterface dialog, int which) { displayscores(); // ensure that score is up to date dialogdisplayed = false; resetgame(); // start a new game // end method onclick // end DialogInterface ); // end call to dialogbuilder.setpositivebutton dialogdisplayed = true; dialogbuilder.show(); // display the reset game dialog // end if else // remove one life { liveslinearlayout.removeviewat( // remove life from screen liveslinearlayout.getchildcount() - 1); addnewspot(); // add another spot to game // end else // end method missedspot -74 -

81 4.3.2 APP 會員登入與註冊之寫法 圖 18. 會員管理畫面正宗的作法是要連線到伺服器管理網站去將資料寫入資料庫, 所以執行上較為複雜一點, 不過現在很多資訊服務都已經發展的很便利, 所以伺服器管理上較以往容易多了. 首先步驟上是要取得一個網頁空間, 再建立一個 DataBase, 然後使用管理工 具存取資料. 網頁空間 : 申請一個 000webhost 免費空間, 依網路說明操作. 即可 在 webhost 中建立一個 mysql 的 DB. 在 Cpanel 下使用 myphpadmin 去管理 DB. 順便地, 為了傳輸檔案需要使用 ftp 軟體, 建議下載免安裝版之 filezella

82 本專題申請一網頁空間, username:a ; 網址 : androidleaner.net16.net, 有 1500MB 的儲存空間 第一次進入時需將資料一律放在網址中的 public_html 資料夾下, 並先刪除 default.php 檔, 再加入自已的檔案 為建立程式中的會員管理功能, 在 public_html 下建立一資料夾 app, 專放本 遊戲程式之 php 程式及會員資料庫以及音樂檔 建立一個 Database 命名為 a rmusic, 使用者 :a _dancer01 會員表單為 :userdata;server: localhost 第一次進入時需將資料一律放在網 址中的 public_html 資料夾下, 並先刪除 default.php 檔, 再加入自已的檔案 -76 -

83 -77 -

84 為建立程式中的會員管理功能, 在 public_html 下建立一資料夾 webapp, 專 放本遊戲程式之 php 程式及會員資料庫以及音樂檔 建立一個 Database 命名為 a member, 使用者 :a _student 會員表單為 :userdata;$server_name = "mysql11.000webhost.com" 伺服器上與會員管理的程式共有三個 : login.php, register.php 以及 init.php 分別如下 : login.php 檔內容如下 : <?php error_reporting(0); require "init.php"; $name = $_POST["name"]; $password = $_POST["password"]; //$name = "sdf"; //$password = "sdf"; $sql = "SELECT * FROM `user_info` WHERE `name`='".$name."' AND `password`='".$password."';"; $result = mysqli_query($con, $sql); $response = array(); while($row = mysqli_fetch_array($result)){ $response = array("id"=>$row[0],"name"=>$row[1],"password"=>$row[2]," "=>$ro w[3]; echo json_encode(array("userdata"=>$response));?> Login.php 檔如下 : <?php -78 -

85 error_reporting(0); require "init.php"; $name = $_POST["name"]; $password = $_POST["password"]; $ = $_POST[" "]; //$name = "sdf"; //$password = "sdf"; //$ = "sdf@r54"; $sql = "INSERT INTO `user_info` (`id`,`name`, `password`, ` `) VALUES (NULL, '".$name."', '".$password."', '".$ ."');"; if(!mysqli_query($con, $sql)){ echo '{"message":"unable to save the data to the database."';?> Init.php 檔如下 : <?php $con = mysql_connect("mysql11.000webhost.com", "a _student", "password"); //password 暫不公開 if(!$con){ die('connection Error...'.mysql_error()); echo'connection success!'; mysql_close($con);?> 上網測試 : 連線成功 -79 -

86 在 Android 這一端程式碼 : MainActivity 檔內容 : package com.example.registration; import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; import java.net.httpurlconnection; import java.net.malformedurlexception; import java.net.url; import org.json.jsonexception; import org.json.jsonobject; import android.app.activity; import android.content.context; import android.content.intent; import android.os.asynctask; import android.os.bundle; import android.view.view; import android.widget.edittext; public class MainActivity extends Activity { -80 -

Android Service

Android Service Android Service- 播放音樂 建國科技大學資管系 饒瑞佶 2013/7 V1 Android Service Service 是跟 Activity 並行 一個音樂播放程式若沒使用 Service, 即使按 home 鍵畫面離開之後, 音樂還是照播 如果再執行一次程式, 新撥放的音樂會跟先前撥放的一起撥, 最後程式就會出錯 執行中的程式完全看不到! 但是, 寫成 Service 就不同了

More information

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)

More information

書面

書面 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 5.4 互動功能畫面 程式碼請參考附件-程式三 在進入互動頁面時 會執行setAllText()依寵物狀態數值來 設定狀態文字與頭像 並且依心情決定是否要不要播放音效 觸摸的區域 由於是自己寫的 view 所以並未透過xml來設置 而是透過Layut.addview()來動態新增

More information

Microsoft Word - 第1章 Android基本概念.docx

Microsoft Word - 第1章 Android基本概念.docx Android 系 统 下 Java 编 程 详 解 作 者 : 华 清 远 见 第 1 章 Android 基 本 概 念 本 章 简 介 本 章 主 要 介 绍 Android 基 本 概 念 方 面 的 内 容, 包 括 Android 平 台 特 性 Android 系 统 架 构 Android 开 发 框 架 和 Android 开 发 环 境 搭 建 1.1 Android 简 介 Android

More information

Dynamic Layout in Android

Dynamic Layout in Android Dynamic Layout in Android 建國科技大學資管系 饒瑞佶 2013/5 V1 Layout 多半都透過 res/layout/xml 格式設定來達成 Android 是 OOP, 所以可以動態產生 Layout 重點是 Layout 的階層關係 (Hierarchy) 需要處理對應事件 最後一樣用 setcontentview 加入 Layout 一 加入現有 Layout 中

More information

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 專題進度 老師 : 趙啟時老師 學生 : 陳建廷 2013/10/13 用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 程式碼 : package com.example.phone; import java.util.arraylist;

More information

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 :

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 : EditText 实现城市搜索 1801210778 邹宇航 摘要 : 使用 EditText 实现搜索城市的功能, 以此为依据更新 ListView 1. 效果图 : 2. 主要步骤 (1) 在 select-city.xml 布局文件中中添加 EditText 控件用作搜索框, 然后添加 ListView 控件用来显示城市名字内容 代码如下 : 预览图 : (2) 在 SelectCity.java

More information

Android Fragment

Android Fragment Android Fragment 建國科技大學資管系饒瑞佶 2017/10 V1 Android 3.0 後才支援 Fragment 解決部分 App 適應螢幕大小的問題 它類似於 Activity, 可以像 Activity 可以擁有自己的版面設計, 也和 Activity 一樣有自己的生命週期 ( 具備 oncreate() oncreateview() 與 onpause() 方法 ) LifeCycle

More information

投影片 1

投影片 1 資料庫管理程式 ( 補充教材 -Part2) 使用 ADO.NET 連結資料庫 ( 自行撰寫程式碼 以實現新增 刪除 修改等功能 ) Private Sub InsertButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsertButton.Click ' 宣告相關的 Connection

More information

46 2011 11 467 數位遊戲式學習系統 7 2011 11 467 47 3 DBGameSys 48 2011 11 467 正規化資料模組 如何配置並儲存電子化資料 以 便減少資料被重覆儲存的程序 DBGameSys的主要功能模組包 學習者 審核評分模組 含 正規化資料模組 審核評分 模組 高分列表模組3大區塊 系統資料庫 在正規化資料模組的執行 高分列表模組 過程中 先要求學習者瀏覽遊戲

More information

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD 10 SCJD 簡介 Java 10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD 10 SCJD 10-3 Java Java SCJD 7 Swing RMI 10.1.1 The Assignment The Essay 9 10 10-4 SCJP SCJD 90 10.1.2 SCJP Java 90 120 Swing 10

More information

ShareText

ShareText 作者 : 林致宇 日期 :2012/1/23 問題 : 如何分享分享文字資訊給其它的應用程式? 解答 : 有時候我們可能會希望 我們的應用程式的資訊 能夠讓使用者分享出去, 讓使用者能夠將此資訊傳送簡訊給其好友或寄電子郵件的方式寄給其好友, 這份文件將示範如何寫出這樣的應用程式 本文件將產出兩個 App, 第一個 App 是 分享資料的來源, 名為 CopyPaste_Source, 功能非常簡單,

More information

The golden pins of the PCI card can be oxidized after months or years

The golden pins of the PCI card can be oxidized after months or years Q. 如何在 LabWindows/CVI 編譯 DAQ Card 程式? A: 請參考至下列步驟 : 步驟 1: 安裝驅動程式 1. 安裝 UniDAQ 驅動程式 UniDAQ 驅動程式下載位置 : CD:\NAPDOS\PCI\UniDAQ\DLL\Driver\ ftp://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/unidaq/dll/driver/

More information

0511-Android程式之GPS應用_專題週記4

0511-Android程式之GPS應用_專題週記4 逢甲大學通訊工程學系專題研究 Android 程式之 GPS 應用 專題週記 0511 學生姓名 陳彥儒 D0035131 廖元譽 D0077791 指導老師 楊豐瑞老師繳交日期 2014.05.11 1 匯入 GoogleMap 1.1 取得授權步驟 目前進度 取得 Google 授權鑰匙 實作程式尚未成功 1.1.1 建立個人的 keystore 1.1.2 由個人的 keystore 查詢 SHA1

More information

CU0594.pdf

CU0594.pdf 8 SOHO 1 3 003 SOHO SOHO Coder Programmer HTML CSS PHP JavaScrip 009 LECTURE 1-1 1 048 PART 2 LECTURE 1-1 1 049 SOHO Landing Page Landing 050 PART 2 LECTURE 1-1 1 SEO SEO P.093 SEO SEO SEO SEO SEO 051

More information

建立Android新專案

建立Android新專案 經濟部工業局 Android 智慧型手機程式設計實務應用班 Android WebService 建國科技大學資管系 饒瑞佶 2012/4 WebService 需要 ksoap2-android-assembly-2.5.2-jar-withdependencies.jar 或 ksoap2-android-assembly-2.5.2-jar-withdependencies_timeout1.jar

More information

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

More information

THE GAME GUIDE WELCOME TO DARTSLIVE DARTSLIVE.com Ver.3.0 2013.05 HOW TO PLAY BEFORE YOU START THE GAME HOW TO PLAY THE GAME HOW TO COUNT THE SCORE AWARD MOVIE 自由設定AWARD! 讓飛鏢的樂趣多更多! AWARD MOVIE是甚麼? AWARD

More information

Microsoft Word - 02.目錄.doc

Microsoft Word - 02.目錄.doc 目錄 -1- 目錄 序 準備篇 一 使用說明... 0-2 二 標示說明... 0-6 三 注意事項... 0-7 第一類 Android 基礎知識 -UI 設計及語法應用 101. 整存整付計算機... 1-2 102. 電費計算機... 1-8 103. 點餐系統... 1-18 104. 計算 BMI 值... 1-23 105. MENU 功能選單... 1-36 106. 畫廊展示...

More information

2 第 章 绪 论 Internet 2.0 使 得 消 费 型 电 子 产 品 用 户 可 以 通 过 多 种 不 同 的 数 据 网 络 访 问 互 联 网 内 容 用 户 可 以 使 用 便 携 式 消 费 型 电 子 设 备, 如 智 能 手 机 触 屏 平 板 电 脑 电 子 书, 甚 至

2 第 章 绪 论 Internet 2.0 使 得 消 费 型 电 子 产 品 用 户 可 以 通 过 多 种 不 同 的 数 据 网 络 访 问 互 联 网 内 容 用 户 可 以 使 用 便 携 式 消 费 型 电 子 设 备, 如 智 能 手 机 触 屏 平 板 电 脑 电 子 书, 甚 至 . Android 是 什 么 第 章 绪 论 2 3 本 章 将 主 要 介 绍 Android 操 作 系 统, 这 些 背 景 知 识 可 以 帮 你 更 好 地 理 解 本 书 的 内 容 你 将 了 解 到, 这 一 平 台 在 如 今 以 便 携 式 消 费 型 电 子 设 备 为 基 础 的 Internet 2.0 环 境 下 是 如 何 大 显 身 手 的 这 里 所 说 的 Internet

More information

投影片 1

投影片 1 計算機程式及實習 期末報告 題目 : 六宿炒翻天 班級 : 奈米一乙姓名 : 陳洋翼學號 :4A514050 老師 : 謝慶存 程式說明 設計結帳系統, 選擇數量後, 在按下計算, 將會顯示總金額 若是老人或小孩, 將可享 8 折或 9 折的優惠 程式畫面 填選數量 在火腿蛋炒飯的數量選擇 1, 並按下計算, 可得總金額 50 元 程式畫面 打折 填選完後, 若客人是小孩或老人, 選擇欲打折項目,

More information

中南大学第二届软件创新大赛

中南大学第二届软件创新大赛 3D 全 息 投 影 游 戏 平 台 参 赛 项 目 计 划 书 一 参 赛 作 品 构 思 的 创 意 与 价 值 1. 背 景 : 问 题 领 域 (1) 手 机 平 台 游 戏 发 展 火 爆 随 着 移 动 设 备 和 移 动 互 联 网 的 飞 速 发 展, 手 机 已 经 成 为 人 们 日 常 生 活 中 的 伙 伴 越 来 越 多 手 机 游 戏 APP 成 为 了 人 们 放 松

More information

Android Android Android SDK iv

Android Android Android SDK iv Android Market Google Android SDK Apple Google Microsoft b2c b 2010 Internet Android how why iii Android 240... Android Android SDK iv Android Market Google Android SDK Visual C++ Java N-tier J2EE Unix/Linux

More information

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class 踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld

More information

<img>

<img> 04 圖片 4-1 4-2 4-3 4-4 網頁程式設計 4-1 網頁多媒體 Flash Java Applets HTML 8 4-1-1 圖片 JPEG Joint Photographic Experts Group 非失真模式 (lossless) 基本模式 (baseline standard) 1 2 12 JPEG 6 JPEG.jpg.jpe.jpeg GIF (graphic

More information

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之 臺 北 市 大 安 高 級 工 業 職 業 學 校 資 訊 科 一 百 零 一 學 年 度 專 題 製 作 報 告 ------ 以 Android 製 作 ------ ----- 連 線 塔 防 遊 戲 ------ Tower defense game using Internet technology 班 級 : 資 訊 三 甲 組 別 : A9 組 組 員 : 葉 冠 麟 (9906129)

More information

PowerPoint 簡報

PowerPoint 簡報 UI 設計 Android 專案目錄架構 Android 專案建立後會自動產生 3 個主要目錄 src:java 程式檔案 res: 資源 ( 文字 圖形 聲音檔案等 ) 與 UI 設定有關的 layout 檔 此目錄內檔案名稱只能為小寫字母 數字 _. gen:r.java 根據 res 目錄內容自動產生 不要去修改 R.java Android 中所有的資源檔案 ( 圖片 XML 等 ) 命名都必須使用英文小寫,

More information

Microsoft Word - ASM SDK 說明文件

Microsoft Word - ASM SDK 說明文件 System Monitor SDK (for Android) 開發者指南說明書 1. 技術項目簡介 經由簡化的應用程式介面 (Application Programming Interface), 可 提供給 Android 應用程式開發者開發基於 System monitor 的應用程式 2. 應用範圍說明 本技術可應用於具備 Android 系統 2.3.3 以上版本的 Android 嵌入式裝

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

封面-12

封面-12 第十二章 701Client TECHNOLOGY CO.,LTD. 701Client 701Server 701Client "701Client", 12-1 :supervisor :supervisor : 1. : 00~99 100 2. : 00~63 ( 63 / / ) 3. : 18 9 4. : 18 9 5. 12-2 TECHNOLOGY CO.,LTD. 701Client

More information

理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13

理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13 12 科學發展 2012 年 12 月,480 期 你可能不知道的媒體影響 劉正山若用 選戰 的角度來看選舉和參與選舉, 你大腦裡情感的作用一定大過理性的作用, 便會很習慣地拿各種媒體或別人的觀點來使自己的選擇合理化 2012 理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13 14 科學發展 2012 年 12 月,480 期 agendasetting 報紙和網路新聞的頭版空間有限,

More information

Android + NFC

Android + NFC Android + NFC 建國科技大學資管系饒瑞佶 2017/3 v1 讀取 Tag UUID Android 2.3.3 (API Level 10) 才有支援完整的 NFC 功能 只要 NFC 相容都讀的到 (NFC 或 Mifare) 建立新專案修改 AndroidManifest.xml 加入 , 如果有 NFC Tag 進入感測範圍, 本 App 也會變成可處理的

More information

<4D6963726F736F667420576F7264202D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63>

<4D6963726F736F667420576F7264202D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63> 基 于 Android 平 台 的 电 子 拍 卖 系 统 摘 要 本 电 子 拍 卖 系 统 其 实 就 是 一 个 电 子 商 务 平 台, 只 要 将 该 系 统 部 署 到 互 联 网 上, 客 户 都 可 以 在 该 系 统 上 发 布 想 出 售 的 商 品, 也 可 以 对 拍 卖 中 的 商 品 参 与 竞 价 整 个 过 程 无 须 人 工 干 预, 由 系 统 自 动 完 成 本

More information

AutoCAD 用戶如何使用 ArchiCAD

AutoCAD 用戶如何使用 ArchiCAD AutoCAD 用戶如何使用 ArchiCAD AutoCAD用戶如何使用ArchiCAD ( 中文版 ) 由 Scott MacKenzie, Simon Gilbert, Geoffrey Moore Langdon, David Byrnes, Ralph Grabowski 編寫 龍庭資訊有限公司 1/73 - 2. 3. 4. -

More information

ltu

ltu 資 訊 管 理 系 學 齡 前 自 主 學 習 之 行 動 裝 置 輔 助 系 統 指 導 教 授 : 李 靜 怡 教 授 組 員 名 單 : 蔡 承 育 988C012 黃 佳 誼 988C026 鄭 亦 琦 988C060 廖 曼 伶 988C108 中 華 民 國 1 0 2 年 5 月 嶺 東 科 技 大 學 資 訊 管 理 系 學 齡 前 自 主 學 習 之 行 動 裝 置 輔 助 系 統

More information

Microsoft PowerPoint - 07.Android 介面元件-TableLayout、Toast、AlertDialog

Microsoft PowerPoint - 07.Android 介面元件-TableLayout、Toast、AlertDialog 計劃名稱 : 104 年度教育部資通訊軟體創新人才推升推廣計畫跨校資源中心 : 雲端運算 ( 國立中山大學 ) 課程名稱 : 網路及平台服務 Part1- 課程教材 教材名稱 :Android 介面元件 -TableLayout Toast AlertDialog 國立高雄大學資訊工程學系張保榮教授 大綱 TableLayout 版面配置 Toast 版面配置 AlertDialog 版面配置 TableLayout

More information

图 6-1 主界面 MainActivity 界面对应的布局文件 (activity_main.xml) 如下所示 : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="

图 6-1 主界面 MainActivity 界面对应的布局文件 (activity_main.xml) 如下所示 : <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android= 第 6 章广播接收者 应用案例 案例 6-1 CallRecord( 通话记录 ) 一 案例描述 1 考核知识点 030006001: 广播接收者简介 030006002: 广播接收者的创建 2 练习目标 广播的静态注册和使用 使用广播处理处理事件 3 需求分析手机最重要的功能就是通话功能, 同样储存通话记录也是必不可少的 该案例使用广 播接收者自己实现通话记录的功能 包括呼出电话 已接来电 未接来电以及通话产生的

More information

untitled

untitled JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++

More information

麻 省 理 工 學 院 是 在 西 元 2013 年 12 月 3 日 推 出 MIT App Inventor 2 網 站, 提 供 免 費 的 雲 端 服 務, 使 用 者 可 以 透 過 瀏 覽 器 來 開 發 Android 裝 置 應 用 程 式, 該 網 站 的 網 址 為 : http

麻 省 理 工 學 院 是 在 西 元 2013 年 12 月 3 日 推 出 MIT App Inventor 2 網 站, 提 供 免 費 的 雲 端 服 務, 使 用 者 可 以 透 過 瀏 覽 器 來 開 發 Android 裝 置 應 用 程 式, 該 網 站 的 網 址 為 : http 資 訊 學 科 中 心 6 月 份 電 子 報 用 MIT App Inventor2 程 式 拼 圖 來 開 發 Android 裝 置 應 用 程 式 李 啟 龍 學 習 Android 裝 置 程 式 設 計, 可 以 不 必 學 習 較 為 艱 澀 的 Java 語 法, 只 要 使 用 拼 圖 模 式 來 組 合 程 式, 就 可 以 完 成 Android 裝 置 的 應 用 程 式 MIT

More information

Database_001

Database_001 作者 : 林致宇日期 :2011/10/26 主要參考來源 : http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applicat ions/ 問題 : 如在存取一個已經建立好的資料庫? 解答 : 有一些應用程式會需要讀取已經建立好的資料庫, 例如一個試題測驗應用程式, 裡面的試題可能已經於電腦上, 使用任何的

More information

mvc

mvc Build an application Tutor : Michael Pan Application Source codes - - Frameworks Xib files - - Resources - ( ) info.plist - UIKit Framework UIApplication Event status bar, icon... delegation [UIApplication

More information

導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式

導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式 導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式語言篇第 3 章 C# 程式語言基礎 C# C# 3.0 var 第 4 章 基本資料處理 C# x

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

关 于 本 说 明 书 本 设 备 采 用 三 星 的 高 标 准 和 专 门 技 术, 提 供 优 质 的 移 动 通 讯 和 娱 乐 体 验 本 使 用 说 明 书 专 门 设 计 用 于 详 细 介 绍 设 备 的 功 能 和 特 性 使 用 设 备 之 前, 请 阅 读 本 说 明 书, 以

关 于 本 说 明 书 本 设 备 采 用 三 星 的 高 标 准 和 专 门 技 术, 提 供 优 质 的 移 动 通 讯 和 娱 乐 体 验 本 使 用 说 明 书 专 门 设 计 用 于 详 细 介 绍 设 备 的 功 能 和 特 性 使 用 设 备 之 前, 请 阅 读 本 说 明 书, 以 SM-N9005 使 用 说 明 书 www.samsung.com 关 于 本 说 明 书 本 设 备 采 用 三 星 的 高 标 准 和 专 门 技 术, 提 供 优 质 的 移 动 通 讯 和 娱 乐 体 验 本 使 用 说 明 书 专 门 设 计 用 于 详 细 介 绍 设 备 的 功 能 和 特 性 使 用 设 备 之 前, 请 阅 读 本 说 明 书, 以 确 保 安 全 和 正 确 使

More information

* 2

* 2 * 2 1. A 3. A 2. B A. 1. 1 2. 1 3 4 4 6 p 123456 7 bk bl bm bn 7 bo cm 9 8 cl ck bt bs br bp bq 1 2 3 4 5 6 7 8 9 bk bl bm 0 bn bo bp bq br bs bt p ck 8 2 4 6 cl cm cq cp co cn cn co cp cq 10 . [8]

More information

Lecture01_Android介绍

Lecture01_Android介绍 移动平台应用软件开发 Android 介绍 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组 北京大学 二零一七年秋北京 Android是什么 Android不仅仅是一个操作系统 它更是一个完整的软件框 架 Android基于Linux内核 2005年Google公司收购了Android公司 Google公司选择使用Apache许可证开放Android源码

More information

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1 0 0 = 1 0 = 0 1 = 0 1 1 = 1 1 = 0 0 = 1 : = {0, 1} : 3 (,, ) = + (,, ) = + + (, ) = + (,,, ) = ( + )( + ) + ( + )( + ) + = + = = + + = + = ( + ) + = + ( + ) () = () ( + ) = + + = ( + )( + ) + = = + 0

More information

PowerPoint 簡報

PowerPoint 簡報 Paint 繪圖板 JAVA 程式設計 指導老師 : 鄞宗賢 組員 : 4A3G0901 劉彥佐 4A3G0907 韓偉志 畫面預覽 匯入參數 package paint; import java.awt.*; import java.awt.event.*; import javax.swing.*; 主程式 public class paint{ public static void main(string[]

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

Adobe® Flash® 的 Adobe® ActionScript® 3.0 程式設計

Adobe® Flash® 的 Adobe® ActionScript® 3.0 程式設計 337 18 Adobe Flash CS4 Professional MovieClip ActionScript Flash ActionScript Flash Flash Flash MovieClip MovieClip ActionScript ( ) MovieClip Flash Sprite ActionScript MovieClip ActionScript 3.0 Shape

More information

内文-2.indd

内文-2.indd 客户端服务端音乐资源信息 : 1. 项目需求从本项目开始, 我们一起开发一个简单的在线音乐播放器, 它具有以下功能 (1) 程序启动时显示一个启动画面, 如图 1-1 所示 (2) 在程序主页面显示服务器上的歌曲列表, 包括歌手名与歌曲名, 单击列表条目可实现在线音乐播放, 单击 播放 暂停 上一曲 下一曲 按钮可实现对应的功能, 进度条可以显示歌曲播放进度, 如图 1-2 所示 图 1-1 程序启动画面

More information

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4 JAVA Extension 0..\Example\Ch0\ \ T.html..\Example\Ch0\ \ T.txt T.txt..\Example\Ch0\ \ T_Ok.html 提示 :. Marquee Marquee Font Color #FFFFFF BG Color #867bf Width 90 Height 50. T.txt Ctrl+C your scrolling

More information

建模与图形思考

建模与图形思考 C03_c 基 於 軟 硬 整 合 觀 點 JNI: 从 C 调 用 Java 函 数 ( c) By 高 煥 堂 3 How-to: 基 於 軟 硬 整 合 觀 點 从 C 调 用 Java 函 数 如 果 控 制 点 摆 在 本 地 C 层, 就 会 常 常 1. 从 本 地 C 函 数 去 调 用 Java 函 数 ; 2. 从 本 地 C 函 数 去 存 取 Java 层 对 象 的 属 性

More information

運算子多載 Operator Overloading

運算子多載 Operator Overloading 多型 Polymorphism 講師 : 洪安 1 多型 編譯時期多型 ( 靜態多型 ) function overloading 如何正確呼叫同名的函數? 利用參數個數與型態 operator overloading 其實同 function overloading 執行時期多型 ( 或動態多型 ) 如何正確呼叫不同物件的相同名稱的成員函數 利用繼承與多型 2 子類別與父類別物件間的指定 (assignment)

More information

Microsoft PowerPoint - 05.Android 介面元件-RelativeLayout、Button、TextVeiw、EditText

Microsoft PowerPoint - 05.Android 介面元件-RelativeLayout、Button、TextVeiw、EditText 計劃名稱 : 104 年度教育部資通訊軟體創新人才推升推廣計畫跨校資源中心 : 雲端運算 ( 國立中山大學 ) 課程名稱 : 網路及平台服務 Part1- 課程教材 教材名稱 :Android 介面元件 -RelativeLayout Button TextVeiw EditText 國立高雄大學資訊工程學系張保榮教授 大綱 RelativeLayout 版面配置 Button 版面配置 TextView

More information

Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089

Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089 Photoshop CC Camera Raw Photoshop Camera Raw Step 1 3 1 2 3 SCOTT KELBY Step 2 B Camera Raw 088 Chapter 3 Camera Raw Chapter 3 Camera Raw Step 3-4 -100 negative clarity +25 ] P / -75-50 Step 4 0 ( 下一頁

More information

幻灯片 1

幻灯片 1 Delivering accurate maps to Chinese Android users 为中国安卓用户提供准确的地图服务 Work at Mapbox includes: Android apps, demos, starter kits, documentation, support, syncing Android team with other departments, etc.

More information

財金資訊-83期.indd

財金資訊-83期.indd APP APP APP APP / Apple 2008 7 App Store APP 2015 3 ios App Store APP 120 650 Google Android Market 2008 10 APP 2012 3 Google Android Play Play Play Play Google Play APP appfigures Google Play APP 2015

More information

第二節 研究方法 本論文第一章 緒論 說明研究動機與目的 研究方法及研究的範圍及限制 並對 飲食散文的義界 作一觀念的釐清 第二章 文獻探討 就將本研究的理 論建構中的概念作釐清 分別為 現代文學 飲食文學的重要論著 等兩個部 分來描述目前文獻的研究成果 並探討其不足待補述的地方 本研究以 文化研 究 為主要研究基礎 統攝整個研究架構 在不同章節裡 佐以相關研究方法進 行論述 茲圖示如下 研究方法

More information

1. 技術項目簡介 對於應用程式開發人員而言, 其開發程式的執行效能, 攸關使用者的使用意願 故開發時最好能夠兼顧所開發之軟體於執行時期, 對於系統的資源使用情況 本技術可以幫助程式開發人員瞭解所欲開發之應用軟體, 對於系統效能的影響, 進而進行效能改善 有別於市面上的應用程式, 本軟體開發套件可以

1. 技術項目簡介 對於應用程式開發人員而言, 其開發程式的執行效能, 攸關使用者的使用意願 故開發時最好能夠兼顧所開發之軟體於執行時期, 對於系統的資源使用情況 本技術可以幫助程式開發人員瞭解所欲開發之應用軟體, 對於系統效能的影響, 進而進行效能改善 有別於市面上的應用程式, 本軟體開發套件可以 System Monitor for Android SDK 開發者指南說明書 1. 技術項目簡介 對於應用程式開發人員而言, 其開發程式的執行效能, 攸關使用者的使用意願 故開發時最好能夠兼顧所開發之軟體於執行時期, 對於系統的資源使用情況 本技術可以幫助程式開發人員瞭解所欲開發之應用軟體, 對於系統效能的影響, 進而進行效能改善 有別於市面上的應用程式, 本軟體開發套件可以深入到開發者自行定義的功能,

More information

09 F9 128 peer to peer, P2P file transfer protocol bittorrent 10 P2P P2P GNU/ Linux P2P CC 單機版的智慧財產權 vs. 人權戰爭 1980 DVD content

09 F9 128 peer to peer, P2P file transfer protocol bittorrent 10 P2P P2P GNU/ Linux P2P CC 單機版的智慧財產權 vs. 人權戰爭 1980 DVD content 當智慧財產 侵犯人權? 智慧財產與人權 Kickstarter The Matrix The Matrix Avatar Eywa 12 2013 4 484 09 F9 128 peer to peer, P2P file transfer protocol bittorrent 10 P2P P2P GNU/ Linux P2P CC 單機版的智慧財產權 vs. 人權戰爭 1980 DVD content

More information

摘 要 本 校 多 媒 體 設 計 系 與 上 海 戲 劇 學 院 創 意 學 院 在 多 次 聯 繫 交 流 之 下, 已 簽 署 合 作 備 忘 錄, 積 極 尋 求 兩 校 合 作 教 學 與 共 同 創 作 之 機 會 藉 由 本 系 學 生 作 品 腦 殘 公 寓 入 圍 第 五 屆 中

摘 要 本 校 多 媒 體 設 計 系 與 上 海 戲 劇 學 院 創 意 學 院 在 多 次 聯 繫 交 流 之 下, 已 簽 署 合 作 備 忘 錄, 積 極 尋 求 兩 校 合 作 教 學 與 共 同 創 作 之 機 會 藉 由 本 系 學 生 作 品 腦 殘 公 寓 入 圍 第 五 屆 中 出 國 報 告 ( 出 國 類 別 : 其 他 - 國 際 競 賽 ) 中 國 獨 立 遊 戲 節 國 際 學 生 競 賽 及 上 海 戲 劇 學 院 合 作 洽 談 服 務 機 關 : 國 立 臺 中 科 技 大 學 多 媒 體 設 計 系 姓 名 職 稱 : 金 啟 平 專 案 講 師 派 赴 國 家 : 中 國 出 國 期 間 :102.9.14 102.9.17 報 告 日 期 :102.11.20

More information

* 1 2 3 32 1 2 3 2014 9 15 4 33 http://www.hisp.ntu.edu. tw/ 34 ID ID 2014 9 15 4 35 人文創新與社會實踐 圖三 文獻與案例蒐集資料截圖示意 三 網路平台與資料庫建置 配合人文創新與社會實踐計畫 建置資料庫與網站供計畫成員與大眾進 行資源分享與交流 本網路平台目前已建置完成 內容包含計畫之說明 實 踐研究團隊 政治大學

More information

小应用 Magic8

小应用 Magic8 胡家威 计研135班 http://hujiaweibujidao.github.io/ 小应用 Magic8 Android 系统简介 Android 应用结构 Android 四大组件 Activity 生命周期 Android 资源管理 UI 组件和容器组件 内容概要 ( 上 ) Android 系统简介 Android 市场份额 Android 是如何诞生的? Android 之父 :Andy

More information

人民邮电

人民邮电 第 2 章 布 局 布 局 是 所 有 带 界 面 的 Android 程 序 的 开 端 布 局 应 用 得 好 坏 直 接 决 定 了 程 序 的 用 户 体 验 虽 然 布 局 看 似 没 有 组 件 复 杂, 但 也 涉 及 到 了 很 多 技 巧 在 各 大 公 司 的 面 试 题 中 也 会 经 常 遇 到 关 于 布 局 的 一 些 问 题 通 过 这 些 问 题 可 以 考 查 应

More information

建立Android新專案

建立Android新專案 Android 智 慧 型 手 機 程 式 設 計 Android WebService 建 國 科 技 大 學 資 管 系 饒 瑞 佶 2012/4 V1 2012/8 V2 2013/5 V3 2014/10 v4 提 醒 這 節 的 內 容 針 對 的 是 MS 的 Web Service 或 是 使 用 SOAP(Simple Object Access Protocol) 標 準 建 立

More information

<A4E2BEF7B4FAB8D5B3F8A F52322E786C7378>

<A4E2BEF7B4FAB8D5B3F8A F52322E786C7378> 製表日期 : 2008 年 9 月 17 日 Mobile Java Applet 手機安裝測試報告表 已完成測試機型數量 :317 台 ; 無問題 ( 可安裝 / 可執行 ) 機型 :315 台無法使用 :2 台 ; 特殊註記機型 :2 台 廠牌 機型 測試狀況 OK 不 OK 安裝資料夾 ( 目錄 ) 備註 NOKIA N95 應用程式 NOKIA 6110 應用程式 NOKIA 3120 應用程式

More information

APP 103 學 年 度 嶺 東 科 技 大 學 資 訊 網 路 系 專 題 研 究 報 告 嶺 東 中 華 民 國 一 四 年 五 月 1

APP 103 學 年 度 嶺 東 科 技 大 學 資 訊 網 路 系 專 題 研 究 報 告 嶺 東 中 華 民 國 一 四 年 五 月 1 嶺 東 科 技 大 學 資 訊 網 路 系 專 題 研 究 報 告 嶺 東 APP 指 導 老 師 : 陳 志 樺 教 授 組 員 : 陳 俊 瑋 陳 崇 緣 江 健 民 張 宏 銘 駱 佳 琪 中 華 民 國 一 四 年 五 月 1 APP 103 學 年 度 嶺 東 科 技 大 學 資 訊 網 路 系 專 題 研 究 報 告 嶺 東 中 華 民 國 一 四 年 五 月 1 誌 謝 本 專 題 報

More information

<4D6963726F736F667420576F7264202D20312D3120D5D0B9C9CBB5C3F7CAE9A3A8C9CFBBE1B8E5A3A92E646F63>

<4D6963726F736F667420576F7264202D20312D3120D5D0B9C9CBB5C3F7CAE9A3A8C9CFBBE1B8E5A3A92E646F63> 创 业 板 投 资 风 险 本 次 股 票 发 行 后 拟 在 创 业 板 市 场 上 市, 该 市 场 具 有 较 高 的 投 资 风 险 创 业 板 公 司 具 有 业 绩 不 稳 定 经 营 风 险 高 退 市 风 险 大 等 特 点, 投 资 者 面 临 较 大 的 市 场 风 险 投 资 者 应 充 分 了 解 创 业 板 市 场 的 投 资 风 险 及 本 公 司 所 披 露 的 风 险

More information

實作SQLiteOpenHelper類別

實作SQLiteOpenHelper類別 SQLiteOpenHelper 類別存取 SQLite 建國科技大學資管系 饒瑞佶 2013/5 V1 Android 連結資料庫 MySQL SQL Server Web Service 遠端資料庫 Internet Intranet Android SQLite 單機資料庫 Android vs. SQLite 透過 SQLiteOpenHelper 類別來操作 建立資料庫 ( 建構子 ) 建立資料表

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

Microsoft Word - A201103-528_1299547322.doc

Microsoft Word - A201103-528_1299547322.doc 5 10 15 20 25 30 基 于 Android 平 台 的 人 机 交 互 的 研 究 与 实 现 郁 亚 男 ( 北 京 邮 电 大 学 软 件 学 院, 北 京 100876) 摘 要 : 随 着 计 算 的 发 展, 计 算 变 得 越 来 越 自 由, 在 资 源 使 用 方 面 也 越 来 越 灵 活 移 动 终 端 由 于 无 线 通 信 网 络 传 输 速 率 的 提 高,

More information

2016 勒索軟體白皮書

2016 勒索軟體白皮書 Botnet Botnet 1 1 2 2 5 5 6 9 10 11 11 11 12 12 12 12 12 12 13 14 2016 1989 AIDS AIDS C 189 2005 2006 TROJ_CRYPZIP.A 2011 TROJ_RANSOM.QOWA 12 2012 REVETON 2013 Cryptolocker Cryptolocker AES RSA Cryptolocker

More information

FETnet - Acer Iconia Tab  (A500 Wi-Fi 版) 平板電腦操作指南

FETnet - Acer Iconia Tab  (A500 Wi-Fi 版) 平板電腦操作指南 Acer Iconia Tab (A500) 平板電腦操作指南 作業系統 :Android 3.0 / 網路頻段 :Wi-Fi 版暫不支援 :Exchange Server 信箱 ( 無法使用 Smart 助手 ) 及手寫輸入法 產品外觀安全保密功能設定數據功能 開關 PIN 碼 ( 暫無資料 ) 更改 PIN 碼 ( 暫無資料 ) 解除 PUK 碼 ( 暫無資料 ) 手機密碼鎖 手動選網 ( 暫無資料

More information

66 67 圓夢素人頭家 67 9 專長互補 資源共享, 為彼此加油打氣!

66 67 圓夢素人頭家 67 9 專長互補 資源共享, 為彼此加油打氣! 64 素人頭家圓夢 65 圓夢 桃城食在好味道 3 5 2000 9 6 5 11 66 67 圓夢素人頭家 67 9 專長互補 資源共享, 為彼此加油打氣! 68 素人頭家圓夢 69 透過臉書分享, 用美食料理和粉絲搏感情 3 好手藝 講究的製程, 這些店家習以為常 的事, 對消費者來說卻是最難得的堅持, 3 消費者在找的不就是這樣的好東西? 2000 1500 1000 8 70 素人頭家圓夢

More information

1

1 内 容 提 要 作 为 Google 开 发 的 全 新 开 源 手 机 平 台,Android 发 展 如 火 如 荼 本 书 通 过 大 量 代 码 秘 诀 全 面 详 尽 地 讲 述 了 Android 开 发 技 术 从 activity 和 intent 基 础 知 识 开 始, 到 线 程 服 务 broadcast receiver 以 及 alert 警 告 框, 再 到 用 户 界

More information

戒菸實務個案自助手冊105年Ver.2

戒菸實務個案自助手冊105年Ver.2 本計劃經費來自 品健康福利捐支應 衛生福利部國民健康署 我 名字 為了 以下理由 1. 2. 3. 4. 5. 決定從 年 月 日起 簽署人 (簽章) 見證人 (簽章) 年 月 日 a 準備戒 V 環境的準備 排除讓自己想吸 自己戒 的環境 V 心理的準備 瞭解自己的吸 的環境 建立能提醒 行為 強化戒 決心 V 身體的準備 評估身體的尼古丁依賴度 必要時找尋 藥物降低戒 戒 的難度

More information

02 2 成立 Facebook 粉絲專頁 Facebook Facebook Facebook 1, Facebook Facebook 1 Facebook 2-21

02 2 成立 Facebook 粉絲專頁 Facebook Facebook Facebook 1, Facebook Facebook 1 Facebook 2-21 賺更多 24 24 2-10 我就是沒錢! 所以我只能利用免費的資源來獲取網路流量, 怎麼做比較好? 1 透過 Facebook 貼文在自己的個人頁面, 讓好友看見 Facebook Facebook 2-20 02 2 成立 Facebook 粉絲專頁 Facebook Facebook Facebook 1,000 100 Facebook Facebook 1 Facebook 2-21 賺更多

More information

1711-門市-PC-p1p2

1711-門市-PC-p1p2 2017. 10/11 PC Aspire GX-785 沈穩風格電競效能 全新戰力 AMD RYZEN 7 處理器顛覆想像 AMD RX480 系列顯卡 全新戰力 Intel 第 7 代 Core 處理器顛覆想像 GeForce GTX 10 系列顯卡 Aspire GX-281 沈穩風格電競效能 Aspire GX V LED Aspire GX NVIDIA GeForce GTX 1060

More information

2016 英雄聯盟世界大賽暨全明星賽官方指定夥伴 Predator G1-710 Predator G3-710 Predator G6-710 Turbo**G6 IceTunnel 3/27-5/5PredatorGefore GTX 10 [Predator] :

2016 英雄聯盟世界大賽暨全明星賽官方指定夥伴 Predator G1-710 Predator G3-710 Predator G6-710 Turbo**G6 IceTunnel 3/27-5/5PredatorGefore GTX 10 [Predator] : 最新第 7 代 Intel Core 處理器 2017. 04 PC Aspire GX-781 多工效能機 極致效能 高雅風格 多工能力 7Intel Core DDR4 好運機 / 含稅 7Intel Core i5-7400 (3.0GHz/ Turbo 3.5GHz) Windows 10 NVIDIA GeForce GT-730 全新戰力 Intel 第 7 代 Core 處理器顛覆想像

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明... 25 1

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明... 25 1 科 技 部 自 由 軟 體 專 案 原 始 程 式 碼 使 用 手 冊 Source Code Manual of NSC Open Source Project 可 信 賴 的 App 安 全 應 用 框 架 -App 應 用 服 務 可 移 轉 性 驗 證 Trusted App Framework -Transferability Verification on App MOST 102-2218-E-011-012

More information

6 2012 8476你猜得到它是什麼嗎 它就是 高分子! 生活中的高分子 有種物質的重要性不亞於我們所呼吸的空氣, 不管身在何處, 都有它的存在, 它甚至就隱藏在人體裡面! 人類若失去了它, 就得回到遠古時代, 甚至可能終止生命 高分子是什麼 高分子是由千個 甚至萬個以上的原子所組成, 呈現柔軟的特性 日常生活中使用的塑膠袋就是由高分子製造的, 人體組成中的 DNA 也是一種高分子 2012 8476

More information

% % % 獨立 廉正 專業 創新

% % % 獨立 廉正 專業 創新 101 99 102 101 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 99 102 8 4 34 11 101826 594 71.91% 160 19.37% 72 8.72% 101 100 27 18100 21 101 35 獨立 廉正 專業 創新 1. 7,290 8,677 26,180 26,011 1,272 1,346 142 157 7 7 1,757 1,795

More information

1706-門市-PC-封面封底

1706-門市-PC-封面封底 最新第 7 代 Intel Core 處理器 2017. 06 PC Aspire GX-781 沈穩風格電競效能 多工效能機 極致效能高雅風格多工能力 7 Intel Core DDR4 好運機 / 含稅 21,900 元 7 Intel Core i5-7400 (3.0GHz/ Turbo 3.5GHz) Windows 10 NVIDIA GeForce GT-730 8GB DDR4 1TB

More information

Microsoft PowerPoint - 03 开发入门.ppt [兼容模式]

Microsoft PowerPoint - 03 开发入门.ppt [兼容模式] 手 机 应 用 平 台 软 件 开 发 3 开 发 入 门 刘 宁 Email:liuning2@mail.sysu.edu.cn 课 程 简 介 课 程 目 标 Android 开 发 准 备 工 作 开 发 包 及 工 具 安 装 创 建 HelloWorld Android 程 序 设 计 基 础 创 意 移 动 应 用 创 意 移 动 应 用 创 意 移 动 应 用 创 意 移 动 应 用

More information

声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和 主 管 会 计 工 作 的

声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和 主 管 会 计 工 作 的 声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和 主 管 会 计 工 作 的 负 责 人 会 计 机 构 负 责 人 保 证 公 开 转 让 说 明 书 中 财 务 会 计 资

More information

二次曲線 人們對於曲線的使用及欣賞 比曲線被視為一種數學題材來探討要早 得多 各種曲線中 在日常生活常接觸的 當然比較容易引起人們的興趣 比如 投擲籃球的路徑是拋物線 盤子的形狀有圓形或橢圓形 雙曲線 是較不常見的 然而根據科學家的研究 彗星的運行軌道是雙曲線的一部 分 我們將拋物線 圓與橢圓 雙曲

二次曲線 人們對於曲線的使用及欣賞 比曲線被視為一種數學題材來探討要早 得多 各種曲線中 在日常生活常接觸的 當然比較容易引起人們的興趣 比如 投擲籃球的路徑是拋物線 盤子的形狀有圓形或橢圓形 雙曲線 是較不常見的 然而根據科學家的研究 彗星的運行軌道是雙曲線的一部 分 我們將拋物線 圓與橢圓 雙曲 -1 圓方程式 第 章 二次曲線 38 二次曲線 人們對於曲線的使用及欣賞 比曲線被視為一種數學題材來探討要早 得多 各種曲線中 在日常生活常接觸的 當然比較容易引起人們的興趣 比如 投擲籃球的路徑是拋物線 盤子的形狀有圓形或橢圓形 雙曲線 是較不常見的 然而根據科學家的研究 彗星的運行軌道是雙曲線的一部 分 我們將拋物線 圓與橢圓 雙曲線合稱為圓錐曲線 因為在平面坐標 系中 其對應的方程式均為二元二次式

More information

Microsoft PowerPoint - SAGE 2010

Microsoft PowerPoint - SAGE 2010 SAGE Journals Online -Communication Studies 大綱 SAGE 簡介 Communication Studies 收錄內容 SJO 平台功能介紹 首頁 瀏覽功能 檢索功能 進階服務 SAGE Content 超過 520 種人文 社會科學 理工 科技領域電子期刊 SAGE 與超過 245 個國際知名的學會合作 ( 包括 American Sociological

More information

Microsoft Word - ACL chapter02-5ed.docx

Microsoft Word - ACL chapter02-5ed.docx 第 2 章神奇的質數 2.1.1 什麼是質數 1 1 1 打下好基礎 - 程式設計必修的數學思維與邏輯訓練 1 1 0 10 2 3 5 7 4 6 8 9 10 4 10000 1229 1000 168 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131

More information

中 美 游 戏 产 业 比 较 中 美 游 戏 产 业 对 比 借 鉴 美 国 市 场 容 量 : 中 国 的 游 戏 产 业 仍 将 会 以 较 高 速 度 增 长 投 资 银 行 Digi-Capital 的 调 查 数 据 显 示, 从 全 球 市 场 占 有 率 来 看, 美 国 是 全 球

中 美 游 戏 产 业 比 较 中 美 游 戏 产 业 对 比 借 鉴 美 国 市 场 容 量 : 中 国 的 游 戏 产 业 仍 将 会 以 较 高 速 度 增 长 投 资 银 行 Digi-Capital 的 调 查 数 据 显 示, 从 全 球 市 场 占 有 率 来 看, 美 国 是 全 球 阿 里 推 手 游 平 台 战 略 游 戏 产 业 显 著 获 益 2014 年 1 月 9 日 李 纬 东 于 潇 陈 葳 目 录 近 期 热 点 专 题 摘 要 专 题 : 平 安 城 市 提 新 要 求 绿 色 智 能 安 防 受 宠 1 月 9 日 中 美 游 戏 对 比 专 题 : 环 保 部 与 31 省 签 大 气 污 染 防 治 目 标 责 任 书 1 月 8 日 游 戏 产 业 概

More information

Acronis P.1 Acronis Anydata Engine P.2 P.4 Acronis Backup Advanced P.5 Acronis Backup Advanced for AP P.6 Vmware P.7 Acronis Backup P.8 IDC 80 % $20,0

Acronis P.1 Acronis Anydata Engine P.2 P.4 Acronis Backup Advanced P.5 Acronis Backup Advanced for AP P.6 Vmware P.7 Acronis Backup P.8 IDC 80 % $20,0 321 3 2 1 Acronis P.1 Acronis Anydata Engine P.2 P.4 Acronis Backup Advanced P.5 Acronis Backup Advanced for AP P.6 Vmware P.7 Acronis Backup P.8 IDC 80 % $20,000 -Acronis Acronis Acornis 321 Acronis 虛擬化的興起

More information

2013~2015 保健食品產業專業人才 供需調查 2011 5 2011529 2012 2013~2015 2012 44.67% 2011 11.96% 2013~2015 ... 1... 1... 5... 10... 12... 13... 14... 19... 20... 22... 24... 12... 19... 21... 22 III IV 1... 1 2... 3

More information

基于ECO的UML模型驱动的数据库应用开发1.doc

基于ECO的UML模型驱动的数据库应用开发1.doc ECO UML () Object RDBMS Mapping.Net Framework Java C# RAD DataSetOleDbConnection DataGrod RAD Client/Server RAD RAD DataReader["Spell"].ToString() AObj.XXX bug sql UML OR Mapping RAD Lazy load round trip

More information

Microsoft Word - AEL CH05.doc

Microsoft Word - AEL CH05.doc 5-2 AutoCompleteTextView AutoCompleteTextView 非常類似 EditText, 屬於文字輸入方塊 ; 不過 AutoCompleteTextView 會在使用者輸入幾個字時就會顯示提示文字, 方便使用者選取而無需輸入所有文字, 是一種體貼使用者輸入的設計 AutoCompleteTextView 的提示列表與 Spinner 的選項列表建立方式相同, 需要建立字串陣列來儲存欲提示的文字

More information

開發工具 使用 Android SDK 建立應用程式 使用 Java 語言 Java Platform, Standard Edition (Java SE)

開發工具 使用 Android SDK 建立應用程式 使用 Java 語言 Java Platform, Standard Edition (Java SE) Android 應用程式 開發概論 中華民國九十九年十二月二日星期四 開發工具 使用 Android SDK 建立應用程式 使用 Java 語言 Java Platform, Standard Edition (Java SE) 系統需求 項目版本要求說明 作業系統 Windows XP/Vista MacOS X 10.4.8+ Ubuntu (Drapper) 開發套件 JDK + Android

More information

BlackBerry Classic Smartphone-用户指南

BlackBerry Classic Smartphone-用户指南 BlackBerry Classic Smartphone 版 本 : 10.3.1 用 户 指 南 发 布 日 期 : 2015-03-02 SWD-20150302151727377 目 录 设 置 和 基 本 知 识... 6 当 前 版 本 的 新 特 色...6 BlackBerry 智 能 手 机 简 介... 14 设 备 一 览... 14 BlackBerry Classic 键...16

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

A SB-5000 SB-5000 i 0A-12 i Q&A 0A-9 i 0H-31 i 0H-1 0A-16 A-18 SB-5000 Model Name: N1502 A-1

A SB-5000 SB-5000 i 0A-12 i Q&A 0A-9 i 0H-31 i 0H-1 0A-16 A-18 SB-5000 Model Name: N1502 A-1 SB-5000 閃光燈 參考說明書 Nikon Manual Viewer 2 將 Nikon Manual Viewer 2 應用程式安裝至您的智能手機或平板電腦可隨時隨地查看尼康數碼相機說明書 Nikon Manual Viewer 2 可從 App Store 和 Google Play 免費下載 Tc A SB-5000 SB-5000 i 0A-12 i Q&A 0A-9 i 0H-31

More information