Tải bản đầy đủ (.doc) (31 trang)

LẬP TRÌNH GAME SUDOKU TRÊN ANDROID

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.15 MB, 31 trang )

BÁO CÁO MÔN PROJECT 2
Đề tài : LẬP TRÌNH GAME SUDOKU TRÊN ANDROID
Sinh viên thực hiện: Nguyễn Vũ Hải SHSV : 20090966
GV hướng dẫn : TS. Nguyễn Thị Oanh
ThS. Phạm Thị Phương Giang
- 1 -
MỤC LỤC
MỤC LỤC 2
PHẦN NỘI DUNG 4
CHƯƠNG 1 TỔNG QUAN GIỚI THIỆU VÀ TÌM HIỂU ĐỀ TÀI 4
1.1. MÔ TẢ ĐỀ TÀI 4
1.2. MỤC TIÊU CẦN ĐẠT ĐƯỢC 5
1.3 HƯỚNG GIẢI QUYẾT 5
1.5 CÔNG CỤ PHÁT TRIỂN 5
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 6
2.1 SƠ LƯỢC QUÁ TRÌNH PHÁT TRIỂN CỦA ANDROID 6
2.1.1 Android là gì? 6
2.1.2 Lịch sử ra đời 6
2.1.3 Tính năng mở của hệ điều hành Android 6
2.1.4 Tất cả các ứng dụng có thể được tạo ra cho Android? 6
2.1.5 Cộng đồng phát triển Android: 6
2.2 Máy ảo Dalvik 6
2.3 Kiến trúc của Android 7
2.3.1Tầng ứng dụng 7
2.3.2Application framework 7
2.3.3Library 8
2.3.4Android Runtime 8
2.3.5Linux kernel 8
2.4Android Emulator 8
2.5CÁC THÀNH PHẦN TRONG MỘT ANDROID PROJECT 9
2.5.1AndroidManifest.xml 9


2.5.2File R.java 10
2.6CÁC THÀNH PHẦN CHÍNH VÀ CHU KỲ CỦA MỘT ỨNG DỤNG ANDROID 11
2.6.1Các thành phần chính trong một ứng dụng của Android 11
2.6.2Chu kỳ sống của ứng dụng Android 14
2.7THÀNH PHẦN GIAO DIỆN ANDROID & CÁC CONTROL 16
2.7.1View 16
2.7.2ViewGroup 17
2.7.3Button 18
2.7.4ListView 18
2.7.5 EditText 19
2.7.6TextView 19
2.7.7CheckBox 20
2.7.8 MenuOption 20
2.7.9ContextMenu 21
CHƯƠNG 3 : PHÂN TÍCH VÀ THIẾT KẾ ỨNG DỤNG GAME SUDOKU 22
3.1ĐỒ HỌA 2D ỨNG DỤNG 22
3.1.1Màu sắc 22
3.1.2Paint 22
3.1.3Canvas 23
3.1.4Path 23
3.1.5Drawable 23
3.2. Phân tích thiết kế UML 24
3.2.1 Biều đồ usecase 24
- 2 -
3.2.2 Biều đồ lớp 25
CHƯƠNG 4 DEMO ỨNG DỤNG 26
4.1MÀN HÌNH GIAO DIỆN CHÍNH 26
4.2MÀN HÌNH ĐIỀN SỐ 28
PHẦN KẾT LUẬN - ĐÁNH GIÁ 30
CHƯƠNG 5 KẾT LUẬN - ĐÁNH GIÁ 30

5.1KẾT QUẢ ĐẠT ĐƯỢC 30
5.2HẠN CHẾ 30
5.3HƯỚNG PHÁT TRIỂN 30
TÀI LIỆU THAM KHẢO 31
- 3 -
PHẦN NỘI DUNG
CHƯƠNG 1 TỔNG QUAN GIỚI THIỆU VÀ TÌM HIỂU ĐỀ TÀI
1.1. MÔ TẢ ĐỀ TÀI
Ngày nay, với sự phát triển của công nghệ, đặc biệt là lĩnh lực công nghệ thông tin đã đem lại
nhiều thành tựu phục vụ nhu cầu của con người như văn hóa, giáo dục, an ninh quốc phòng….Đặc
biệt trong lĩnh vực di động nó đã góp phần mang lại nhiều lợi ích cho con người, như dễ dàng và
thuận tiện liên lạc với nhau dù ở rất xa nhau làm giảm chỉ phi đi lại Ngày nay điện thoại đã rất
phổ biến với mỗi con người. Điện thoại bây giờ không chỉ đơn thuần là để nghe và gọi mà nó chứa
rất nhiều ứng dụng và tiện ích của một chiếc điện thoại thông mình nhằm phục vụ nhu cầu của con
người. Các nhà phát triển đã tạo ra chiếc điện thoại thông minh và cài đặt hệ điều hành cho chúng
để các thể phát huy được hết tất cả các chức năng. Cùng với sự phát triển của những chiếc điện
thoại thông mình thì bên cạnh đó hệ điều hành Android ra đời và đã tạo ra sự phát triển mạnh mẽ
cho sự phát triển của công nghệ di động. Với sự phát triển nhanh chóng đó thì những ứng dụng
giải trí cũng đang phát triển mạnh mẽ nhằm phục vụ nhu cầu giải trí của con người. Lập trình ứng
dụng, lập trình game đang là xu thế thực tế là bước đột phá và cũng là tiềm năng trong sự phát
triển của công nghệ di động.
Và từ đó các game trên điện thoại di động xuất hiện ngày càng nhiều, trên các hệ điều hành
khác nhau như Android, iOS, RIM Blackberry OS, Symbian…. Và Android là hệ điều hành do
Google mua về và cho ra đời vào năm 2007, đây là hệ điều hành tương đối mới và đang rất được
ưa chuộng trên thị trường từ khi nó ra đời, vì thế em quyết định chọn đề tài “Lập trình game
Sudoku trên Android”.
Game Sudoku là một game ra đời từ rất lâu và là game trí tuệ hấp dẫn người chơi mà luật chơi
lại đơn giản. Đây là game có một mạng lưới các ô bao gồm 81 ô, được xếp thành 9 hàng ngang và
dọc. Người chơi phải lắp đầy các ô trống sao cho số của các ô trong hàng và cột là các số từ 1 đến
9 không được trùng nhau. Khi trò chơi bắt đầu chỉ ít các con số đã được điền vào và người chơi

không được thay đổi và phải điền đầy đủ các con số còn lại. Trước kia game Sudoku thường chơi
trên giấy với bút chì, nhưng hiện nay đã có rất nhiều phần mềm chơi game trên máy tính và điện
thoại.
Khi so sánh game Sudoku với các loại game khác ta thấy, game này đã cũ nhưng vẫn rất được
ưa chuộng bởi tính trí tuệ cao của nó. Không yêu cầu đồ họa cao, nhưng người chơi vẫn thích thú,
mỗi bàn chơi là một thách thức tư duy logic. Kích thích tính hiếu thắng của người chơi, tính tò mò
của các em nhỏ muốn chinh phục các con số.
Hi vọng sau khi em làm xong đề tài này em sẽ có được một số ít kiến thức về hệ điều hành
Android và cách lập trình ứng dụng cho hệ điều hành đang rất được ưa chuộng trên thị trường, để
giúp ích em sau này khi ra trường và đi làm.
Mô tả sơ lược về hệ thống:
• Ứng dụng game Sudoku giao diện gồm 4 button là Bắt Đầu, Tiếp Tục, Hướng Dẫn,
Thoát.
• Giao diện bàn game gồm có 9x9 ô số là 9 hàng và 9 cột, và được chia thành 3x3 vùng,
mỗi vùng gồm các số từ 1 đến 9.
• Khi người chơi chưa biết luật chơi thì người chơi nhấp vào button Hướng Dẫn khi đó sẽ
hiện ra một dialog hướng dẫn cụ thể về luật và cách chơi game.
- 4 -
• Ứng dụng game có 3 mức để cho người dùng chơi gồm Dễ, Bình Thường và Khó với
các mức chơi sẽ có các ô số khác nhau phù hợp với từng mức.
• Khi người chơi nhập số vào một ô số bất kỳ nếu số ở trong vùng đã có hoặc trong hàng
hoặc cột đã có thì màn hình sẽ rung qua lại thông báo cho người chơi biết là số đó không thể nhập
vào nữa.
• Khi người chơi đã nhập một số vào ô, nếu muốn xóa thì người dùng nhấn tổ hợp phím
Ctrl+Space thì sẽ xóa mất số đã nhập vào.
1.2. MỤC TIÊU CẦN ĐẠT ĐƯỢC
Ứng dụng game về cơ bản phải đạt được các yêu cầu như sau:
 Giao diện hài hòa, thân thiện, dễ sử dụng.
 Phải có menu hướng dẫn người chơi về luật chơi cũng như cách chơi game.
 Game phải có được 3 mức chơi cho người chơi lựa chọn.

 Ở mỗi mức độ chơi thì độ khó phải tương ứng với mức độ chơi đó.
 Khi người chơi nhập một số vào ô bất kỳ, kiểm tra xem số đó có đúng không, nếu
không thì thông báo lại cho người chơi biết
1.3 HƯỚNG GIẢI QUYẾT
 Tìm hiểu về ngôn ngữ XML, Java, .
 Cách cài đặt Android SDK, cách plugin Android SDK cho eclipse.
 Cách tạo máy ảo Android Virtual Device.
 Cài đặt chương trình :
• Với yêu cầu của đề tài, ta cần thực hiện các vấn đề sau:
- Thiết kế giao diện và các chức năng cần thiết của chương trình.
- Đề tài thực hiện ở phạm vi nhỏ nên không thể hiện hết chức năng của chương trình, nếu
như hoàn chỉnh tất cả các yêu cầu của chương trình thì bao gồm rất nhiều công viêc.
• Giao diện chính của chương trình gồm :
- Button Bắt đầu, Button Tiếp tục, Button Hướng dẫn, Button Thoát, Hình nền của chương
trình.
• Giao diện lúc chơi game :
- Bàn game gồm 9x9 ô số.
- Mỗi hàng, cột và một vùng gồm 9 con số.
 Viết báo cáo tổng hợp kết quả thực hiện đề tài.
1.5 CÔNG CỤ PHÁT TRIỂN
• Android SDK (installer_r16-windown.exe) là tập hợp các công cụ để phát triển các ứng
dụng trên nền tảng hệ điều hành Android.
• Công cụ phát triển: Eclipse IDE for Java Developers dùng để viết code cho game.
- 5 -
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
2.1 SƠ LƯỢC QUÁ TRÌNH PHÁT TRIỂN CỦA ANDROID
2.1.1 Android là gì?
• Là một hệ thống điều hành, middleware và các ứng dụng di động chủ chốt.
• Android là hệ điều hành trên điện thoại di động (và hiện nay là cả trên một số đầu phát HD,
HD Player, TV) phát triển bởi Google và dựa trên nền tảng Linux.

2.1.2 Lịch sử ra đời
Trước đây, Android được phát triển bởi công ty liên hợp Android ( sau đó được Google mua
lại vào năm 2005).
Sự ra mắt của Android vào ngày 5 tháng 11 năm 2007 gắn với sự thành lập của liên minh thiết
bị cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần mềm và viễn thông nhằm mục đính
tạo nên một chuẩn mở cho điện thoại di động trong tương lai.
2.1.3 Tính năng mở của hệ điều hành Android
Android được xây dựng để cho phép các nhà phát triển để tạo ra các ứng dụng di động hấp dẫn
tận dụng tất cả một chiếc điện thoại đã cung cấp. Nó được xây dựng để được thực sự mở. Ví dụ,
một ứng dụng có thể kêu gọi bất kỳ chức năng lõi của điện thoại như thực hiện cuộc gọi, gửi tin
nhắn văn bản, hoặc bằng cách sử dụng máy ảnh, cho phép các nhà phát triển để tạo ra phong phú
hơn và nhiều hơn nữa những kinh nghiệm cố kết cho người dùng. Android được xây dựng trên mở
Linux Kernel. Hơn nữa, nó sử dụng một máy ảo tuỳ chỉnh được thiết kế để tối ưu hóa bộ nhớ và tài
nguyên phần cứng trong một môi trường di động.
2.1.4 Tất cả các ứng dụng có thể được tạo ra cho Android?
Android không phân biệt giữa các ứng dụng lõi của điện thoại và các ứng dụng của bên thứ ba.
Tất cả chúng có thể được xây dựng để truy cập bằng khả năng của một người cung cấp cho người
sử dụng điện thoại với một dải rộng các ứng dụng và dịch vụ. Với các thiết bị xây dựng trên hệ
điều hành Android, người dùng có thể hoàn toàn thích ứng với điện thoại đến lợi ích của họ.
2.1.5 Cộng đồng phát triển Android:
Android có một cộng đồng phát triển ứng dụng rất lớn, hiện có khoảng hơn 70.000 ứng dụng
có sẵn cho Android và đang liên tục được cập nhật. Ứng dụng được phát triển bằng ngôn ngữ Java
kết hợp với thư viện Java có sẵn của Google. Các nhà phát triển ứng dụng có thể sử dụng máy tính
chạy hệ điều hành Windows hoặc MacOS hoặc Linux kết hợp với Android SDK để phát triển ứng
dụng cho Android. Hệ điều hành Android bao gồm 12.000.000 dòng mã trong đó có 3.000.000
dòng XML, 2.800.000 dòng C, 2.100.000 dòng Java, và 1.750.000 dòng C + +.
2.2 Máy ảo Dalvik
Dalvik là máy ảo giúp các ứng dụng java chạy được trên các thiết bị động Android. Nó chạy
các ứng dụng đã được chuyển đổi thành một file thực thi Dalvik (dex). Định dạng phù hợp cho các
hệ thống mà thường bị hạn chế về bộ nhớ và tốc độ xử lý.

Dalvik trông giống như máy ảo Java (Java Virtual Machine) nhưng thực tế thì hoàn toàn khác
dưới gốc nhìn của nhà phát triển. Khi nhà phát triển viết một ứng dụng dành cho Android, anh ta
thực hiện các đoạn mã trong môi trường Java. Sau đó, nó sẽ được biên dịch sang các bytecode của
Java, tuy nhiên để thực thi được ứng dụng này trên Android thì nhà phát triển phải thực thi một
- 6 -
công cụ có tên là dx. Đây là công cụ dùng để chuyển đổi bytecode sang một dạng gọi là dex
bytecode. "Dex" là từ viết tắt của "Dalvik executable" đóng vai trò như cơ chế ảo thực thi các ứng
dụng Android.
2.3 Kiến trúc của Android
Mô hình sau thể hiện một cách tổng quát các thành phần của hệ điều hành Android. Mỗi một
phần sẽ được đặc tả một cách chi tiết dưới đây.
Hình 2.1: Cấu trúc stack hệ thống Android.
2.3.1 Tầng ứng dụng
Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản như: contacts, browser, camera,
Phone,… Tất cả các ứng dụng chạy trên hệ điều hành Android đều được viết bằng Java.
2.3.2 Application framework
Bằng cách cung cấp một nền tảng phát triển mở, Android cung cấp cho các nhà phát triển khả
năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo. Nhà phát triển được tự do tận dụng
các thiết bị phần cứng, thông tin địa điểm truy cập, các dịch vụ chạy nền, thiết lập hệ thống báo
động, thêm các thông báo để các thanh trạng thái, và nhiều, nhiều hơn nữa.
Nhà phát triển có thể truy cập vào các API cùng một khuôn khổ được sử dụng bởi các ứng
dụng lõi. Các kiến trúc ứng dụng được thiết kế để đơn giản hóa việc sử dụng lại các thành phần;
bất kỳ ứng dụng có thể xuất bản khả năng của mình và ứng dụng nào khác sau đó có thể sử dụng
những khả năng (có thể hạn chế bảo mật được thực thi bởi khuôn khổ). Cơ chế này cho phép các
thành phần tương tự sẽ được thay thế bởi người sử dụng.
Cơ bản tất cả các ứng dụng là một bộ các dịch vụ và các hệ thống, bao gồm:
- 7 -
• Một tập hợp rất nhiều các View có khả năng kế thừa lẫn nhau dùng để thiết kế phần giao
diện ứng dụng như: gridview, tableview, linearlayout,…
• Một “Content Provider” cho phép các ứng dụng có thể truy xuất dữ liệu từ các ứng dụng

khác (chẳng hạn như Contacts) hoặc là chia sẻ dữ liệu giữa các ứng dụng đó.
• Một “Resource Manager” cung cấp truy xuất tới các tài nguyên không phải là mã nguồn,
chẳng hạn như: localized strings, graphics, and layout files.
• Một “Notifycation Manager” cho phép tất cả các ứng dụng hiển thị các custom alerts
trong status bar.
• Activity Manager được dùng để quản lý chu trình sống của ứng dụng và điều hướng các
activity.
2.3.3 Library
Android bao gồm một tập hợp các thư viên C/C++ được sử dụng bởi nhiều thành phần khác
nhau trong hệ thống Android. Điều này được thể hiện thông qua nền tảng ứng dụng Android. Một
số các thư viện cơ bản được liệt kê dưới đây:
• System C library: một dẫn xuất BSD có nguồn gốc từ hệ thống thư viện chuẩn của C
(LIBC), được gắn vào các thiết bị Linux
• Media Libraries - Căn cứ vào OpenCORE trong các gói Video, hỗ trợ các thư viện phát
lại, ghi âm và đọc các định dạng video phổ biến, cũng như các tập tin hình ảnh tĩnh, bao gồm
MPEG4, H.264, MP3, AAC, AMR, JPG, và PNG
• Surface Manager – Quản lý việc truy xuất vào hiển thị hệ thống
• LibWebCore – Trình duyệt web hiện đại có đầy đủ cả trình duyệt Android và 1 trình
xem web hệ nhúng
• SGL – công cụ đồ họa 2D
• 3D libraries - thực hiện dựa trên các API OpenGL ES 1.0, các thư viện sử dụng tăng tốc
phần cứng 3D (nếu có) cùng với bộ quét tối ưu hóa cao cho phần mềm 3D. FreeType - bitmap và
vẽ phông chữ bằng vector
• SQLite – Cơ sở dữ liệu nhẹ và đầy đủ có sẵn cho tất cả các ứng dụng
2.3.4 Android Runtime
Android bao gồm một tập hợp các thư viện cơ bản mà cung cấp hầu hết các chức năng có sẵn
trong các thư viện lõi của ngôn ngữ lập trình Java. Tất cả các ứng dụng Android đều chạy trong
tiến trình riêng. Máy ảo Dalvik đã được viết để cho một thiết bị có thể chạy nhiều máy ảo hiệu
quả. Các VM Dalvik thực thi các tập tin Dalvik (dex). Định dạng được tối ưu hóa cho bộ nhớ tối
thiểu. VM là dựa trên register-based, và chạy các lớp đã được biên dịch bởi một trình biên dịch

Java để chuyển đổi thành các định dạng dex. Các VM Dalvik dựa vào nhân Linux cho các chức
năng cơ bản như luồng và quản lý bộ nhớ thấp.
2.3.5 Linux kernel
Android dựa trên Linux phiên bản 2.6 cho hệ thống dịch vụ cốt lõi như security, memory
management, process management, network stack, and driver model. Kernel Linux hoạt động như
một lớp trừu tượng hóa giữa phần cứng và phần còn lại của phần mềm stack.
2.4 Android Emulator
Android SDK và Plugin Eclipse được gọi là một Android Deverloper Tool (ADT). Người lập
trình Android sẽ cần phải sử dụng công cụ IDE (Integrated Development Enveronment) này để
phát triển, debugging và testing cho ứng dụng.
- 8 -
Android Emulator được trang bị đầy đủ hầu hết các tính năng của một thiết bị thật. Tuy nhiên,
một số đã bị giới hạn như là kết nối qua cổng USB, camera và video, nghe phone, nguồn điện giả
lập và bluetooth.
Android Emulator thực hiện các công việc thông qua một bộ xử lý mã nguồn mở, công nghệ
này được gọi là QEMU ( được phát triển bởi Fabrice Bellard.

Hình 2.2: Android Emulator.
2.5 CÁC THÀNH PHẦN TRONG MỘT ANDROID PROJECT
2.5.1 AndroidManifest.xml
Trong bất kì một project Android nào khi tạo ra đều có một file AndroidManifest.xml, file này
được dùng để định nghĩa các screen sử dụng, các permission cũng như các theme cho ứng dụng.
Đồng thời nó cũng chứa thông tin về phiên bản SDK cũng như main activity sẽ chạy đầu tiên.
File này được tự động sinh ra khi tạo một Android project. Trong file manifest bao giờ cũng
có 3 thành phần chính đó là: application, permission và version.
Dưới đây là nội dung của một file AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=" /> package="org.me.mysudokugame"
- 9 -
android:versionCode="1"

android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".About"
android:label="@string/about_title"
android:theme="@android:style/Theme.Dialog" >
</activity>
<activity
android:name="Game"
android:label="@string/game_title"
></activity>
</application>
</manifest>
• Application
Bên trong thẻ <application> có các thuộc tính định nghĩa cho Android như sau:
android:icon="@drawable/ic_launcher": Chỉ đường dẫn đến file icon khi cài đặt ứng dụng.
android:label="@string/app_name": Thuộc tính này đặt tên cho ứng dụng. Tên này sẽ được
hiển thị sau khi chạy ứng dụng
Ngoài ra còn có nhiều thuộc tính khác…

• SDK version (API)
<uses-sdk android:minSdkVersion="8" />: Thẻ này xác định phiên bản SDK đang sử dụng.
Ở đây SDK version là 8.
2.5.2 File R.java
File R.java là một file tự động sinh ra ngay khi tạo ứng dụng, file này được sử dụng để quản
lý các thuộc tính được khai báo trong file XML của ứng dụng và các tài nguyên hình ảnh.
Mã nguồn của file R.java được tự động sinh khi có bất kì một sự kiện nào xảy xa làm thay đổi
các thuộc tính trong ứng dụng. Chẳng hạn như, bạn kéo và thả một file hình ảnh từ bên ngoài vào
project thì ngay lập tức thuộc tính đường dẫn đến file đó cũng sẽ được hình thành trong file R.java
hoặc xoá một file hình ảnh thì đường dẫn tương ứng đến hình ảnh đó cũng tự động bị xoá.
Có thể nói file R.java hoàn toàn không cần phải đụng chạm gì đến trong cả quá trình xây dựng
ứng dụng.
- 10 -
2.6 CÁC THÀNH PHẦN CHÍNH VÀ CHU KỲ CỦA MỘT ỨNG DỤNG
ANDROID
2.6.1 Các thành phần chính trong một ứng dụng của Android
2.6.1.1 Activity :
Activity là một trong bốn thành phần chính và đóng vai trò quan trọng nhất của một ứng dụng
Android. Activity là nền tảng của một ứng dụng. Hệ điều hành Android quản lý Activity theo dạng
stack : khi một Activity mới được khởi tạo, nó sẽ được xếp lên đầu của stack và trở thành running
activity, các activity trước đó sẽ bị tạm dừng và chỉ hoạt động trở lại khi activity mới được giải
phóng. Khi khởi động một ứng dụng Android nào đó thì bao giờ cũng có một main Activity được
gọi, hiển thị màn hình giao diện của ứng dụng cho phép người dùng tương tác.
Một ứng dụng thường bao gồm nhiều activity được ràng buộc với nhau. Thông thường, một
trong những activity trong một ứng dụng được quy định như các activity chính, được trình bày cho
người dùng khi chạy ứng dụng cho lần đầu tiên. Mỗi activity sau đó có thể bắt đầu activity khác để
thực hiện hành động khác nhau. Mỗi lần một activity mới bắt đầu, các activity trước đó được dừng
lại. khi một activity mới bắt đầu, nó được đẩy lên phía sau ngăn xếp. Sự sắp xếp ngăn xếp tuân thủ
các cơ chế cơ bản vào sau ra trước đây là cơ chế hàng đợi, khi người dùng được thực thi với các
activity hiện tại và nhấn phím BACK thì nó sẽ khởi động và phá hủy các activity trước đó.

Mỗi Activity chủ yếu có 3 trạng thái chu kỳ chính như sau :
• Activity hoặc running : Khi activity được chạy trên màn hình. Activity này tập trung vào
những thao tác của người dùng trên ứng dụng.
• Paused : Activity được tạm dựng khi mất quyền hoạt động nhưng người dùng vẫn trông
thấy, có nghĩa là một activity mới ở trên nó nhưng không bao giờ phủ hết màn hình. Một activity
tạm dừng là còn sống nhưng có thể bị kết thúc bởi hệ thống trong trường hợp thiếu vùng nhớ.
• Stopped : Nếu stopped hoàn toàn chứa bởi Activity khác thì vẫn còn trạng thái và thông
tin thành viên đó. Người dùng không nhìn thấy và thường bị loại bỏ trong trường hợp hệ thống cần
vùng nhớ cho tác vụ khác.
a. Các phương thức chính xử lý trong Activity
 Create Activity() : Phương thức này sẽ được triển khai khi hệ thống chạy và bắt đầu
khởi tạo Activity khởi động trong ứng dụng và đây là nơi mà gọi ra setContentView() để xác định
việc layout cho giao diện người dùng của Activity.
 Start Activity() : Khi làm việc trong ứng dụng của mỗi người dùng thì người dùng sẽ
cần khởi động các Activity bằng cách tạo ra một Intent rõ ràng và xác định Activity mà người
dùng muốn bắt đầu.
 Đóng một Activity : Người dùng có thể đóng một Activity bằng cách gọi phương thúc
finish(). Tất nhiên, cũng có thể đóng một Activity riêng biệt trước đó đã bắt đầu bằng cách gọi
finishActivity().
- 11 -
Hình 2.3: Android Emulator.
b. Activity Stack : Bên trong hệ thống các Activity được quản lý như một Activity stack. Khi
một Activity mới được start, nó được đặt ở đỉnh của stack và trở thành Activity đang chạy Activity
trước sẽ ở bên dưới Activity mới và sẽ không thấy trong suốt quá trình Activity mới tồn tại. Nếu
người dùng nhấn nút Back thì Activity kế tiếp của stack sẽ di chuyển lên và trở thành active.
Hình 2.4: Activity Stack.
- 12 -
Tính liên lạc giữa 2 Activity. Khi di chuyển sang một Activity khác thì nó có thể gửi kèm dữ
liệu trong Intent đó như sau :
intent.putExtra(Game.KEY_DIFFICULTY,i);

Bên phía Activity được khởi động hay được di chuyển đến, có thể lấy dữ liệu được gửi như
sau :
Int diff = getIntent().getIntExtra(KEY_DIFFICULTY,DIFFICULTY_EASY);
2.6.1.2 Intent
a. Khái niệm Intent :
- Là một cấu trúc dữ liệu mô tả cách thức, đối tượng thực hiện của một Activity.
- Là cầu nối giữa các Activity : Ứng dụng Android thường bao gồm nhiều Activity, mỗi
Activity hoạt động độc lập với nhau và thực hiện những công việc khác nhau. Intent chính là
người đưa thư, giúp các Activity có thể triệu gọi cũng như truyền các dữ liệu cần thiết tới
một Activity khác.
Hình 2.5: Truyền dữ liệu giữa 2 Activity.
b. Dữ liệu Intent :
- Intent về cơ bản là một cấu trúc dữ liệu, được mô tả trong lớp android.content.Intent
- Các thuộc tính của một đối tượng Intent :
Hình 2.6: Các thuộc tính của Intent.
Đây là những hằng String đã được định nghĩa sẵn trong lớp Intent. Đi kèm với nó là các
Activity hay Application được xây dựng sẵn sẽ được triệu gọi mỗi khi Intent tương ứng được gửi
(tất nhiên khi được cung cấp đúng data).
- 13 -
Ngoài ra còn các các thành phần quan trọng khác như :
Service (Android.app.Service): cung cấp các dịch vụ liên quan đến client/service. Một
Service sẽ chạy ngầm bên dưới, sau đó các client (Activity) sẽ kết nối và truy xuất các hàm trên
dịch thông qua Interface class.
Broadcast receiver (Android.content.BroadcastReceiver): đây là một ứng dụng chạy ngầm
dùng để đọc và cập nhật thông tin trên UI, ví dụ như cập nhật sự thay đỗi giờ, pin
Content Provider: cung cấp chức năng truy vấn dữ liệu giữa các ứng dụng của Android.
2.6.2 Chu kỳ sống của ứng dụng Android
Một tiến trình Linux gói gọn một ứng dụng Android đã được tạo ra cho ứng dụng khi codes
cần được xây dựng, khởi chạy và sẽ còn chạy cho đến khi:
 Nó không phụ thuộc.

 Hệ thống cần lấy lại bộ nhớ mà nó chiếm giữ cho các ứng dụng khác.
Một sự khác thường và đặc tính cơ bản của Android là thời gian sống của tiến trình ứng dụng
không được điều khiển trực tiếp bởi chính nó. Thay vào đó, nó được xác định bởi hệ thống qua
một kết hợp của:
 Những phần của ứng dụng mà hệ thống biết đang chạy.
 Những phần đó quan trọng như thế nào đối với người dùng.
 Bao nhiêu vùng nhớ chiếm lĩnh trong hệ thống.
2.6.2.1 Chu kỳ sống thành phần
Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từ lúc bắt đầu khởi tạo
và đến thời điểm kết thúc, đôi lúc chúng có thể là active (visible hoặc invisible) hoặc inactive.
2.6.2.2 Các trạng thái của chu kỳ sống
Một Activity chủ yếu có 4 chu kỳ chính sau:
 Active hoặc running: Khi Active là được chạy trên màn hình. Activity này tập trung
vào những thao tác của người dùng trên ứng dụng.
 Paused: Activity là được tạm dừng (paused) khi mất focus nhưng người dùng vẫn trông
thấy. Có nghĩa là một Activity mới ở trên nó nhưng không bao phủ đầy màn hình. Một Activity
tạm dừng là còn sống nhưng có thể bị kết thúc bởi hệ thống trong trường hợp thiếu vùng nhớ.
Hình 2.7: Chu kỳ sống của Activity.
- 14 -
 Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác. Nó vẫn còn trạng thái và thông
tin thành viên trong nó. Người dùng không thấy nó và thường bị loại bỏ trong trường hợp hệ thống
cần vùng nhớ cho tác vụ khác.
 Killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên tắc ưu
tiên. Các Activity ở trạng thái stop hoặc paused cũng có thể bị giải phóng và khi nó được hiển thị
lại thì các Activity này phải khởi động lại hoàn toàn và phục hồi lại trạng thái trước đó.
2.6.2.3 Chu kỳ sống của ứng dụng
Trong một ứng dụng Android có chứa nhiều thành phần và mỗi thành phần đều có một chu
trình sống riêng. Và ứng dụng chỉ được gọi là kết thúc khi tất cả các thành phần trong ứng dụng
kết thúc. Activity là một thành phần cho phép người dùng giao tiếp với ứng dụng. Tuy nhiên, khi
tất cả các Activity kết thúc và người dùng không còn giao tiếp được với ứng dụng nữa nhưng

không có nghĩa là ứng dụng đã kết thúc. Bởi vì ngoài Activity là thành phần có khả năng tương tác
người dùng thì còn có các thành phần không có khả năng tương tác với người dùng như là Service,
Broadcast receiver. Có nghĩa là những thành phần không tương tác người dùng có thể chạy
background dưới sự giám sát của hệ điều hành cho đến khi người dùng tự tắt chúng.
2.6.2.4 Các sự kiện trong chu kỳ sống của ứng dụng
Nếu một Activity được tạm dừng hoặc dừng hẳn, hệ thống có thể bỏ thông tin khác của nó từ
vùng nhớ bởi việc gọi hàm finish() của nó, hoặc đơn giản giết tiến trình của nó. Khi nó được hiển
thị lần nữa với người dùng, nó phải được hoàn toàn restart và phục hồi lại trạng thái trước. Khi một
Activity chuyển qua chuyển lại giữa các trạng thái, nó phải báo việc chuyển của nó bằng việc gọi
hàm transition.
Hình 2.8: Các phương thức trong chu kỳ.
Tất cả các phương thức là những móc nối mà chúng ta có thể override để làm tương thich
công việc trong ứng dụng khi thay đổi trạng thái. Tất cả các Activity bắt buộc phải có onCreate()
để khởi tạo ứng dụng. Nhiều Activity sẽ cũng hiện thực onPause() để xác nhận việc thay đổi dữ
liệu và mặt khác chuẩn bị dừng hoạt động với người dùng.
2.6.2.5 Thời gian sống của ứng dụng
Bảy phương thức chuyển tiếp định nghĩa trong chu kỳ sống của một Activity. Thời gian sống
của một Activity diễn ra giữa lần đầu tiên gọi onCreate() đến trạng thái cuối cùng gọi onDestroy().
Một Activity khởi tạo toàn bộ trạng thái toàn cục trong onCreate(), và giải phóng các tài nguyên
đang tồn tại trong onDestroy().
2.6.2.6 Thời gian hiển thị của Activity
Visible lifetime của một activity diễn ra giữa lần gọi một onStart() cho đến khi gọi onStop().
Trong suốt khoảng thời gian này người dùng có thể thấy activity trên màn hình, có nghĩa là nó
không bị foreground hoặc đang tương tác với người dùng. Giữa 2 phương thức người dùng có thể
duy trì tài nguyên để hiển thị activity đến người dùng.
- 15 -
2.6.2.7 Các phương thức của chu kỳ sống
• Phương thức: onCreate()
- Được gọi khi activity lần đầu tiên được tạo
- Ở đây bạn làm tất cả các cài đặt tĩnh tạo các view, kết nối dữ liệu đến list và .v.v

- Phương thức này gửi qua một đối tượngBundle chứa đựng từ trạng thái trước của
Activity
- Luôn theo sau bởi onStart()
• Phương thức: onRestart()
- Được gọi sau khi activity đã được dừng, chỉ một khoảng đang khởi động lần nữa (stared
again)
- Luôn theo sau bởi onStart()
• Phương thức: onStart()
- Được gọi trước khi một activity visible với người dùng.
- Theo sau bởi onResume() nếu activity đến trạng thái foreground hoặc onStop() nế nó trở
nên ẩn.
• Phương thức: onResume()
- Được gọi trước khi activity bắt đầu tương tác với người dùng
- Tại thời điểm này activity ở trên dỉnh của stack activity.
- Luôn theo sau bởi onPause()
• Phương thức: onPause()
- Được gọi khi hệ thống đang resuming activity khác.
- Phương thức này là điển hình việc giữ lại không đổi dữ liệu.
- Nó nên được diễn ra một cách nhanh chóng bởi vì activity kế tiếp sẽ không được
resumed ngay cho đến khi nó trở lại.
- Theo sau bởi onResume nếu activity trở về từ ở trước, hoặc bởi onStop nếu nó trở nên
visible với người dùng.
- Trạng thái của activity có thể bị giết bởi hệ thống.
• Phương thức: onStop()
- Được gọi khi activity không thuộc tầm nhìn của người dùng.
- Nó có thể diễn ra bởi vì nó đang bị hủy, hoặc bởi vì activity khác vữa được resumed và
bao phủ nó.
- Được theo sau bởi onRestart() nếu activity đang đở lại để tương tác với người dùng,
hoặc onDestroy() nếu activity đang bỏ.
- Trạng thái của activity có thể bị giết bởi hệ thống.

• Phương thức: onDestroy()
- Được gọi trước khi activity bị hủy.
- Đó là lần gọi cuối cùng mà activity này được nhận.
- Nó được gọi khác bởi vì activity đang hoàn thành, hoặc bởi vì hệ thống tạm thởi bị hủy
diệt để tiết kiệm vùng nhớ.
- Bạn có thể phân biệt giữa 2 kịch bản với phương isFinshing().
- Trạng thái của activity có thể được giết bởi hệ thống.
2.7 THÀNH PHẦN GIAO DIỆN ANDROID & CÁC CONTROL
2.7.1 View
Trong Android giao diện người dùng được xây dựng từ các đối tượng View. Trong Android
Platform, các screen luôn được bố trí theo một kiểu cấu trúc phân cấp như hình trên. Một screen là
một tập hợp các Layout và các widget được bố trí có thứ tự. Để thể hiện một screen thì trong hàm
onCreate của mỗi Activity cần phải được gọi một hàm là setContentView (R.layout.main); hàm
này sẽ load giao diện từ file MAIN.XML lên để phân tích thành mã bytecode.
- 16 -
Hình 2.9:View.
2.7.2 ViewGroup
ViewGroup là sự mở rộng của class View hay nói cách khác ViewGroup chính là các
WidgetLayout được dùng để bố trí các đối tượng khác trong một screen.Có các loại ViewGroup
như sau:
• Linear Layout
LinearLayout được dùng để bố trí các thành phần giao diện theo chiều ngang hoặc chiều dọc
nhưng trên một line duy nhất mà không có xuống dòng.
• Frame layout
FrameLayout được dùng để bố trí các đối tượng theo kiểu giống như là các Layer trong
Photoshop. Những đối tượng nào thuộc Layer bên dưới thì sẽ bị che khuất bởi các đối tượng thuộc
Layer nằm trên. FrameLayer thường được sử dụng khi muốn tạo ra các đối tượng có khung hình
bên ngoài chẳng hạn như contact image button.
• Table layout
Layout này được sử dụng khi cần thiết kế một table chứa dữ liệu hoặc cần bố trí các widget

theo các row và column. Chẳng hạn như, giao diện của một chiếc máy tính đơn giản hoặc một
danh sách dữ liệu.
• AbsoluteLayout
Layout này được sử dụng để bố trí các widget vào một vị trí bất kì trong layout dựa vào 2
thuộc tính toạ độ x, y. Tuy nhiên, kiểu layout này rất ít khi được dùng bởi vì toạ độ của các đối
tượng luôn cố định và sẽ không tự điều chỉnh được tỷ lệ khoảng cách giữa các đối tượng. Khi
chuyển ứng dụng sang một màn hình có kích thước với màn hình thiết kế ban đầu thì vị trí của các
đối tượng sẽ không còn được chính xác như ban đầu.
• Relative Layout
Layout này cho phép bố trí các widget theo một trục đối xứng ngang hoặc dọc. Để đặt được
đúng vị trí thì các widget cần được xác định một mối ràng buộc nào đó với các widget khác. Các
ràng buộc này là các ràng buộc trái, phải, trên, dưới so với một widget hoặc so với layout parent.
Dựa vào những mối ràng buộc đó mà RetaliveLayout cũng không phụ thuộc vào kích thước của
screen thiết bị. Ngoài ra, nó còn có ưu điểm là giúp tiết kiệm layout sử dụng nhằm mục đích giảm
lượng tài nguyên sử dụng khi load đồng thời đẩy nhanh quá trình xử lý.
- 17 -
Các đối tượng trong Layout này phải có id để tạo mối quan hệ giữa các đối tượng.
Android:layout_alignParentRight="true" câu lệnh này giúp đối tượng sau không nằm đè lên đối
tượng trước đó.
Android:layout_marginLeft="…" cho biết đối tượng nằm cách lề phải và trái bao nhiêu. Đối
tượng sau muốn tạo mối quan hệ với đối tượng trước, và muốn cho hai đối tượng nằm ở vị trí nào
thì sử dụng câu lệnh:
<Android:layout_alignTop="@id/…">
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<Button
Android:id="@+id/ok"
Android:layout_width="wrap_content"

Android:layout_height="wrap_content"
Android:layout_alignParentRight="true"
Android:layout_marginLeft="10dip"
Android:text="Test" />
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignTop="@id/ok"
Android:text="Test" />
</RelativeLayout>
2.7.3 Button
Sở dĩ widget button được giới thiệu đầu tiên trong số các widget khác là vì đây là đối tượng
có thể nói là được dùng nhiều nhất trong hầu hết các ứng dụng Android.
Để thiết kế giao diện với một button ta có 2 cách như sau:
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/cmdButton1"
Android:text="Touch me!"
/>
2.7.4 ListView
Được sử dụng để thể hiện một danh sách các thông tin theo từng cell. Mỗi cell thông thường
được load lên từ một file XML đã được cố định trên đó số lượng thông tin và loại thông tin cần
được thể hiện.
Để thể hiện được một list thông tin lên một screen thì cần phải có 3 yếu tố chính:
• Data Source: Data Source có thể là một ArrayList, HashMap hoặc bất kỳ một cấu trúc
dữ liệu kiểu danh sách nào.
• Adapter: Adapter là một class trung gian giúp ánh xạ dữ liệu trong Data Source vào
đúng vị trí hiển thị trong ListView. Chẳng hạn, trong Data Source có một trường name và trong
ListView cũng có một TextView để thể hiện trường name này. Tuy nhiên, ListView sẽ không thể

- 18 -
hiển thị dữ liệu trong Data Source lên được nếu như Adapter không gán dữ liệu vào cho đối tượng
hiển thị.
• ListView: ListView là đối tượng để hiển thị các thông tin trong Data Source ra một cách
trực quan và người dùng có thể thao tác trực tiếp trên đó.
2.7.5 EditText
Trong Android đối tượng EditText được sử dụng như một TextField hoặc một TextBox. Giá
trị Android:singleLine bằng false, edittext sẽ là 1 Texbox, ngược lại nó là 1 Textfield.
<EditText
Android:id="@+id/EditText01"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textStyle="bold"
Android:textSize="20dip"
Android:textColor="#000000"
Android:text="Hello Android!"
Android:singleLine="true"
Android:inputType="textCapWords"
/>
Hình 2.10:EditText.
2.7.6 TextView
TextView có tác dụng là để hiển thị văn bản.
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Hello World! Demo TextView"
Android:textColor="#07a931"
Android:textSize="20px"
Android:gravity="center_horizontal" />
- 19 -

Trong đoạn mã trên, Android:text="" dùng để ghi đoạn text muốn thể hiện,
Android:textColor=""để định dạng màu chữ, Android:textSize=""kích cở chữ,
Android:gravity=""dùng để canh chỉnh cho đoạn text. Nếu muốn tìm hiểu thêm, hãy gõ Android:
sau đó nhấn Crtl+ Space để tìm hiểu thêm về các thuộc tính của nó.
2.7.7 CheckBox
Nhận hai giá trị true hoặc false. Đối tượng CheckBox cho phép chọn nhiều item cùng một lúc.
XML:
<CheckBox
Android:id="@+id/CheckBox01"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="True"
Android:checked="true"/>
Kết quả như sau:
Hình 2.11:CheckBox.
2.7.8 MenuOption
Có 2 cách tạo một MenuOptions:
Tạo bằng code và tập tin XML, dưới đây chúng ta dùng XML
Khai báo bằng code XML:
<menu xmlns:Android=" /><item Android:id="@+id/checkbox" Android:title="Checkbox" />
<item Android:id="@+id/button" Android:title="Button" />
<item Android:id="@+id/edittext" Android:title="Edittext" />
//tiếp tục cho các menu khác
………
</menu>
- 20 -
2.7.9 ContextMenu
ContextMenu được sử dụng để hiển thị các tuỳ chọn khi người dùng nhấn dài vào một Button
trên màn hình. Để tạo một ContextMenu ta cũng có 2 cách giống như tạo MenuOptions ở trên chỉ
khác tên phương thức.

Phương thức: onCreateContextMenu( ContextMenu menu, View v, ContextMenuInfo
menuInfo) sẽ được gọi và truyền vào 3 tham số là:
• ContextMenu: đối tượng để add các context menu item
• View: Đối tượng nơi mà xảy ra sự kiện
• ContextMenuInfo: Cho biết vị trí xảy ra sự kiện trong ListView.

Hình 2.12:ContextMenu.
- 21 -
CHƯƠNG 3 : PHÂN TÍCH VÀ THIẾT KẾ ỨNG DỤNG GAME SUDOKU
3.1 ĐỒ HỌA 2D ỨNG DỤNG
3.1.1 Màu sắc
Android cung cấp một thư viện đồ họa 2D đa dạng chứa trong gói android.graphics của
nó.Tìm hiểu các lớp cơ bản như Color và Canvas sẽ dễ dàng phát triển chương trình của mình một
cách hoàn hảo
Màu sắc trong Android được đại diện bởi bốn thông số: alpha, red, green, blue (ARGB). Mỗi
thành phần có thể có 256 giá trị màu khác nhau, biểu hiện bởi 8 bit, vì vậy màu thường được đóng
gói vào một số nguyên 32 bit. Để hiệu quả hơn, Android đã sử dụng một số nguyên thay vì một cá
thể.
Có nhều cách để đưa màu vào chương trình :
int color = Color.BULE;
Câu lệnh trên đã thiết lập luôn màu BLUE cho thực thể màu muốn sử dụng. Hoặc có thể làm
như sau:
Color = Color.agrb (127,255,0,255);
Nhưng để dễ dàng hơn trong việc thay đổi thì nên xác định các màu trong một nguồn tin file
XML. Ví dụ như:
File colors.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<color name="background">#3500ffff</color> Màu nền của game
<color name="puzzle_background">#ffe6f0ff</color> Màu nền của bàn game

<color name="puzzle_hilite">#ffffffff</color> Màu đường phân cách 3 ô
<color name="puzzle_light">#64c6d4ef</color> Đường chia các ô
<color name="puzzle_dark">#6456648f</color> Độ bóng của đường phân cách
<color name="puzzle_foreground">#ff000000</color> Màu của số
<color name="puzzle_hint_0">#64ff0000</color> Thông báo sau khi nhập ô trước, ô sau nhập
không được
<color name="puzzle_hint_1">#6400ff80</color>
<color name="puzzle_hint_2">#2000ff80</color>
<color name="puzzle_selected">#64ff8000</color> Màu ô được chọn
</resources>
3.1.2 Paint
Một trong các lớp quan trọng của bộ thư viện đồ họa Android là class Paint. Nó giữ style,
color và các thông tin cần thiết khác để vẽ đồ họa dạng bất kỳ bao gồm: bitmap, text và các hình
dạng mang tính chất hình học. Khi muốn vẽ đầu tiên phải xác định màu sắc bằng cách dùng
phương thức:
Paint.setColor();
Ví dụ như: Paint.setColor(Color.LTGRAY);
Câu lệnh trên sử dụng các giá trị được xác định trước cho ánh sáng màu xám.
- 22 -
3.1.3 Canvas
Lớp Canvas đại diện cho một bề mặt để vẽ. Ban đầu một bức tranh muốn vẽ không có bất kỳ
nội dung nào, giống như trong suốt. Nhưng trong lớp Canvas thì có thể vẽ bất kỳ lên nó như hình
tròn, hình chữ nhật……
Trong Android màn hình hiển thị được thực hiển bởi một Activity. Nó nắm giữ View, mà lần
lượt tổ chức một Canvas. Sử dụng phương thức View.onDraw() và onDraw để vẽ. Ví dụ:
public class Game extends Activity {
protected void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
puzzleView = new PuzzleView(this);
setContentView(puzzleView);

}//onCreate
}
public class PuzzleView extends View{
private static final String TAG = "Sudoku";
public PuzzleView(Context context) {
super(context);
// TODO Auto-generated constructor stub
this.game = (Game) context;
setFocusable(true);
setFocusableInTouchMode(true);
}
protected void onDraw(Canvas canvas){
//Vẽ những gì cần vẽ
}
}
3.1.4 Path
Lớp Path nắm giữ một tập các lệnh vẽ vector như đường, hình chữ nhật và đường cong. Ví
dụ như vẽ đường tròn:
circle = new Path();
circle.addCircle(150,150,100, Direction.CW);
Câu lệnh trên là vẽ đường tròn có tọa độ x = 150, y = 150, bán kính 100 điểm ảnh.
3.1.5 Drawable
Trong Android, một lớp Drawable được sử dụng cho một yếu tố hình ảnh giống như một
bitmap hoặc đường viền dành riêng cho hiển thị. Có thể kết hợp Drawable với một số đồ họa khác.
Drawable có thể có nhiều hình thức:
• Bitmap: Một hình ảnh PNG hoặc JPEG.
• NinePatch: Một hình ảnh PNG căng ra, có tên như vậy là do ban đầu nó được chia
thành chín phần hình ảnh. Chúng được sử dụng cho nút nền của nút bitmap thay đổi kích thước.
• Shape: Các câu lênh vẽ Vector, dựa trên Path. Đây là một dạng nhỏ của SVG.
• Layers: Đây là nơi chứa đựng những drawable con mà vẽ trên trang đầu của mỗi thứ tự

nhất định.
• States: Đây là nới chứa đựng cho thấy một trong các con của nó dựa trên các drawable.
- 23 -
• Levels: Đây là nơi chứa đựng cho thấy chỉ có môt con của nó dựa trên drawable.
• Scale: Đây là nơi chứa cho một drawable con mà sửa đổi kích thước của nó dựa trên
mức hiện hành.
Drawable luôn luôn được định nghĩa trong XML.
3.2. Phân tích thiết kế UML
3.2.1 Biều đồ usecase
uc Use Case Mo
Sudoku
Tiếp tục
Player
Bắt đầu
Cài đặt
Thoát
Độ khó
Dễ
Bình thường
Khó
«include»
«extend»
«extend»
«extend»
- Tác nhân duy nhất của hệ thống là người chơi Player
- Hệ thống gồm 4 chức năng cơ bản, tương ứng với 4 usecase : Tiếp tục, Bắt đầu, Cài đặt, Thoát
• Usecase Tiếp tục : Giúp người chơi có thể chơi tiếp phần mà người chơi đã chơi trước đó
• Usecase Bắt đầu : Để bắt đầu vào trò chơi, cùng với 3 lựa chọn độ khó tùy với khả năng
của từng người chơi
• Usecase Cài đặt : Thiết lập gọi ý lúc chơi, và thiết lập phần nhạc nền để tăng tính hấp dẫn

khi chơi game
• Usecase Thoát : Khi người chơi không chơi tiếp, và muốn thoát ra khỏi hệ thống
- 24 -
3.2.2 Biều đồ lớp
- 25 -

×