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

Xây dựng trò chơi đua xe ô tô trên điện thoại di động với J2ME

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 (3.68 MB, 83 trang )

LỜI CẢM ƠN
Sau một thời gian tìm hiểu đề tài “Xây dựng trò chơi đua xe ô tô trên
điện thoại di động với J2ME”. Em đã hoàn thành tiến độ dự kiến. Để đạt được
kết quả này, em đã nỗ lực thực hiện và đồng thời cũng nhận được rất nhiều sự
giúp đỡ, quan tâm, ủng hộ của các thầy cô bạn bè và gia đình.
Em xin chân thành cảm ơn giáo viên hướng dẫn: ThS. Lê Tuấn Anh - Bộ
môn Mạng và Truyền Thông - Khoa công nghệ thông tin - Đại học công nghệ
thông tin và truyền thông - Đại học Thái Nguyên đã tận tình giúp đỡ em hoàn
thành đồ án tốt nghiệp này.
Em xin chân thành cảm ơn các thầy, cô giáo thuộc bộ môn Mạng và
Truyền thông đã trang bị cho em những kiến thức chuyên ngành rất hữu ích để
em hoàn thành đồ án và phục vụ cho công việc của em sau này.
Vì thời gian có hạn nên đề tài của em không thể tránh khỏi những thiếu
sót, em rất mong được sự đóng góp ý kiến từ phía thầy cô và các bạn.
Em xin chân thành cảm ơn!

Thái Nguyên, tháng 6 năm 2012
Sinh Viên
Lưu Anh Tuấn

1


LỜI CAM ĐOAN
Đồ án này đã được hoàn thành sau một thời gian nghiên cứu, tìm hiểu các
nguồn tài liệu, sách báo chuyên ngành và thông tin trên mạng mà theo em là hoàn
toàn tin cậy. Nội dung đồ án được em tổng hợp lại từ các tài liệu tham khảo,
không sao chép toàn bộ các đồ án và các công trình nghiên cứu của các tác giả
khác. Em xin chịu trách nhiệm về nội dung trong đồ án mình.

Thái Nguyên, tháng 6 năm 2012


Sinh Viên
Lưu Anh Tuấn

2


MỤC LỤC
LỜI CẢM ƠN..........................................................................................................1
LỜI CAM ĐOAN....................................................................................................2
MỤC LỤC................................................................................................................3
DANH MỤC BẢNG................................................................................................7
DANH MỤC TỪ VIẾT TẮT..................................................................................8
LỜI NÓI ĐẦU.......................................................................................................10
CHƯƠNG I: CƠ SỞ LÝ THUYẾT.......................................................................11
1.1. Giới thiệu về Java và công nghệ J2ME......................................................11
1.1.1. Giới thiệu về java.................................................................................11
1.1.2. Giới thiệu về J2ME và lập trình cho thiết bị di động..........................11
1.1.3. Những hạn chế của lập trình di động...................................................17
1.2. Lập trình J2ME...........................................................................................17
1.2.1. MIDLet và vòng đời của 1 MIDLet....................................................17
1.2.2. Cách quản lý màn hình của ĐTDĐ :...................................................18
1.2.3. Đồ họa trong J2ME..............................................................................18
1.3. Lập trình game trên J2ME..........................................................................30
1.3.1. J2ME game API...................................................................................31
1.4. Hệ thống quản lý bản ghi RMS (Record Management System)................37
1.4.1. Lưu trữ cố định thông qua Record Store.............................................37
1.4.2. Các vấn đề liên quan đến RMS...........................................................39
1.5. Bluetooth API – JSR 82..............................................................................40
1.5.1. API java cho Bluetooth........................................................................40
1.5.2. Bluetooth Protocol...............................................................................40

1.5.3. Mô hình kết nối client-server...............................................................42
3


CHƯƠNG II: PHÂN TÍCH, THIẾT KẾ TRÒ CHƠI ĐUA Ô TÔ TRÊN ĐIỆN
THOẠI DI ĐỘNG.................................................................................................45
2.1. Bài toán.......................................................................................................45
2.2. Yêu cầu bài toán..........................................................................................46
2.3. Phân tích và thiết kế ứng dụng....................................................................46
2.3.1. Tác nhân và các Use case – UC...........................................................46
2.3.2. Biểu đồ UC...........................................................................................47
2.3.3. Thiết kế lớp..........................................................................................63
Chương III: XÂY DỰNG TRÒ CHƠI ĐUA XE Ô TÔ.......................................65
TRÊN ĐIỆN THOẠI DI ĐỘNG...........................................................................65
3.1. Môi trường thực hiện ứng dụng..................................................................65
3.2. Giới thiệu về NetBeans...............................................................................65
3.3. Xây dựng trò chơi đua xe ôtô.....................................................................66
3.3.1. Các vấn đề cần giải quyết....................................................................66
3.3.2. Phương pháp lập trình..........................................................................67
3.4. Một số hình ảnh của trò chơi......................................................................69
3.3.1. Màn hình splash...................................................................................70
3.3.2. Menu chính...........................................................................................70
3.3.3. Màn hình Chơi game...........................................................................73
3.3.4. Màn hình Chơi 2 người........................................................................74
3.3.5. Màn hình Luyện tập.............................................................................76
3.3.6. Màn hình Thiết lập...............................................................................77
3.3.7. Màn hình Lưu kỉ lục............................................................................78
3.3.8. Màn hình Kỉ lục...................................................................................79
3.3.9. Màn hình Help.....................................................................................80
4



KẾT LUẬN............................................................................................................81
TÀI LIỆU THAM KHẢO.....................................................................................82
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN...............................................83

5


DANH MỤC HÌNH
Hình 1.1. Các tầng J2ME được xây dựng trên CLDC..........................................12
Hình 1.2. Kiến trúc của J2ME...............................................................................13
Hình 1.3. Vòng đời của một midlet.......................................................................17
Hình 1.4. quản lý màn hình của ĐTDĐ.................................................................18
Hình 1.5. Đối tượng displayable............................................................................18
Hình 1.6. Sơ đồ phân cấp chức năng đồ họa MIDP..............................................19
Hình 1.7. Đồ họa mức cao.....................................................................................19
Hình 1.8. Hệ trục tọa độ.........................................................................................23
Hình 1.9. Điểm neo................................................................................................28
Hình 1.10. Vị trí ảnh..............................................................................................30
Hình 1.11. Sprite....................................................................................................33
Hình 1.12. Tiled layer............................................................................................35
Hình 1.13. MIDLET Suite One.............................................................................38
Hình 2.1. Biểu đồ Use – Case................................................................................48
Hình 2.2. Biểu đồ trình tự UC- ChoiGame...........................................................49
Hình 2.3. Biểu đồ cộng tác UC- ChoiGame..........................................................50
Hình 2.4. Biểu đồ trình tự UC- ChoiHaiNguoi.....................................................51
Hình 2.5. Biểu đồ cộng tác UC - ChoiHaiNguoi...................................................52
Hình 2.6. Biểu đồ trình tự UC- LuyenTap...........................................................53
Hình 2.7. Biểu đồ cộng tác UC-LuyenTap............................................................54

Hình 2.8. Biểu đồ trình tự UC-LuuKiLuc............................................................55
Hình 2.9. Biểu đồ cộng tác UC-LuuKiLuc............................................................56
Hình 2.10. Biểu đồ trình tự UC- XemKiLuc.........................................................57
Hình 2.11. Biểu đồ cộng tác UC-XemKiLuc........................................................58
Hình 2.12. Biểu đồ trình tự UC............................................................................59
Hình 2.13. Biểu đồ cộng tác UC- ThietLap...........................................................60
Hình 2.14. Biểu đồ trình tự UC- TroGiup............................................................61
Hình 2.15. Biểu đồ cộng tác UC- TroGiup...........................................................61
Hình 2.16. Biểu đồ trình tự UC-About..................................................................62
6


Hình 2.17. Biểu đồ Cộng tác UC-About...............................................................63
Hình 2.18. Biểu đồ lớp...........................................................................................63
Hình 3.1. Khởi động Netbeans..............................................................................65
Hình 3.2. Máy ảo chạy chương trình.....................................................................66
Hình 3.3: Giới hạn vị trí x......................................................................................67
Hình 3.4. TiledLayer..............................................................................................69
Hình 3.5. Tiled sắp xếp theo ma trận.....................................................................69
Hình 3.6. Màn hình splash.....................................................................................70
Hình 3.7. Menu chính............................................................................................71
Hình 3.8. Menu con chức năng chơi game............................................................72
Hình 3.9. Màn hình new game...............................................................................73
Hình 3.10. Menu con chơi hai người.....................................................................74
Hình 3.12. Màn hình chơi hai người......................................................................75
Hình 3.13. Màn hình luyện tập..............................................................................76
Hình 3.14. Màn hình Thiết lập...............................................................................77
Hình 3.15. Màn hình Lưu kỉ lục............................................................................78
Hình 3.16. Màn hình kỉ lục....................................................................................79
Hình 3.17. Màn hình Hướng dẫn...........................................................................80


DANH MỤC BẢNG
Bảng 1.1. So sánh các thông số kỹ thuật của CDC và CLDC..............................14
7


Bảng 1.2. Mô hình hoạt động của Client và Server trong J2ME Bluetooth.........42
Bảng 2.1. Danh sách một số lớp chính..................................................................64
Bảng 3.1. Chức năng chính của trò chơi...............................................................66
Bảng 3.2. Chức năng trong giao diện chơi game..................................................67
Bảng 3.3. Dữ liệu điểm trong RMS.......................................................................68
Bảng 3.4. Dữ liệu Thiết lập lưu trong RMS..........................................................68

DANH MỤC TỪ VIẾT TẮT

8


J2ME

Java 2 Micro Edition

MIDP

Mobile Information Device Profile

WTK

Wireless Toolkit


GPS

Global Positioning System

J2SE

Java 2 Standard Edition

CLDC

Connected Limitted Device Configuration

API

Application Programming Interface

CDC

Connected Device Configuration

RMS

Record Management system

JDK

Java Development Kit

SMTK


Siemens Mobility Toolkit

JAR

Java Archive

JVM

Java Virtual Machine

9


LỜI NÓI ĐẦU
Với sự phát triển mạnh mẽ của thông tin di động hiện nay, chiếc điện
thoại di động đã trở thành một vật dụng không thể thiếu của đa số mọi người.
Các thiết bị di động ngày càng thể hiện rõ những ưu thế nổi bật của nó.
Số lượng thiết bị di động ở Việt Nam cũng như trên thế giới ngày càng
tăng. Chiếc điện thoại di động ngày nay được hỗ trợ nhiều tính năng cao cấp, nó
giống như một chiếc máy tính thu nhỏ, có thể chạy được nhiều ứng dụng như tra
từ điển, nghe nhạc, chơi game... Điện thoại di động đã giúp ích rất nhiều cho con
người trong công việc cũng như đáp ứng nhu cầu gải trí. Xuất phát từ nhu cầu
thực tế đồng thời để góp phần tăng tính giải trí và khả năng ứng dụng trên điện
thoại di động, nay em chọn đề tài "xây dựng game đua xe trên điện thoại di
động với J2ME".
Sau thời gian nghiên cứu và phát triển cùng với sự giúp đỡ, chỉ bảo của
thầy cô, bạn bè, sự hướng dẫn tận tình của thầy Lê Tuấn Anh. Em đã hoàn thành
đồ án tốt nghiệp của mình. Tuy nhiên do kinh nghiệm và vốn kiến thức của em còn
nhiều hạn chế nên đề tài của em còn nhiều thiếu sót. Kính mong nhận được sự góp
ý và chỉ bảo của quý thầy cô và các bạn để đề tài của em được hoàn thiện hơn.


10


CHƯƠNG I: CƠ SỞ LÝ THUYẾT
1.1. Giới thiệu về Java và công nghệ J2ME
1.1.1. Giới thiệu về java
Java là một công nghệ được hãng Sun Microsystems xây dựng từ cuối
năm 1990 với tên gọi Oak và hiện nay đang phát triển vượt bậc với sự đóng góp
của hàng vạn lập trình viên trên thế giới. Ban đầu, Oak được kỹ sư James
Gosling và các cộng sự xây dựng với mục đích lập trình cho các mặt hang điện
dân dụng với mục tiêu nhỏ gọn và tương thích được với nhiều loại thiết bị phần
cứng khác nhau. Sau đó Oak được sử dụng trong nhiều dự án như dự án Xanh
(Blue Project), dự án Phim theo yêu cầu (Video on demand Project). Sau một
chuyến du lịch tới đảo Java của Indonesia, nhóm phát triển Oak đã đổi tên Oak
thành Java.
Hiện nay Java có các phiên bản sau:
• J2SErM (Java 2 Platform, Standart Edition): Phiên bản chuẩn
gồm bộ công cụ thông dụng dùng để chạy trên các máy PC hoặc các mạng
máy tính nhỏ.
• J2EE™ (Java 2 Platform, Enterprise Edition): Phiên bản dành
cho các máy chủ với bộ nhớ lớn. Bao gồm các kiến trúc nâng cao như
Web, EJB, Transaction… Dùng để xây dựng các ứng dụng có quy mô lớn.
1.1.2. Giới thiệu về J2ME và lập trình cho thiết bị di động
J2ME được phát triển từ kiến trúc JavaCard, EmbededJava và
PersonalJava của phiên bản Java1.1. Sau sự ra đi của phiên bản Java 2 thì Sun
quyết định thay thế PersonalJava bằng một phiên bản mới có tên Java 2 Micro
Edition, viết tắt là J2ME. J2ME được sử dụng cho các thiết bị nhỏ gọn với dung
lượng bộ nhớ nhỏ bé và khả năng xử lý thấp.
Mục tiêu của Java là cho phép người lập trình viết các ứng dụng độc lập

với thiết bị di động, không cần quan tâm đến phần cứng thực sự. Để làm được

11


như vậy, J2ME được xây dựng bằng các tầng khác nhau để che giấu đi việc
tương tác trực tiếp với phần cứng của thiết bị. Các tầng của J2ME được xây dựng
trên CLDC (Connected Limited Device Configuration):

Hình 1.1. Các tầng J2ME được xây dựng trên CLDC
• Tầng dưới cùng là tầng phần cứng thiết bị - đây là tầng vật lý bao gồm
phần cứng của thiết bị di động. Các tầng bên trên tầng Phần cứng thiết bị là các
tầng trừu tượng, chúng cung cấp cho lập trình viên nhiều giao diện lập trình thân
thiện và dễ dàng hơn mà không cần quan tâm đến phần cứng. Nói các khác
chúng đóng vai trò trung gian giúp cho lập trình viên tương tác được với phần
cứng mà không cần quan tâm đến các chi tiết thực sự của phần cứng của thiết bị.
• Tầng phần cứng thiết bị (Device Hardware Layer): đây là thiết bị di
động thật sự với bộ nhớ và tốc độ xử lý cụ thể. Các thiết bị di động khác nhau có
thể có bộ vi xử lý và các tập lệnh rất khác nhau. Mục tiêu của J2ME là cung cấp
cho lập trình viên khả năng giao tiếp giống nhau với tất cả các loại thiết bị di
động khác nhau.
• Tầng máy ảo Java (Java Virtual Machine Layer): đây là tầng đóng vai
trò thông ngôn giữa chương trình và thiết bị. Nó sẽ thông dịch các mã bytecode
(mã có được sau khi biên dịch mã nguồn chương trình) thành mã máy của các
thiết bị di động. Tầng này bao gồm KVM (K Virtual Machine) là bộ biên dịch
mã bytecode thành mã máy. Nó cung cấp một sự chuẩn hóa cho các thiết bị di
động để ứng dụng J2ME sau khi biên dịch có thể chạy được trên bất kỳ thiết bị di
động nào hỗ trợ KVM.
12



• Tầng cấu hình (Configuration Layer): Tầng này cung cấp các hàm API
cơ bản là nhân của J2ME. Lập trình viên có thể sử dụng các lớp và các phương
thức của các API này tuy nhiên nó không thực sự phong phú bằng tập API của
tầng hiện trạng.
• Tầng hiện trạng (Profile Layer): Tầng này cung cấp các hàm API hữu
dụng hơn cho việc lập trình. Mục đích của tầng này xây dựng nên lớp cấu hình
và cung cấp nhiều thư viện ứng dụng hơn.
1.1.2.1. Kiến trúc của J2ME

Hình 1.2. Kiến trúc của J2ME
Kiến trúc J2ME bao gồm các thành phần: Cấu hình (configuration), hiện
trạng (profile), các gói tuỳ chọn (optional package) cho việc xây dựng hoàn thiện
môi trường thực thi Java mà đáp ứng các yêu cầu cho một phạm vi lớn của các
thiết bị và thị trường đích. Các nhà sản xuất thiết bị phát triển các tính năng mới
trong các thiết bị của họ hoặc cung cấp các dịch vụ, ứng dụng. Các cấu hình có
thể được mở rộng với các thư viện bổ sung cho từng thiết bị.

13


• Cấu hình: là đặc tả định nghĩa một môi trường phần mềm cho một dòng
các thiết bị được phân loại bởi tập hợp các đặc tính, ví dụ như :
- Kiểu và số lượng bộ nhớ.
- Kiểu và tốc độ bộ vi xử lý.
- Kiểu mạng kết nối.
Do đây là đặc tả nên các nhà sản xuất thiết bị như Samsung, Nokia… Bắt
buộc phải thực thi đầy đủ các đặc tả do nhà tổ chức phát triển Sun qui định để
các lập trình viên có thể dựa vào môi trường lập trình nhất quán và thông qua sự
nhất quán này, các ứng dụng được tạo ra có thể mang tính độc lập thiết bị cao

nhất có thể. Hiện nay Sun đã đưa ra 2 dạng Configuration.
- CLDC (Connected Limited Device Configuration - Cấu hình thiết bị kết
nối giới hạn): được thiết kế để nhắm vào thị trường các thiết bị cấp thấp (lowend), các thiết bị này thông thường là máy điện thọai di động và PDA với khoảng
512 KB bộ nhớ. Vì tài nguyên bộ nhớ hạn chế nên CLDC được gắn với Java
không dây (Java Wireless ), dạng như cho phép người sử dụng mua và tải về các
ứng dụng Java, ví dụ như là Midlet.
- CDC (Connected Device Configuration - Cấu hình thiết bị kết nối): CDC
được đưa ra nhắm đến các thiết bị có tính năng mạnh hơn dòng thiết bị thuộc
CLDC nhưng vẫn yếu hơn các hệ thống máy để bàn sử dụng J2SE. Những thiết
bị này có nhiều bộ nhớ hơn (thông thường là trên 2Mb) và có bộ xử lý mạnh hơn.
Các sản phẩm này có thể kể đến như các máy PDA cấp cao, điện thoại web, các
thiết bị gia dụng trong gia đình …
Bảng dưới là sự so sánh các thông số kỹ thuật của CDC và CLDC

Bảng 1.1. So sánh các thông số kỹ thuật của CDC và CLDC

14


• Hình trạng:
Profile mở rộng Configuration bằng cách thêm vào các class để bổ trợ các
tính năng cho từng thiết bị chuyên biệt. Các profile tiêu biểu:
- Mobile Information Device Profile (MIDP): profile này sẽ bổ sung các
tính năng như hỗ trợ kết nối, các thành phần hỗ trợ giao diện người dùng vào
CLDC. Profile này được thiết kế chủ yếu để nhắm vào điện thọai di động với đặc
tính là màn hình hiển thị hạn chế, dung lượng chứa có hạn. Do đó MIDP sẽ cung
cấp một giao diện người dùng đơn giản và các tính năng mạng đơn giản dựa trên
HTTP. Có thể nói MIDP là profile nổi tiếng nhất bởi vì nó là kiến thức cơ bản
cho lập trình Java trên các máy di động (Wireless Java).
- PDA Profile: tương tự MIDP, nhưng với thị trường là các máy PDA với

màn hình và bộ nhớ lớn hơn.
- Foundation Profile: cho phép mở rộng các tính năng của CDC với phần
lớn các thư viện của bộ Core Java2 1.3.
Ngoài ra còn có Personal Basis Profile, Personal Profile, RMI Profile,
Game Profile.
• Gói tuỳ chọn:
Nền tảng J2ME có thể được mở rộng hơn nữa bằng các gói tùy chọn với
cấu hình CLDC, CDC, và các hình trạng tương ứng. Các gói tuỳ chọn đưa ra các
chuẩn cho việc sử dụng cả công nghệ đã có và công nghệ đang được sử dụng
rộng rãi là Bluetooth, dịch vụ Web, nhắn tin không dây, đa phương tiện, và kết
nối cơ sở dữ liệu. Các nhà sản xuất thiết bị có thể kèm theo các gói tùy chọn để
thúc đẩy các tính năng của các thiết bị.
1.1.2.2. Sơ lược về MIDP
Đây là Profile được định nghĩa dành riêng cho các thiết bị di động và là
thành phần chính trong J2ME. MIDP cung cấp các chức năng cơ bản cho hầu hết
các dòng thiết bị di động phổ biến nhất như các máy điện thoại di động và các

15


máy PDA. Tuy nhiên MIDP không phải là tất cả những gì lập trình viên cần vì
MIDP được thiết kế cho các máy di động có cấu hình rất thấp.
• Những chức năng MIDP cung cấp
- Các lớp và kiểu dữ liệu: Phần lớn các lớp mà các lập trình viên Java
quen thuộc vẫn còn được giữ lại ví dụ như các lớp trong gói java.util như Stack,
Vector và Hastable cũng như Enumeration.
- Hỗ trợ đối tượng Display: Đúng như tên gọi một chương trình MIDP sẽ
hỗ trợ duy nhất một đối tượng Display là đối tượng quản lý việc hiển thị dữ liệu
trên màn hình điện thoại.
- Hỗ trợ Form và các giao diện người dùng.

- Hỗ trợ Timer và Alert.
- Cung cấp tính năng Record Management System (RMS) cho việc lưu trữ
dữ liệu.
• Những chức năng hạn chế của MIDP:
- Phép tính dấu phẩy động (floating point): Phép tính này đòi hỏi rất nhiều
tài nguyên CPU và phần lớn các CPU cho các thiết bị di động không hỗ trợ phép
tính này, do đó MIDP cũng không có.
- Bộ nạp class (Class Loader).
- Hỗ trợ từ khóa finalize() như trong J2SE: Việc “dọn dẹp” tài nguyên
trước khi nó bị xóa được đẩy về phía các lập trình viên.
- Không hỗ trợ JNI.
- Hỗ trợ hạn chế thao tác bắt lỗi.
- Phần lớn các thư viện API cho Swing và AWT không thể sử dụng được
trong MIDP.
- Không hỗ trợ các tính năng quản lý file và thư mục: Thực tế là các thiết bị
J2ME không có hỗ trợ các thiết bị lưu trữ thông thường như ổ cứng v.v. Tuy
nhiên, điều đó không có nghĩa là người dùng phải mất đi mọi dữ liệu quan trọng
mỗi khi tắt máy, Sun đã cung cấp một chức năng khác tương đương gọi là Record
Management system (RMS) để cung cấp khả năng lưu trữ cho các thiết bị này.

16


1.1.3. Những hạn chế của lập trình di động
Sự khác nhau lớn nhất giữa lập trình cho di động so với lập trình cho PC
đó là bộ nhớ, kích thước màn hình hay thậm chí là màu sắc của thiết bị. Ngoài ra
còn có sự khác nhau giữa các hãng sản xuất cũng như dòng máy di động của
hãng. Các dòng máy khác nhau sẽ có bộ nhớ, kích thước, màu sắc màn hình và
cả hỗ trợ cho lập trình cũng khác nhau.
Các loại bộ nhớ:

Bộ nhớ làm việc hay còn gọi là heap memory là phần bộ nhớ được dùng
trong suốt quá trình chạy và được giải phóng khi ứng dụng kết thúc. Ứng dụng
dành cho di động phải có bô nhớ nhỏ hơn vùng nhớ này mới có thể chạy được.
RMS là bộ nhớ mà thông tin vẫn còn được lưu khi tắt ứng dụng. Lấy một
ví dụ trong game, RMS được sử dụng để lưu top những người chơi cao điểm
nhất. Các thông tin đó vẫn được cập nhật cho lần chơi tiếp theo.
1.2. Lập trình J2ME
1.2.1. MIDLet và vòng đời của 1 MIDLet
Giống như dạng chương trình Applet trên J2SE, một Midlet luôn luôn kế
thừa javax.microedition.midlet. Hàm cơ bản nhất trong mọi Midlet là startApp(),
hàm này sẽ khởi tạo Midlet cũng như vận hành các thành phần hoặc đối tượng
khác, ngoài startApp(), mỗi Midlet còn có pauseApp() và destroyApp(), mỗi hàm
này sẽ đựợc gọi thực thi tương ứng khi user chọn dừng hoặc thoát chương trình.

Hình 1.3. Vòng đời của một midlet
17


1.2.2. Cách quản lý màn hình của ĐTDĐ :
Điện thoại di động không quản lý trực tiếp trên màn hình như máy tính
mà phải thông qua một đối tượng Display được lấy qua từ câu lệnh:
Display.getDisplay(this).

Hình 1.4. quản lý màn hình của ĐTDĐ
Mặc dù mỗi MIDlet chỉ có duy nhất một đối tượng Display nhưng nó lại
có thể có rất nhiều đối tượng Displayable. Điều đó có nghĩa là một đối tượng
Display có thể hiển thị bao nhiêu đối tượng Displayable tùy ý. Đối tượng
Displayable là đối tượng có thể nhìn thấy được một cách trực quan trên màn
hình. Bản thân MIDP có chứa 2 lớp con của Displayable là Screen và Canvas.


Hình 1.5. Đối tượng displayable
1.2.3. Đồ họa trong J2ME
Các lớp MIDP cung cấp hai mức đồ họa: đồ họa mức thấp và đồ họa mức
cao. Đồ họa mức cao dùng cho văn bản hay form. Đồ họa mức thấp dùng cho các
ứng dụng games. Dưới đây là sơ đồ thể hiện mức phân cấp chức năng đồ họa
trong MIDP.

18


Hình 1.6. Sơ đồ phân cấp chức năng đồ họa MIDP.
Cả hai lớp đồ họa mức thấp và lớp đồ họa mức cao đều là lớp con của lớp
Displayable. Trong MIDP chỉ có một lớp Displayable được hiển thị tại một thời
điểm.
1.2.3.1. Đồ họa mức cao
Các thành phần đồ họa mức cao là lớp con của lớp Screen. Nó cung cấp
các thành phần như Textbox, List, Form, Alert. Việc sắp xếp phụ thuộc vào nhà
sản xuất.

Hình 1.7. Đồ họa mức cao
• TextBox: Lớp TextBox cho phép người dùng nhập và soạn thảo văn
bản. Lập trình viên có thể định nghĩa số ký tự tối đa, giới hạn loại dữ liệu nhập
(số học, mật khẩu, email,…) và hiệu chỉnh nội dung của textbox. Kích thước thật

19


sự của textbox có thể nhỏ hơn yêu cầu khi thực hiện thực tế (do giới hạn của thiết
bị). Kích thước thật sự của textbox có thể lấy bằng phương thức getMaxSize().
• List: Lớp List là một Screen chứa danh sách các lựa chọn chẳng hạn như

các radio button. Người dùng có thể tương tác với list và chọn một hay nhiều item.
Có 3 loại danh sách đó là: IMPICIT, EXCLUSIVE, MULTIPLE.
• Alert: Alert hiển thị một màn hình pop-up trong một khoảng thời gian.
Nói chung nó dùng để cảnh báo hay báo lỗi. Thời gian hiển thị có thể được thiết
lập bởi ứng dụng. Alert có thể được gán các kiểu khác nhau (alarm, confirmation,
error, info, warning), các âm thanh tương ứng sẽ được phát ra.
Có hai loại Alert:
- Modal: hộp thoại thông báo được trình bày đến khi người dùng ấn nút
đồng ý
- Non-modal: hộp thoại thông báo chỉ được trình bày trong một số giây
nhất định
AlertType sử dụng âm thanh để thông báo cho người dùng biết có một sự
kiện xảy ra. AlertType bao gồm 5 loại âm thanh định sẵn là: thông báo, xác nhận,
báo lỗi, thông báo và cảnh báo. Các phương thức dựng của Alert cho biết là Alert
có thể bao gồm 1 tham chiếu đến một đối tượng AlertType.
• Form: là lớp hữu dụng nhất của các lớp Screen bởi vì nó cho phép chứa
nhiều item trên cùng một màn hình. Các item có thề là DateField, TextField,
ImageItem, TextItem, ChoiceGroup.
- DateField: Thành phần DateField cung cấp một phương tiện trực quan
để thao tác đối tượng Date được định nghĩa trong java.util.Date. Khi tạo một đối
tượng DateField, bạn cần chỉ rõ là người dùng chỉ có thể chỉnh sửa ngày, chỉnh
sửa giờ hay đồng thời cả hai.
- Gauge: Một thành phần Gauge là một kiểu giao diện thường được dùng
để mô tả mức độhoàn thành một công việc. Có 2 loại Gauge là loại tương tác và

20


loại không tương tác. Loại đầu cho phép người dùng có thể thay đổi Gauge, loại
2 thì đòi hỏi người phát triển phải cập nhật Gauge.

- Stringltem: Một thành phần StringItem được dùng để hiển thị một nhãn
hay chuỗi văn bản. Người dùng không thể thay đổi nhãn hay chuỗi văn bản khi
chương trình đang chạy.
- TextField: Một thành phần TextField thì tương tự như bất kỳ các đối
tượng nhập văn bản tiêu biểu nào. Bạn có thể chỉ định một nhãn, số ký tự tối đa
được phép nhập, và loại dữliệu được phép nhập. Ngoài ra TextField còn cho
phép bạn nhập vào mật khẩu với các ký tự nhập vào sẽ được che bởi các ký tự
mặt nạ.
MIDP định nghĩa các tham số ràng buộc sau cho thành phần TextField:
.ANY: cho phép nhập bất kỳ ký tự nào.
.EMAILADDR: chỉ cho phép nhâp vào các địa chỉ email hợp lệ.
.NUMERIC: chỉ cho phép nhập số.
.PHONENUMBER: Chỉ cho phép nhập sốđiện thoại.
.URL: Chỉ cho phép nhập các ký tự hợp lệ bên trong URL.
.PASSWORD: che tất cả các ký tự nhập vào.
- ChoiceGroup: Thành phần ChoiceGroup cho phép người dùng chọn từ
một danh sách đầu vào đã được định nghĩa trước. ChoiceGroup có 2 loại:
+ multi-selection (cho phép chọn nhiều mục).
+ checkbox exclusive-selection (chỉ được chọn một mục).
- Spacer: là thành phần không nhìn thấy, được dùng để định vị trí cho các
đối tượng khác trên màn hình hiển thị. Spacer dùng để chỉ rõ khoảng trắng theo
chiều dọc và chiều ngang giữa các thành phần, đơn giản bằng cách chỉ ra chiều
dài và chiều rộng cho từng cái. Vì Spacer là thành phần không nhìn thấy nên nó
không có sự kiện.

21


- Customltem: Thành phần CustomItem cho phép bạn tạo ra những thành
phần Item của chính bạn. Những thành phần này cũng giống như những Item

khác là cũng có thể được đặt vào trong Form và có thể nhận biết và xử lý sự kiện
CustomItem được vẽ lên màn hình hiển thị bằng phương thức paint(). Vì thế nó
sẽ tùy thuộc vào đoạn mã được bạn hiện thực bên trong phương thức paint(). Quá
trình tạo ra một đối tượng CustomItem cũng không khác các đối tượng có sẵn
trên nền Java.
- Image and Imageltem: Hai lớp được dùng để hiển thị hình ảnh là: Image
và ImageItem. Image được dùng để tạo ra một đối tượng hình ảnh và giữ thông
tin như là chiều cao và chiều rộng, và dù ảnh có biến đổi hay không. Lớp
ImageItem mô tả một tấm ảnh sẽ được hiển thị như thế nào.
MIDP đưa ra 2 loại hình ảnh là loại ảnh không biến đổi và ảnh biến đổi.
Một tấm ảnh không biến đổi thì không thể bị thay đổi kể từ lúc nó được
tạo ra. Đặc trưng của loại ảnh này là được đọc từ một tập tin.
Một tấm ảnh biến đổi về cơ bản là một vùng nhớ.
PNG là loại ảnh duy nhất được hỗ trợ bởi bất kỳ thiết bị MIDP nào.
1.2.3.2. Đồ họa mức thấp
Mặc dù các hàm API cấp cao cung cấp một tập đầy đủ các thành phần để
xây dựng giao diện ứng dụng người dùng. Tuy nhiên các thành phần cấp cao
không cung cấp phương tiện để vẽ trực tiếp lên thiết bị thể hiện. Vì thiếu khả
năng này nên các ứng dụng được tạo ra sẽ gặp nhiều giới hạn.
Canvas và Graphics là 2 lớp con của các hàm API cấp thấp. Canvas là một
khung vẽ cho phép người phát triển có khả năng vẽ lên thiết bị trình bày cũng
như là việc xử lý sự kiện. Còn lớp Graphics cung cấp các công cụ thật sự để vẽ
như drawRoundRect() và drawString().
a) Lớp Canvas và kỹ thuật xử lý đồ họa:
Lớp Canvas cung cấp một khung vẽ cho phép tạo ra giao diện tùy biến
người dùng. Một số lượng lớn các phương thức trong lớp này được dùng để xử lý
22


sự kiện, vẽ ảnh và chuỗi lên thiết bị hiển thị. Trong phần này sẽ bao gồm các

mục:
- Hệ thống tọa độ.
- Tạo đối tượng Canvas.
- Vẽ lên trên đối tượng Canvas.
- Xử lý các sự kiện hành động.
- Xử lý các sự kiện phím nhấn.
- Xử lý sự kiện hành động của Game.
- Xử lý sự kiện con trỏ.
• Hệ thống trục tọa độ
Hệ thống tọa độ cho lớp Canvas có tâm tọa độ là điểm trái trên của thiết bị
trình bày. Giá trị x tăng dần về phía phải, giá trị y tăng dần khi đi xuống phía
dưới. Khi vẽ độ dày bút vẽ là một điểm ảnh.

Hình 1.8. Hệ trục tọa độ
Chiều rộng và chiều cao của Canvas cũng đại diện cho toàn bộ diện tích
khung vẽ có thể trên thiết bị trình bày.

23


• Tạo một đối tượng Canvas
Bước đầu tiên để làm việc với một lớp Canvas là tạo ra một lớp thừa kế từ
lớp Canvas:
class TestCanvas extends Canvas implements CommandListener {
...
protected voidpaint(Graphics g) { // Draw onto the canvas
}
}
TestCanvas canvas = new TestCanvas(this);
• Vẽ trên đối tượng Canvas

Phương thức paint của lớp Canvas cho phép vẽ các hình dạng, vẽ ảnh,
xuất chuỗi. Ví dụ:
protected voidpaint(Graphics g) {
// Set background color to white
g.setColor(255, 255, 255);
// Fill the entire canvas
g.fillRect(0, 0, getWidth(), getHeight());
Có thể sử dụng một tham chiếu đến một đối tuợng Graphics bên trong
thân phương thức paint() để thực hiện công việc vẽ thực sự.
• Sự kiện hành động
Cũng như các thành phần Form, List, và TextBox, một Canvas có thể xử
lý các sự kiện Command.
Ví dụ:
class TestCanvas extends Canvas implements CommandListener {
private Command cmdExit;
24


display = Display.getDisplay(this);
cmdExit = new Command("Exit", Command.EXIT, 1);
addCommand(cmdExit);
setCommandListener(this);
...
protected voidpaint(Graphics g) { // Draw onto the canvas
}
public void commandAction(Command c, Displayable d) {
if (c == cmdExit)

}
}

• Mã phím
Trong trường hợp xử lý các hành động của các phím mềm, một Canvas có
thể truy cập đến 12 mã phím. Những mã này được đảm bảo luôn luôn có trên bất
kỳ các thiết bị MIDP nào.
KEYNUM0,

KEYNUM1,

KEYNUM2,

KEYNUM3,

KEYNUM4,

KEYNUM5,

KEYNUM6,

KEY_NUM7,

KEYNUM8,

KEYNUM9,

KEYSTAR, KEYPOUND
• Các hành động trong xử lý các trò chơi
MIDP thường được sử dụng để tạo các trò chơi trên nền Java. Các hằng số
sau đã được định nghĩa để xử lý các sự kiện có liên quan đến trò chơi trong
MIDP UP, DOWN, LEFT, RIGHT, FIRE, GAME_A, GAME_B, GAME_C,
GAME_D Nói một cách đơn giản thì các giá trị này được ánh xạ thành các phím

mũi tên chỉ hướng của thiết bị, nhưng không phải tất cả các thiết bị di động đều

25


×