Tác giả muốn xây dựng một ứng dụng giải trí baogồm có nghe nhạc và chơi game để giúp người dùng có thể thư giản quên đimọi mệt mỏi, căng thẳng.. Một ứng dụng miễn phí phù hợp với mọi lứa
Trang 1ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
Hà Nội - 2018 Chuyên ngành: Công nghệ Thông tin
XÂY DỰNG ỨNG DỤNG GIẢI TRÍ NGUYỄN THỊ KIM ANH
Trang 3Hà Nội, ngày 12 tháng 3 năm 2018
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
Họ và tên: Nguyễn Thị Kim Anh Giới tính: Nữ
Ngày sinh: 23/02/1996 Nơi sinh: Thái Bình
Chuyên ngành: Công nghệ thông tin Mã số: 14A10010186
Lớp hành chính: 1410A04
1 TÊN ĐỀ TÀI
Xây dựng ứng dụng giải trí
2 NHIỆM VỤ VÀ NỘI DUNG
Nhiệm vụ cụ thể của Đồ án tốt nghiệp:
- Phân tích thiết kế hệ thống, xác định yêu cầu của hệ thống
- Xây dựng các nghiệp vụ chính sau:
+ Chơi game
+ Nghe nhạc
3 NGÀY GIAO NHỆM VỤ:
4 NGÀY HOÀN THÀNH NHIỆM VỤ:
5 PHÂN CÔNG CÔNG VIỆC: Nguyễn Thị Kim Anh 100%
6 CÁN BỘ HƯỚNG DẪN: Nguyễn Thị Quỳnh Như
Trang 4trong cuộc sống hàng ngày để làm giảm đi những căng thẳng, mệt mỏi saumỗi giờ làm việc, học tập Tác giả muốn xây dựng một ứng dụng giải trí baogồm có nghe nhạc và chơi game để giúp người dùng có thể thư giản quên đimọi mệt mỏi, căng thẳng Một ứng dụng miễn phí phù hợp với mọi lứa tuổi.Nhận được sự giúp đỡ tận tình của cô Nguyễn Thị Quỳnh Như, người đã trựctiếp hướng dẫn em trong suốt quá trình thực hiện đồ án của mình Những nhậnxét, đánh giá và nhất là những chia sẻ kinh nghiệm làm việc của cô là nhữngthông tin vô cùng hữu ích cho việc hoàn thành dự án của em Em xin trântrọng cảm ơn cô, chúc cô và gia đình luôn luôn mạnh khỏe và đạt được mọithành công trong cuộc sống.
Bên cạnh đó em cũng xin gửi lời cảm ơn đến các thầy, cô đang công táctại khoa Công nghệ thông tin – Viện Đại học Mở Hà Nội đã giúp đỡ quá trìnhhọc tập trên lớp những kiến thức do thầy cô truyền thụ đã giúp em rất nhiềutrong việc hoàn thành được đồ án của mình
Cuối cùng em xin kính chúc các thầy cô mạnh khỏe, luôn luôn là nhữngngười lái đò ân cần dìu dắt các thế hệ sinh viên tiếp theo của FITHOU trưởngthành
Hà Nội, Ngày 11 tháng 4 năm 2018
Sinh viên thực hiệnNguyễn Thị Kim Anh
Trang 5CHƯƠNG 1 GIỚI THIỆU ĐỀ TÀI 1
1.1 Lý do chọn đề tài 1
1.1.1 Game 2048 1
1.1.2 Nghe nhạc 2
1.2 Mục tiêu đề tài 2
1.3 Phạm vi đề tài 3
1.4 Phân tích bài toán 3
1.4.1 Mục nghe nhạc 3
1.4.2 Mục chơi game 3
CHƯƠNG 2 GIỚI THIỆU CÔNG NGHỆ SỬ DỤNG 5
VÀ NỀN TẢNG PHÁT TRIỂN 5
2.1 Hệ điều hành android 5
2.1.1 Đặc điểm 6
2.1.2 Kiến trúc và các thành phần 7
2.1.2.1 Kiến trúc tổng quát 7
2.1.2.2 Các thành phần của một ứng dụng Android 7
2.2 Các công nghệ sử dụng 8
2.2.1 Ngôn ngữ java 8
2.2.2 Service 10
2.2.3 Giới thiệu MediaPlayer trong Android 14
2.2.4 Android SharedPreference 15
CHƯƠNG 3: PHÂN TÍCH THIẾT KẾ HỆ THỐNG 17
3.1 Phát biểu bài toán 17
3.2 Xác định yêu cầu 31
Trang 63.2 Sơ đồ phân rã chức năng 36
3.3 Sơ đồ luồng dữ liệu logic 37
3.3.1 DFD mức ngữ cảnh 37
3.3.2 Sơ đồ luồng dữ liệu mức đỉnh 38
3.3.3 Sơ đồ luồng dữ liệu mức dưới đỉnh 38
3.3.3.1 Mức dưới đỉnh của quản lý nhạc 38
3.4 Rà soát việc đáp ứng các yêu cầu 39
3.5 Mô hình thực thể - quan hệ (ER) 40
3.5.1 Xác định các kiểu thực thể, thuộc tính và các loại thuộc tính 40
3.6 Thiết kế giao diện 40
3.6.1 Menu màn hình chính 40
3.6.2 Màn hình nghe nhạc 41
3.6.3 Màn hình chọn kích thước game 42
3.6.4 Màn hình game 2048 kích thước 3 x 3 43
3.6.5 Màn hình game 2048 kích thước 4 x 4 44
3.6.6 Màn hình game 2048 kích thước 5x5 45
3.6.7 Màn hình hướng dẫn chơi game 45
3.6.9 Màn hình hiển thị khi người chơi chiến thắng 46
3.6.10 Màn hình hiển thị khi người chơi thua cuộc 47
CHƯƠNG 4: THUẬT TOÁN SỬ DỤNG TRONG GAME 2048 48
4.1 Thuật toán xử lý hoạt động vuốt trong game 2048 48
4.1.1 Thuật toán xử lý hoạt động vuốt sang trái 48
4.1.2 Thuật toán xử lý hoạt động vuốt sang phải 50
4.1.3 Thuật toán xử lý hoạt động vuốt lên trên 52
Trang 7nó vào mảng 1 chiều 56
4.2.2 Sinh số ngẫu nhiên 57
4.3 Thuật toán chuyển ô có giá trị bằng 2 thành ô có giá trị bằng 4 58
4.4 Thuật toán quay lại 59
TÀI LIỆU THAM KHẢO 60
Trang 8Hình 2.2 Service 13
Hình 3.1 Mô tả hoạt động vuốt sang trái 17
Hình 3.2 Mô tả hoạt động vuốt sang phải 18
Hình 3.3 Mô tả hoạt động vuốt lên trên 18
Hình 3.4 Mô tả hoạt động vuốt lên trên 18
Hình 3.5 Mô tả hoạt động cộng dồn 19
Hình 3.6 Hiện số ngẫu nhiên trong mảng 19
Hình 3.7 Mô tả giá trị lớn nhất trong mảng 20
Hình 3.8 Mô tả chức năng tính điểm 20
Hình 3.9 Mô tả chức năng đổi vị trí 2 ô 20
Hình 3.10 Mô tả chức năng quay lại 21
Hình 3.11 Mô tả chức năng chuyển 2 thành 4 21
Hình 3.12 Mô tả hoạt động vuốt sang trái 21
Hình 3.13 Mô tả hoạt động vuốt sang phải 22
Hình 3.14 Mô tả hoạt động vuốt lên trên 22
Hình 3.15 Mô tả hoạt động vuốt lên trên 22
Hình 3.16 Mô tả hoạt động cộng dồn 23
Hình 3.17 Hiện số ngẫu nhiên trong mảng 23
Hình 3.18 Mô tả giá trị lớn nhất trong mảng 24
Hình 3.19 Mô tả chức năng tính điểm 24
Hình 3.20 Mô tả chức năng đổi vị trí 2 ô 25
Hình 3.21 Mô tả chức năng quay lại 25
Hình 3.22 Mô tả chức năng chuyển 2 thành 4 26
Hình 3.23 Mô tả hoạt động vuốt sang trái 26
Hình 3.24 Mô tả hoạt động vuốt sang phải 27
Trang 9Hình 3.28 Hiện số ngẫu nhiên trong mảng 28
Hình 3.29 Mô tả giá trị lớn nhất trong mảng 29
Hình 3.30 Mô tả chức năng tính điểm 29
Hình 3.31 Mô tả chức năng đổi vị trí 2 ô 30
Hình 3.32 Mô tả chức năng quay lại 30
Hình 3.33 Mô tả chức năng chuyển 2 thành 4 31
Hình 3.34 Tiến trình nghiệp vụ toàn bài 33
Hình 3.35 Tiến trình nghiệp vụ nghe nhạc 34
Hình 3.36 Tiến trình nghiệp vụ chơi game 35
Hình 3.37 Sơ đồ phân rã chức năng 36
Hình 3.38 DFD mức ngữ cảnh 37
Hình 3.39 Sơ đồ luồng dữ liệu mức đỉnh 38
Hình 3.40 Mức dưới đỉnh của quản lý nhạc 38
Hình 3.44 Menu màn hình chính 40
Hình 3.45 Màn hình nghe nhạc 41
3.6.3 Màn hình chọn kích thước game 42
Hình 3.46 Màn hình chọn kích thước 42
Hình 3.47 Game 2048 kích thước 3x3 43
Hình 3.48 Game 2048 kích thước 4x4 44
Hình 3.49 Game 2048 kích thước 5x5 45
Hình 3.50 Màn hình hướng dẫn chơi game 45
Hình 3.51 Menu trong game 46
Hình 3.52 Màn hình hiển thị sau khi người chơi thắng 46
Hình 3.53 Màn hình hiển thị sau khi người chơi thắng 47
Hình 4.1 Bước 1 thuật toán vuốt trái 48
Trang 10Hình 4.5 Bước 1 thuật toán vuốt lên trên 52
Hình 4.6 Bước 2 thuật toán vuốt lên trên 53
Hình 4.7 Bước 1 thuật toán vuốt xuống dưới 54
Hình 4.8 Bước 2 thuật toán vuốt xuống dưới 55
Hình 4.9 Thuật toán lưu các ô có giá trị bằng 0 vào mảng 1 chiều 56
Hình 4.10 Thuật toán sinh số ngẫu nhiên 57
4.3 Thuật toán chuyển ô có giá trị bằng 2 thành ô có giá trị bằng 4 58
Hình 4.11 Sơ đồ thuật toán chuyển 2 thành 4 58
Hình 4.12 Thuật toán mảng lùi Hình 4.13 Sơ đồ thuật toán quay lại 59
Bảng 2.2 Các phương thức trong MediaPayer 14
Bảng 3.1 Rà soát việc đáp ứng các yêu cầu 39
Trang 11CHƯƠNG 1 GIỚI THIỆU ĐỀ TÀI
1.1 Lý do chọn đề tài
1.1.1 Game 2048
Trên quan điểm khoa học thì việc chơi game sẽ mang lại nhiềulợi ích hơn hẳn cách mà các phụ huynh nghĩ Dĩ nhiên nếu biết lựa chọncác game hợp lý và sắp xếp thời gian chơi phù hợp thì ngoài tác dụnggiải tỏa căng thẳng, những lợi ích của game còn nhiều hơn thế
- Phản xạ nhanh hơn, tay và mắt phối hợp tốt hơn
- Cải thiện tư duy, rất tốt cho người đi làm hay lên kế hoạch, chiến lược
- Bạn sẽ kiên trì hơn, biết cách phối hợp trong làm việc nhóm
- Điều trị những căn bệnh mãn tính
- Chơi game giúp giảm đau
- Tốt cho mắt
2048 là game với cách chơi vô cùng đơn giản: Bạn có một bảng n x n ô
số, bạn chỉ việc di chuyến các ô số sao cho hai ô số cùng giá trị được nhậpvào nhau, mỗi lần di chuyến là có thêm ô số mới xuất hiện Các giá trị số là 2,
4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 Và con số 2048 chính là đích đếncủa trò chơi bởi vì nó khá khó Mặc dù vậy, bạn vẫn có thế tiếp tục game chođến 4096, 8192, 16348 Như vậy, 2048 là một game điểm, không có điểmdừng
2048 yêu cầu sự thông minh, nhanh nhẹn, sử dụng trí óc và bộ não củangười chơi Phù hợp với mọi lứa tuổi
Trang 121.1.2 Nghe nhạc
Nghiên cứu gần đây cho thấy rằng việc nghe nhạc giúp chúng ta luôncảm thấy hạnh phúc và cải thiện sức khỏe thể chất một cách đáng kinh ngạc
Nếu được học hoặc đào tạo về âm nhạc không chỉ giúp nâng cao chỉ số IQ mà
nó còn mang lại nhiều lợi ích khi chúng ta về già nữa Dưới đây là 15 lợi íchtuyệt vời đã được khoa học chứng minh của việc nghe nhạc có thể bạn chưabiết
- Âm nhạc làm bạn cảm thấy hạnh phúc hơn
- Âm nhạc giúp bạn có thêm nhiều động lực
- Âm nhạc làm giảm căng thẳng và cải thiện sức khỏe
Để luôn giữ bình tĩnh và giải tỏa căng thẳng sau một ngày làm việc vất
vả, hãy bật nhạc lên, hát theo và rung chân theo từng điệu nhạc để loại bỏ tối
đa những bệnh có thể mắc phải
- Âm nhạc giúp bạn ngủ ngon hơn
- Âm nhạc giúp giảm nguy cơ mắc bệnh trầm cảm
- Âm nhạc giúp tăng khả năng học tập và ghi nhớ
- Âm nhạc làm giảm đau
- Âm nhạc giúp cải thiện trí nhớ của các bệnh nhân Alzheimer
- Âm nhạc giúp các bệnh nhân đột quỵ hồi phục
- Âm nhạc làm tăng tính sáng tạo trong lời nói
- Âm nhạc giúp não bộ khỏe mạnh dù đã lớn tuổi
Vì những lợi ích to lớn của nghe nhạc và chơi game mà em đã nêu trênnên em quyết định làm một ứng dụng bao gồm chức năng nghe nhạc và chơigame đó là ứng dụng giải trí
1.2 Mục tiêu đề tài
Nghiên cứu tìm hiểu cách làm việc và lập trình trên nền tảng Android
Trang 13Hiểu về nguyên lý hoạt động của của Android, các thành phần của hệthống cũng như của một ứng dụng thực thi trên nền android.
Nghiên cứu sử dụng ngôn ngữ Java và các thư viện trong Android đểlập trình Game và phát nhạc
Xây dựng phần mềm cài được trên thiết bị thật Android:
- Chơi game và nghe nhạc không phát sinh lỗi
- Hình ảnh, hiệu ứng rõ nét
- Lưu được điểm kỉ lục
- Hiện thị danh sách bài hát từ bộ nhớ trong
2048 chơi trên một lưới vuông n x n Mỗi lần di chuyển là một lượt,
người chơi sử dụng các phím mũi tên và các khối vuông sẽ trượt theo mộttrong bốn hướng tương ứng (lên, xuống, trái, phải) Mỗi lượt có một khối cógiá trị 1, 2 hoặc 4 sẽ xuất hiện ngẫu nhiên ở một ô trống trên lưới Các khốivuông trượt theo hướng chỉ định cho đến khi chạm đến biên của lưới hoặcchạm vào khối vuông khác Nếu hai khối vuông có cùng giá trị chạm vào
Trang 14nhau, chúng sẽ kết hợp lại thành một khối vuông có giá trị bằng tổng giá trịhai khối vuông đó (giá trị gấp đôi) Khối vuông kết quả không thể kết hợp vớikhối vuông khác một lần nữa trong một lượt di chuyển Để dễ nhận biết thìcác khối vuông giá trị khác nhau sẽ có màu sắc khác nhau.
Bảng điểm ở góc trên bên phải cho biết điểm của người chơi Ban đầuđiểm bằng 0 Khi hai khối vuông kết hợp thì người chơi sẽ tăng điểm là giá trịkhối vuông mới Bên cạnh điểm hiện tại là ô có giá trị lớn nhất mà người chơiđang đạt được Cuối cùng là kỉ lục điểm cao nhất người chơi từng đạt được.Khi người chơi tạo được ô vuông có giá trị 2048 thì thắng cuộc Lúc nàyngười chơi có thể lựa chọn tiếp tục chơi để đạt các giá trị cao hơn 2048 Khikhông còn nước đi hợp lệ (không còn ô trống và các ô kề nhau đều khác giátrị) thì trò chơi kết thúc
Trang 15CHƯƠNG 2 GIỚI THIỆU CÔNG NGHỆ SỬ DỤNG
VÀ NỀN TẢNG PHÁT TRIỂN 2.1 Hệ điều hành android
Android là một hệ điều hành dựa trên nền tảng Linux được thiết kếdành cho các thiết bị di động có màn hình cảm ứng như điện thoại thôngminh và máy tính bảng
Android có mã nguồn mở và Google phát hành mã nguồn theoGiấy phép Apache Chính mã nguồn mở cùng với một giấy phép không
có nhiều ràng buộc đã cho phép các nhà phát triển thiết bị, mạng di động
và các lập trình viên nhiệt huyết được điều chỉnh và phân phối Androidmột cách tự do Ngoài ra, Android còn có một cộng đồng lập trình viênđông đảo chuyên viết các ứng dụng để mở rộng chức năng của thiết bị,bằng một loại ngôn ngữ lập trình Java có sửa đổi
Android chiếm 75% thị phần điện thoại thông minh trên toàn thếgiới vào thời điểm quý 3 năm 2012, với tổng cộng 500 triệu thiết bị đãđược kích hoạt và 1,3 triệu lượt kích hoạt mỗi ngày Sự thành công của
hệ điều hành cũng khiến nó trở thành mục tiêu trong các vụ kiện liênquan đến bằng phát minh, góp mặt trong cái gọi là "cuộc chiến điện thoạithông minh" giữa các công ty công nghệ
Nền tảng Android tích hợp nhiều tính năng nổi bật: Android là một
hệ điều hành nhân Linux, đảm bảo sự tương tác với các phần cứng, quản
lý bộ nhớ, điều khiển các tiến trình tối ưu cho các thiết bị di động
Bộ ứng dụng khung cho phép sử dụng lại và thay thế cácthành phần riêng lẻ
Trang 16 Máy ảo Dalvik được tối ưu cho các thiết bị di động, chạy cácứng dụng lập trình trên ngôn ngữ Java
Các thư viện cho phát triển ứng dụng mã nguồn mở bao gồmSQLite, WebKit, OpenGL và trình quản lý đa phương tiện
Hỗ trợ các chuẩn đa phương tiện phổ biến, thoại trên nềnGSM, Bluetooth EDGE, 3G và Wifi
Hỗ trợ Camera, GPS, la bàn, máy đo gia tốc…
Bộ phát triển ứng dụng SDK đầy đủ gồm thiết bị giả lập, công
cụ sửa lỗi, tích hợp với Eclipse SDK
Android cung cấp một tập hợp đầy đủ các phần mềm cho thiết bị diđộng bao gồm: hệ điều hành, các khung ứng dụng và các ứng dụng cơ bản
Tính mở
Android được xây dựng từ dưới đi lên cho phép người phát triểntạo các ứng dụng di động với đầy đủ các điểm mạnh của các thiết bị cầmtay hiện có Android hoàn toàn mở, một ứng dụng có thể gọi tới bất kểmột chức năng lõi của điện thoại như tạo cuộc gọi, gửi tin nhắn hay sửdụng máy ảnh, Android được xây dựng trên nhân Linux mở Thêm nữa,
nó sử dụng một máy ảo mà đã được tối ưu hóa bộ nhớ và phần cứng vớimôi trường di động Android là một mã nguồn mở, nó có thể được mởrộng để kết hợp tự do giữa các công nghệ nổi trội
Tính ngang hàng của các ứng dụng
Trang 17Với Android, không có sự khác nhau giữa các ứng dụng điện thoại
cơ bản với ứng dụng của bên thứ ba Chúng được xây dựng để truy cậpnhư nhau tới một loạt các ứng dụng và dịch vụ của điện thoại
Trang 182.2 Các công nghệ sử dụng
2.2.1 Ngôn ngữ java
Ngôn ngữ lập trình Java ban đầu được phát triển bởi SunMicrosystems do James Gosling khởi xướng và phát hành vào năm 1995(Java 1.0 [J2SE]) Tính đến thời điểm này (tháng 2/2015) phiên bản mớinhất của Java Standard Edition (JSE) là 8 Với ưu thế về đa nền tảng(multi platform) Java càng lúc càng được ứng dụng rộng rãi trên nhiềuthiết bị từ máy tính đến mobile và nhiều thiết bị phần cứng khác
Java là ngôn ngữ lập trình hướng đối tượng nên nó cũng có 4 đặcđiểm chung của các ngôn ngữ hướng đối tượng
Tính trừu tượng (Abstraction): là tiến trình xác định và nhóm các
thuộc tính, các hành động liên quan đến một thực thể đặc thù, xét trong mốitương quan với ứng dụng đang phát triển
Tính đa hình (Polymorphism): cho phép một phương thức có các tác
động khác nhau trên nhiều loại đối tượng khác nhau Với tính đa hình, nếucùng một phương thức ứng dụng cho các đối tượng thuộc các lớp khác nhauthì nó đưa đến những kết quả khác nhau Bản chất của sự việc chính làphương thức này bao gồm cùng một số lượng các tham số
Tính kế thừa (Inheritance): Điều này cho phép các đối tượng chia sẻ
hay mở rộng các đặc tính sẵn có mà không phải tiến hành định nghĩa lại
Tính đóng gói (Encapsulation): là tiến trình che giấu việc thực thi
những chi tiết của một đối tượng đối với người sử dụng đối tượng ấy
Bên cạnh đó Java còn có một số đặc tính khác:
Độc lập nền (Write Once, Run Anywhere):
Trang 19Không giống như nhiều ngôn ngữ lập trình khác như C và C ++, khi Java được biên dịch, nó không được biên dịch sang mã máy cụ thể, mà thay vào
đó là mã byte code chạy trên máy ảo Java (JVM) Điều này đồng nghĩa với việc bất cứ thiết bị nào có cài đặt JVM sẽ có thể thực thi được các chương trình Java
Đơn giản: học Java thật sự dễ hơn nhiều so với C/C++, nếu bạn đã
quen với các ngôn ngữ lập trình hướng đối tượng thì việc học Java sẽ dễ dànghơn Java trở nên đơn giản hơn so với C/C++ do đã loại bỏ tính đa kế thừa vàphép toán con trỏ từ C/C++
Bảo mật: Java hỗ trợ bảo mật rất tốt bởi các thuật toán mã hóa như mã
hóa một chiều (one way hashing) hoặc mã hóa công cộng (public key)
Đa luồng: Với tính năng đa luồng Java có thể viết chương trình có thể
thực thi nhiều task cùng một lúc Tính năng này thường được xử dụng rấtnhiều trong lập trình game
Hiệu suất cao nhờ vào trình thu gom rác (garbage collection), giải
phóng bộ nhớ đối với các đối tượng không được dùng đến
Linh hoạt: Java được xem là linh hoạt hơn C/C ++ vì nó được thiết kế
để thích ứng với nhiều môi trường phát triển
Hình 2.1
Trang 20Java được sử dụng để làm gì?
Viết ứng dụng web (J2EE): Java thường được sử dụng để xây dựng các
hệ thống web lớn đòi hỏi độ bảo mật cao, số lượng người dùng lớn như ngânhàng, phần mềm quản lý bệnh viện, CRM, HRM Đối với các website nhỏthông thường rất ít viết bằng Java
Viết ứng dụng mobile (J2ME): Trước đây nền tảng J2ME thường được
sử dụng để viết game và app cho di động feature phone (file jar) và giờ đâykhi smartphone Android lên ngôi Java lại tiếp tục được sử dụng để viết app vàgame cho nền tảng Android (file apk)
2.2.2 Service
Định nghĩa service
Một service là một thành phần của ứng dụng, thể hiện mong muốn ứngdụng thực hiện các hành động trong khi không tương tác với người dung hoặccung cấp chức năng cho các ứng dụng khác sử dụng Nói một cách đơn giản,service là các tác vụ (task) chạy ngầm dưới hệ thống nhằm thực hiện mộtnhiệm vụ nào đó Mỗi class Service phải chứa thẻ <service> được khai báotrong file AndroidMainfext.xml Service có thể được bắt đầu bởiContext.startService() và Context.bindservice()
Cũng như các đối tượng của ứng dụng khác, service chạy trên luồng(Thread) của tiến trình chính Có nghĩa là nếu service của bạn dự định chạycác hành vi có cường độ lớn hoặc các hành vi có thể gây nghẽn mạch, nó sẽ
tự sinh ra luồng (Thread) của chính nó để làm thực hiện các tác vụ được đặc
tả trong Service
Cần lưu ý:
Trang 21Service không phải là một tiến trình độc lập Đối tượng service khôngchạy trên tiến trình (process) của riêng nó (trừ khi có một yêu cầu đặc biệt),Service chạy trên tiến trình của chương trình.
Service không phải là một luồng (thread)
Service có chứa 2 đặc trưng cơ bản sau:
Là một chức năng để ứng dụng thông báo với hệ thống về việc mà nómuốn thực hiện ở phía dưới nền (ngay cả khi người dùng không tương táctrực tiếp tới ứng dụng) Điều này tương ứng với việc gọi phương thứcContext.startservice(), nó sẽ yêu cầu hệ thống lên lịch cho service để chạy chođến khi bị chính service hay người nào đó dừng nó lại
Là một chức năng cho phép ứng dụng để cung cấp các chức năng của
nó cho các ứng dụng khác Điều đó tương ứng với việc gọiContext.bindService(), cho phép một long-standing connection được tạo ra đểservice có thể tương tác với nó
Khi một Service được tạo ra, việc hệ thống cần làm là tạo ra thành phần
và gọi hàm onCreate() và bất kỳ lệnh callback thích hợp nào trên luồng chính
Nó phụ thuộc vào Service thi hành hành vi thích hợp nào, chẳng hạn tạoluồng thứ hai để thực hiện tiến trình
Vòng đời của 1 Service
Có 2 lý do để một service được chạy bởi hệ thống Bằng cách gọiphương thức Context.startService() và Context.bindService() Nếu ngườidùng gọi phương thức Context startService() thì hệ thống sẽ nhận về một đốitượng service (tạo mới nó và gọi hàm onCreate() nếu cần thiết) và sau đó lạigọi phương thức onStartCommand (Intent, int, int) với các biến được cungcấp bởi client Service mới được tạo ra này sẽ chạy cho tới khi lệnh gọiphương thức Context.stopService() hoặc phương thức stopSelf() Dù cho một
Trang 22service có được start bao nhiêu lần đi nữa thì nó sẽ bị tắt ngay khi phươngthức Context.stopService() hoặc phương thức stopSelf() được gọi Service cóthể dùng phương thức stopSelf(int) để đảm bảo rằng service sẽ không được tắtcho đến khi Intent đã khởi tạo nó được xử lý.
Bảng 2.1 Mô tả trạng thái của service
như Activity khởi động nó bằng cách
gọi startService() Một khi được gọi, dịch vụ này có
thể chạy ở chế độ nền vô thời hạn, thậm chí cả khithành phần đã khởi động nó bị phá hủy.Dịch vụ này còn được gọi là dịch vụ không bị giàngbuộc (Un Bounded Service)
Một dịch vụ ràng buộc cung cấp một giao
diện client-server cho phép các thành phần tương
tác với dịch vụ, gửi các yêu cầu, nhận kết quả, vàthậm chí làm như vậy xuyên qua nhiều tiến trình vớiInterprocess communication (IPC) (Truyền thôngnhiều tiến trình)
Một dịch vụ có phương thức gọi lại chu kỳ vòng đời của nó (life cyclecallback methods) mà bạn có thực hiện (implement) để theo dõi những thayđổi trong trạng thái của dịch vụ và bạn có thể thực hiện công việc ở giai đoạnthích hợp Sơ đồ dưới đây về bên trái cho thấy vòng đời khi dịch vụ được tạo
ra với startService(), sơ đồ bên phải cho thấy vòng đời của dịch vụ được tạo
ra bởibindService().
Trang 23Hình 2.2 ServiceDựa theo hình trên, 1 service được bắt đầu bởi phương thứcstartService() là service dùng để thực hiện các tác vụ ngầm dưới nền, serviceđược bắt đầu bởi phương thức bindService() là service được dùng để cung cấpcác chức năng cho các chương trình khác.
Trang 242.2.3 Giới thiệu MediaPlayer trong Android
Lớp MediaPlayer: Lớp android.media.MediaPlayer là được sử
dụng để điều kiển những tâp tin như audio hoặc video
Phương thức của lớp MediaPlayer: Có rất nhiều phương thức của
lớp MediaPlayer Một số lớp thường được hay sử dụng là
Bảng 2.2 Các phương thức trong MediaPayer
public void prepare() phát lại đồng bộ
public void start() bắt đầu hoặc tiếp tục lại phát lại
public void stop() dừng phát lại
public void pause() tạm dừng phát lại
public boolean isPlaying() kiểm tra nếu máy nghe nhạc phương tiện truyền
thông đang phát
public void seekTo(int millis) tìm cách thời gian quy định trong mili giây.public void setLooping(boolean
looping)
đặt máy trong vòng lặp hoặc không lặp
public boolean isLooping() kiểm tra nếu người chơi được lặp hoặc không
lặp
public void selectTrack(int
index)
chọn một ca khúc cho các chỉ số xác định
public int getCurrentPosition() trả về vị trí phát hiện
public int getDuration() trả về thời gian của tập tin
public void setVolume (float
leftVolume,float rightVolume)
đặt âm lượng trên máy nghe nhạc này
2.2.4 Android SharedPreference
Giới thiệu
SharedPreference là một lớp cho phép lưu trữ và nhận dữ liệu theo
key-value với các kiểu dữ liệu nguyên thuỷ như integer, string, boolean, float,
long
Trang 25Preference gần giống với Bundle nhưng nó có thể lưu trữ dữ liệu cònBundle thì không
Lấy một SharedPreference mặc định của một Activity
SharedPreference shared = getPreferences(MODE_PRIVATE);
SharedPreferrence sẽ được lưu ở data/data/packageName/shared_prefs/filename
putLong()/getLong()putFloat()/getFloat()putString()/getString()
Hàm xoá preferrence: remove(String key)
Sau khi gọi hàm này cần được gọi tiếp theo hàm commit() để xácnhận
clear(): xoá toàn bộ data trong SharedPreference
Trang 26commit(): xác nhận edit
ShareReference mode
- MODE_PRIVATE: chỉ ứng dụng có thể truy nhập vào
- MODE_WORLD_READABLE: các ứng dụng khác có thể đọc đượcnội dung nhưng không thể sửa hoặc thêm
- MODE_WORLD_WRITABLE: Ứng dụng khác có thể đọc/ghi nộidung
- MODE_MULTI_PROCESS: Nhiều process có thể cùng chỉnh sửaSharedPreference
Trang 27CHƯƠNG 3: PHÂN TÍCH THIẾT KẾ HỆ THỐNG
3.1 Phát biểu bài toán
Ứng dụng giải trí bao gồm 2 chức năng chính là chơi game và nghe nhạc
- Chức năng nghe nhạc
Khi người dùng chọn chức năng nghe nhạc danh sách phát nhạc sẽ đượchiển thị Với giao diện đơn giản và dễ sử dụng tương tự như một app nghenhạc offline thông thường Danh sách phát nhạc được lấy từ bộ nhớ trong củamáy Khi nghe nhạc bạn có thể nghe bất cứ 1 bài hát nào có trong danh sáchnhạc chỉ bằng 1 cái click chuột, nghe đi nghe lại 1 bài hát mà bạn yêu thíchhoặc nghe ngẫu nhiên bài hát nào đó trong danh sách
- Chức năng chơi game
Khi người dùng chọn chức năng chơi game thì hiện màn hình cho ngườidùng lựa chọn kích thước lưới vuông là 3x3, 4x4, 5x5
Game 2048 là thể loại game thách trí khá thú vị đối với người chơi vì đòihỏi sự thông minh, logic hóa vấn đề
Để các bạn chơi game dễ dàng, chủ yếu là các thao tác kéo màn hình quatrái, phải, lên, xuống
Người dùng chọn kích thước 3x3
Ví dụ:
Người chơi vuốt sang trái thì những ô số sẽ được dồn sang phải
Hình 3.1 Mô tả hoạt động vuốt sang trái
Trang 28Người chơi vuốt sang phải thì những ô số sẽ được dồn sang trái
Hình 3.2 Mô tả hoạt động vuốt sang phảiNgười chơi vuốt lên trên thì những ô số sẽ được dồn xuống dưới
Hình 3.3 Mô tả hoạt động vuốt lên trênNgười chơi vuốt xuống dưới thì những ô số sẽ được dồn lên trên
Hình 3.4 Mô tả hoạt động vuốt lên trênSau mỗi lần vuốt các con số giống nhau được gộp lại thành những con sốgấp đôi số ban đầu (ví dụ ô 2 + ô 2 => ô 4, ô 4 + ô4 => ô 8 )
Trang 29Hình 3.5 Mô tả hoạt động cộng dồnMỗi lần bạn di chuyển màn hình là các con số mới sẽ phát sinh thêm 1cách ngẫu nhiên tạo thành tổng thể làm rối mắt người chơi
Hình 3.6 Hiện số ngẫu nhiên trong mảng
Các bạn phải suy nghĩ và thử sao cho kết hợp được nhiều hình vuôngnhất và tối thiểu hóa số ô trống trong game Cứ như vậy cộng dồn các ô lại đểđược ô 2048 thì bạn sẽ dành chiến thắng Nếu trước khi bạn đạt được ô 2048
mà các ô đầy không còn ô trống để di chuyển hoặc sinh thên ô ngẫu nhiên nữathì trò chơi kết thúc
Game có bổ sung các chức năng cho người chơi như:
• Hiển thị số lớn nhất sau mỗi lần di chuyển giúp người chơi
có thể biết ô số lớn nhất hiện tại là bao nhiêu
Trang 30Hình 3.7 Mô tả giá trị lớn nhất trong mảng
• Ô điểm sẽ hiển thị tổng giá trị các ô sau mỗi lần bạn di chuyển.Mỗi lần bạn di chuyển thì điểm số cũng sẽ được thay đổi theo
Hình 3.8 Mô tả chức năng tính điểm
• Đổi vị trí 2 ô cho nhau
Hình 3.9 Mô tả chức năng đổi vị trí 2 ô
Để sử dụng chức năng này thì điểm của bạn phải lớn hơn hoặc bằng
300 điểm Sau khi chọn chức năng xong hệ thống sẽ tự động trừ đi 300 điểmcủa bạn
Chức năng quay lại sẽ giúp bạn quay lại bước đi trước đó nếu như bạncảm thấy nước đi này không tốt Bạn sẽ bị trừ 200 điểm sau khi thực hiện
Trang 31Hình 3.10 Mô tả chức năng quay lại
Chuyển tất cả những ô có giá trị bằng 2 thành 4 Để thực hiện chứcnăng này bạn sẽ bị trừ 100 điểm
Hình 3.11 Mô tả chức năng chuyển 2 thành 4
Người chơi chọn lưới vuông 4x4
Để các bạn chơi game dễ dàng, chủ yếu là các thao tác kéo màn hình quatrái, phải, lên, xuống
Ví dụ:
Người chơi vuốt sang trái thì những ô số sẽ được dồn sang phải
Hình 3.12 Mô tả hoạt động vuốt sang trái
Trang 32Người chơi vuốt sang phải thì những ô số sẽ được dồn sang trái
Hình 3.13 Mô tả hoạt động vuốt sang phảiNgười chơi vuốt lên trên thì những ô số sẽ được dồn xuống dưới
Hình 3.14 Mô tả hoạt động vuốt lên trênNgười chơi vuốt xuống dưới thì những ô số sẽ được dồn lên trên
Hình 3.15 Mô tả hoạt động vuốt lên trên
Trang 33Sau mỗi lần vuốt các con số giống nhau được gộp lại thành những con sốgấp đôi số ban đầu (ví dụ ô 2 + ô 2 => ô 4, ô 4 + ô4 => ô 8 )
Hình 3.16 Mô tả hoạt động cộng dồnMỗi lần bạn di chuyển màn hình là các con số mới sẽ phát sinh thêm 1cách ngẫu nhiên tạo thành tổng thể làm rối mắt người chơi
Hình 3.17 Hiện số ngẫu nhiên trong mảng
Các bạn phải suy nghĩ và thử sao cho kết hợp được nhiều hình vuôngnhất và tối thiểu hóa số ô trống trong game Cứ như vậy cộng dồn các ô lại đểđược ô 2048 thì bạn sẽ dành chiến thắng Nếu trước khi bạn đạt được ô 2048
mà các ô đầy không còn ô trống để di chuyển hoặc sinh thên ô ngẫu nhiên nữathì trò chơi kết thúc
Game có bổ sung các chức năng cho người chơi như:
Trang 34• Hiển thị số lớn nhất sau mỗi lần di chuyển giúp người chơi
có thể biết ô số lớn nhất hiện tại là bao nhiêu
Hình 3.18 Mô tả giá trị lớn nhất trong mảng
• Ô điểm sẽ hiển thị tổng giá trị các ô sau mỗi lần bạn di chuyển.Mỗi lần bạn di chuyển thì điểm số cũng sẽ được thay đổi theo
Hình 3.19 Mô tả chức năng tính điểm
• Đổi vị trí 2 ô cho nhau
Trang 35Hình 3.20 Mô tả chức năng đổi vị trí 2 ô
Để sử dụng chức năng này thì điểm của bạn phải lớn hơn hoặc bằng
300 điểm Sau khi chọn chức năng xong hệ thống sẽ tự động trừ đi 300 điểmcủa bạn
Chức năng quay lại sẽ giúp bạn quay lại bước đi trước đó nếu như bạncảm thấy nước đi này không tốt Bạn sẽ bị trừ 200 điểm sau khi thực hiện
Hình 3.21 Mô tả chức năng quay lại
Chuyển tất cả những ô có giá trị bằng 2 thành 4 Để thực hiện chứcnăng này bạn sẽ bị trừ 100 điểm