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

Ứng dụng công nghệ J2ME, xây dựng phần mềmtrò chơi xếp gạch trên điện thoại di động

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.72 MB, 69 trang )

LỜI CẢM ƠN
Để hoàn thành được đồ án này, tôi đã nhận được sự chỉ bảo tận tình
của các Thầy Cô giáo trong khoa Công nghệ Thông tin trường Đại học
Bách Khoa, sự giúp đỡ động viên của gia đình và bạn bè.
Trước tiên tôi xin chân thành cảm ơn tất cả các thầy cô của trường Đại
học Bách Khoa, Đại học Đà Nẵng đã dạy dỗ và truyền đạt kiến thức cho
tôi trong thời gian học tại trường.
Tôi xin chân thành cám ơn thầy PGS. TS. Phan Huy Khánh. Cám ơn
thầy đã tận tình hướng dẫn góp ý cho tôi trong quá trình thực hiện đồ án
này. Nhờ đó mà tôi có thể hoàn thành theo đúng yêu cầu về nội dung của
một đồ án tốt nghiệp.
Tôi cũng xin được cám ơn những người bạn cùng ngành đã động viên
giúp đỡ tôi trong suốt thời gian làm đồ án.
Cuối cùng, con xin cảm ơn gia đình đã tạo mọi điều kiện tốt nhất để
bản thân có thể hoàn thành được đồ án đúng hạn.
Mặc dù đã cố gắng hết sức, nhưng vì khả năng và thời gian có hạn, đề
tài nghiên cứu chắc chắn còn nhiều khiếm khuyết. Rất mong các Thầy Cô
giáo chỉ bảo giúp đỡ. Rất mong sự góp ý của bạn bè, đồng nghiệp.

Sinh viên
Lê Thị Mỹ Nhung


LỜI CAM ĐOAN

Tôi xin cam đoan:
1

Những nội dung trong báo cáo này là do tôi thực hiện dưới sự hướng dẫn
trực tiếp của thầy PGS. TS. Phan Huy Khánh


2

Mọi tham khảo dùng trong báo cáo này đều được trích dẫn rõ ràng tên
tác giả, tên công trình, thời gian, địa điểm công bố.

3

Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá,tôi xin
chịu hoàn toàn trách nhiệm.

Sinh viên
Lê Thị Mỹ Nhung


NHẬN XÉT CỦA CÁN BỘ HƯỚNG DẪN
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………

…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………

Đà Nẵng, Ngày….tháng….năm 2011
Cán bộ hướng dẫn
PGS. TS. Phan Huy Khánh


NHẬN XÉT CỦA CÁN BỘ PHẢN BIỆN
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………

…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
Đà Nẵng, Ngày….tháng….năm 2011
Cán bộ phản biện



i

Mục lục

MỤC LỤC
TỔNG QUAN VỀ ĐỀ TÀI........................................................................................................1
I. Đặt vấn đề...........................................................................................................................1
II. Mục đích của đề tài............................................................................................................1
III. Nhiệm vụ..........................................................................................................................2
IV. Phạm vi.............................................................................................................................2
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT..........................................................................................3
I. Giới thiệu ngôn ngữ JAVA..................................................................................................3
II. Công nghệ J2ME...............................................................................................................4
II.1 Giới thiệu về J2ME và lập trình trên thiết bị động......................................................4
II.2 Kiến trúc của J2ME.....................................................................................................5
II.2.1 Giới thiệu các thành phần trong nền tảng J2ME:.............................................6
II.2.2 Định nghĩa về Profile:..........................................................................................8
II.3 Phát triển ứng dụng......................................................................................................9
II.3.1 Biên dịch, kiểm tra lỗi và chạy thử.......................................................................9
II.3.2 Đóng gói và triển khai ứng dụng thành tập tin jar................................................9
II.3.3 Tập tin manifest.mf và tập tin JAD....................................................................10
II.3.4 Tối ưu mã chương trình và giảm kích thước ứng dụng......................................10
II.4 Lập trình với J2ME....................................................................................................11
II.4.1 MIDlet và đối tượng Display..............................................................................11
II.4.2 Giao diện người dùng cấp thấp...........................................................................13
II.4.3 Record Management System - RMS..................................................................21
II.4.4 Sound, Music and Video:....................................................................................27
CHƯƠNG 2: BÀI TOÁN VÀ HƯỚNG GIẢI QUYẾT..........................................................30

I. Bài toán.............................................................................................................................30
II. Mô tả bài toán..................................................................................................................30
III. Giải quyết bài toán.........................................................................................................31
III.1 Cấu trúc chương trình...............................................................................................31
III.2 Xây dựng các thuật toán giải quyết bài toán............................................................32
CHƯƠNG 3: CÀI ĐẶT VÀ DEMO CHƯƠNG TRÌNH........................................................37
I. Cài đặt hệ thống................................................................................................................37
I.1 Môi trường phát triển và công cụ lập trình.................................................................37
I.2 Hướng dẫn cài đặt hệ thống........................................................................................37
II. Cài đặt thuật toán.............................................................................................................37
II.1 Khởi tạo ma trận trạng thái của khối gạch.................................................................38
II.2 Tạo khối tiếp theo......................................................................................................43
II.3 Kiểm tra qua trái, phải, đi xuống...............................................................................43
II.4 Quay khối gạch..........................................................................................................45
III. Kết quả...........................................................................................................................47
KẾT LUẬN..............................................................................................................................53
I. Kết luận.............................................................................................................................53
II. Hướng phát triển đề tài....................................................................................................53


ii

Mục lục

MỤC LỤC HÌNH
Hình 1:
Hình 2:
Hình 3:
Hình 4:
Hình 5:

Hình 6:
Hình 7:
Hình 8:
Hình 9:
Hình 10:
Hình 11:
Hình 12:
Hình 13:
Hình 14:
Hình 15:
Hình 16:
Hình 17:
Hình 18:
Hình 19:
Hình 20:
Hình 21:
Hình 22:
Hình 23:
Hình 24:
Hình 25:

Các tầng của J2ME trên CLDC..............................................................................4
Kiến trúc tổng quát của nền tảng Java...................................................................5
Thành phần trong nền tảng J2ME..........................................................................7
Profile.....................................................................................................................9
Vòng đời của một MIDlet....................................................................................12
Vẽ cung................................................................................................................17
Điểm neo(1).........................................................................................................18
Điểm neo(2).........................................................................................................19
Điểm neo(3).........................................................................................................19

Vẽ ảnh..................................................................................................................20
MIDlet suite.........................................................................................................23
Sơ đồ âm thanh.....................................................................................................27
Mô hình chuyển đổi trạng thái của Player...........................................................29
Logo.....................................................................................................................47
Loading................................................................................................................47
Ask for sound.......................................................................................................48
Splash...................................................................................................................48
MainMenu............................................................................................................49
In game (1)...........................................................................................................49
In game (2)...........................................................................................................50
Game over............................................................................................................50
About....................................................................................................................51
Help......................................................................................................................51
Promotion (1).......................................................................................................52
Promotion (2).......................................................................................................52


ii
i

Mục lục

TỔNG QUAN VỀ ĐỀ TÀI

.I Đặt vấn đề
Công nghệ thông tin ngày nay có vai trò rất quan trọng trong cuộc sống hàng
ngày của chúng ta. Hiện nay có rất nhiều công nghệ mới phát triển song song với
việc phát triển công nghệ thông tin như Bluetooth, Wireless, WAP, SOAP,
… nhằm giúp công nghệ thông tin ngày càng thân thiết với người dùng hơn. Một

trong những công nghệ góp phần không nhỏ trong việc kết nối con người với
thông tin cũng như con người với con người là công nghệ di động. Với tốc
độ phát triển hiện nay và những lợi ích to lớn của công nghệ di động, có thể
thấy nó có ảnh hưởng rất lớn đến cuộc sống của con người. Không giống như
trước đây những chiếc điện thoại chỉ có chức năng rất đơn giản là đàm thoại,
điện thoại hiện nay còn có thêm rất nhiều chức năng, ứng dụng khác như: email,
truy cập Internet, video, nghe nhạc, chơi game, … đồng thời với nó là sự phát triển
vũ bão của các dịch vụ gia tăng trên điện thoại di động dựa trên công nghệ WAP
và SOAP.
Vì vậy tôi chọn đề tài là “Ứng dụng công nghệ J2ME, xây dựng phần mềm
trò chơi xếp gạch trên điện thoại di động” nhằm khai thác các tính năng của điện
thoại di động. Qua đó tôi sẽ cố gắng nắm bắt và ứng dụng được tốt các kỹ thuật
lập trình trên điện thoại di động mà chủ yếu là lập trình game.

.II Mục đích của đề tài
Khi thực hiện đề tài này, mục tiêu mà tôi mong muốn đạt được là:
 Xây dựng game Zentris nhằm hiểu rõ và sâu hơn về J2ME.
 Nắm được cách xây dựng một game trên điện thoại di động.
 Cách xử lý âm thanh, hình ảnh, phím, cảm ứng … trong lập trình game.


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

.III Nhiệm vụ
 Tìm hiểu về các công cụ hỗ trợ lập trình với J2ME.
 Tìm hiểu về JAVA và J2ME.
 Xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động.

.IV Phạm vi
Trong phạm vi đề tài này tôi đã nghiên cứu về J2ME, mô hình phát triển game,

các kỹ thuật xử lý âm thanh, phím, hiệu ứng … Tuy nhiên tôi chưa đi sâu vào tìm
hiểu kỹ về chúng. Ví dụ như chưa xử lý được nhiều hiệu ứng phức tạp, chưa tìm
hiểu vê cách xử lý phím và các kỹ thuật khác trong J2ME.

Lê Thị Mỹ Nhung, Lớp 06T4

4


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

CHƯƠNG 1

CƠ SỞ LÝ THUYẾT
.I Giới thiệu ngôn ngữ JAVA
Java là một công nghệ được hãng Sun Microsystems xây dựng từ cuối
năm1990 với cái tên 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 hàng đ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.
Java mà tiền thân là Oak được xây dựng chủ yếu dựa trên bộ công cụ phát
triển (Java Development Kit - JDK) như là bộ thư viện chuẩn trong đó chưa
trình biên dịch, trình thông dịch, trình đóng gói, tài liệu,… Đây chính là nền
tằng cho việc phát triển các ứng dụng Java. Hiện nay, cộng đồng Java trên thế
giới mà đi đầu là hãng Sun Microsystems đã xây dựng nhiều nhánh mới cho
Java như: JavaMail (thư điện tử), Java TAPI (viễn thông), Java3D (đồ họa 3
chiều), J2ME (ứng dụng cho thiết bị di động),…

Hiện nay Java có các phiên bản sau:
-

J2SETM (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ỏ.

-

J2EETM (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.

-

J2METM (Java 2 Platform, Micro Edition): Bao gồm môi trường và thư viện
Java dùng để phát triển các ứng dụng trên các thiết bị có bộ nhớ nhỏ như
điện thoại di động, PDA, các đồ gia dụng,…

Lê Thị Mỹ Nhung, Lớp 06T4

5


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

.II Công nghệ J2ME
.II.1 Giới thiệu về J2ME và lập trình trên thiết bị động
J2ME được phát triển từ kiến trúc JavaCard, EmbededJava và PersonalJava của
phiên bản Java 1.1. Đến dự 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ớ 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ật sự. Để làm được như
thế, 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:

Các tầng của J2ME 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ể

Lê Thị Mỹ Nhung, Lớp 06T4

6


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

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.
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.

.II.2 Kiến trúc của J2ME
Phần này sẽ trình bày kiến trúc tổng quát của nền tảng Java :

Hình 2:

Kiến trúc tổng quát của nền tảng Java


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

.II.2.1Giới thiệu các thành phần trong nền tảng J2ME:
Định nghĩa về Configuration (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 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ể. Ví dụ như một lập trình
viên viết chương trình game cho điện thoại Samsung thì có thể sửa đổi chương
trình của mình một cách tối thiểu nhất để có thể chạy trên điện thọai Nokia.. 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
(low-end), 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 …
Cả 2 dạng Cấu hình kể trên đều chứa máy ảo Java (Java Virtual Machine)
và tập hợp các lớp (class) Java cơ bản để cung cấp một môi trường cho các ứng
dụng J2ME. Tuy nhiên, bạn chú ý rằng đối với các thiết bị cấp thấp, do hạn chế
về tài nguyên như bộ nhớ và bộ xử lý nên không thể yêu cầu máy ảo hổ trợ tất cả


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động


các tính năng như với máy ảo của J2SE, ví dụ, các thiết bị thuộc CLDC không
có phần cứng yêu cầu các phép tính toán dấu phẩy động, nên máy ảo thuộc
CLDC không được yêu cầu hỗ trợ kiểu float và double.

Hình 3:

Thành phần trong nền tảng J2ME.

Bảng dưới là sự so sánh các thông số kỹ thuật của CDC và CLDC :
CLDC

CDC

Ram

>=32K, <=512K

>=256K

Rom

>=128k, <=512k

>=512k

Nguồn Năng Lượng

Có GiớI Hạn (nguồn pin)

Không giới hạn


Network

Chậm

Nhanh


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

.II.2.2 Định nghĩa về Profile:
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ả 2 Configuration đều có những profile
liên quan và từ những profile này có thể dùng các class lẫn nhau. Đến đây ta có thể
nhận thấy do mỗi profile định nghĩa một tập hợp các class khác nhau, nên thường
ta không thể chuyển một ứng dụng Java viết cho một profile này và chạy trên một
máy hỗ trợ một profile khác. Cũng với lý do đó, bạn không thể lấy một ứng dụng
viết trên J2SE hay J2EE và chạy trên các máy hỗtrợ J2ME. Sau đây là 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.


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

Hình 4:

Profile.

.II.3 Phát triển ứng dụng
.II.3.1 Biên dịch, kiểm tra lỗi và chạy thử
Mã nguồn chương trình có thể được biên dịch bằng các trình biên dịch
chuẩn cảu Java, chúng tạo ra các file .class. Ta có thể biên dịch từ các trình soạn
thảo hoặc biên dịch trực tiếp từ dòng lệnh.
Chúng ta sử dụng các công cụ như WTK để kiểm tra lỗi và chạy thử
chương trình vì việc này nếu tiến hành trên thiết bị thật rất mất thời gian. Việc sử
dụng các giả lập giúp nhanh chóng phát hiện các lỗi. Ngoài ra nó còn giúp lập
trình viên có những cái nhìn cảm quan về chương trình của mình.

.II.3.2 Đóng gói và triển khai ứng dụng thành tập tin jar
Các lớp đã được biên dịch của ứng dụng J2ME được đóng gói trong tập tin
JAR cùng với các tài nguyên khác như hành ảnh, âm thanh,… Tập tin JAR này
chính là tập tin được cài vào thiết bị di động.
Người sử dụng có thể tải tập tin JAR vào máy di động bằng các cách sau:
Kết nối điện thoại di động với máy tính bằng cáp truyền dữ liệu: Việc này


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động


yêu cầu người dùng phải có tập tin JAR thật sự và phần mềm truyền thông để tải
ứng dụng vào điện thoại thông qua cáp dữ liệu
Cổng hồng ngoại: Yêu cầu thiết bị di động và nguồn chưa file JAR phải hỗ
trợ hồng ngoại và người dùng có file JAR thật sự
Sử dụng mạng không dây: tải ứng dụng thông qua mạng GPRS, người dùng
chỉ cần biết địa chỉ URL của tập tin JAR.

.II.3.3 Tập tin manifest.mf và tập tin JAD
Tập tin manifest.mf và tập tin JAD mô tả các đặc điểm của ứng dụng. Tập
tin manifest.mf nằm bên trong tập tin JAR còn tập tin JAD nằm ngoài tập tin JAR.
Tập tin JAD giúp cho người dùng có thể biết được đặc điểm của ứng dụng trước
khi tải. Việc này giúp làm giảm lãng phí tài nguyên và tiền bạc vì trên thực tế,
một ứng dụng J2ME nào đó chỉ có thể chạy trên một số máy nhất định.
Tập tin manifest.mf có nội dung như sau:
- Manifest-Version: //Phiên bản tập tin manifest.mf
- MIDlet-Name: //Tên bộ MIDlet
- MIDlet-Version:

//Phiên bản của bộ MIDlet

- MIDlet-Vendor:

//Nhà sản xuất

- MIDlet-<n>:

//Tên của MIDlet chính

- MicroEdition-Profile:


//Phiên bản hiện trạng

- MicroEdition-Configuration:

//Phiên bản cấu hình

.II.3.4 Tối ưu mã chương trình và giảm kích thước ứng dụng
Sau khi đóng gói chương trình thành tập tin JAR chúng ta thấy rằng các file
dữ liệu đã được nén lại một cách đáng kể. Tuy nhiên ta có thể giảm kích thước file
JAR này thêm một lần nữa bằng cách dùng một công cụ. Công cụ này thường
bao gồm các đặc tính sau:
 Loại bỏ các class không dùng đến.
 Loại bỏ các hàm và biến không dùng đến.
 Đổi tên class, package, hàm và biến thành các tên đơn giản và ngắn


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

gọn hơn.
 Thêm vào file class một số mã để chương trình khó bị dịch ngược hơn
Ba đặc tính đầu dùng để giảm kích thước các file .class trong khi đó
đặc tính thứ 3 và thứ 4 dùng để bảo vệ chương trình khó bị dịch
ngược lại thành mã nguồn. Ngay cả khi bị dịch ngược lại thành mã
nguồn thì chương trình cũng khó bị đọc hơn vì các tên lớp, biến ,
hàm, package đã bị thay đổi. Các công cụ thường được dùng để tối
ưu mã chương trình là Jbuilder 9X, Retroguard, Jshrink.

.II.4 Lập trình với J2ME
Chắc hẳn chúng ta đã biết nhiều về J2ME nhưng theo tôi được biết trong lập
trình game, tất cả mọi thứ đều được xử lý trên lớp canvas, Graphics kết hợp với các

kỹ xử lý âm thanh, cách lưu trữ bảng ghi(highScore), phím và cảm ứng (Touch)...
Tất cả những tài liệu về J2ME có rất nhiều và bạn có thể đọc trong file index(file
doc) của J2ME. Sau đây tôi xin gới thiệu đôi nét cơ bản về J2ME, cụ thể là tôi giới
thiệu về những thứ mà tôi được học trong khi lập trình game trên điện thoại di
động.
 Canvas
 Graphics
 RecordStore
 Âm thanh
 Xử lý phím, touch

.II.4.1 MIDlet và đối tượng Display
.II.4.1.1 MIDlet – Vòng đời của một MIDlet (Mobile Information Device
applet)
Một MIDlet kế thừa từ lớp javax.microedition.midlet.MIDlet và thực thi ít nhất
các phương thức cơ bản sau: startApp(), pauseApp(), và destroyApp().
Trong một ứng dụng của bạn gồm có nhiều lớp thì có thể chỉ cần một lớp kế
thừa MIDlet
- startApp():


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

Phương thức startApp() được gọi khi MIDlet được khởi tạo, và mỗi khi MIDlet
trở về từ trạng thái tạm dừng (pause). Các biến toàn cục sẽ được khởi tạo lại trừ
hàm tạo bởi vì các biến đã được giải phóng trong hàm pauseApp(). Nếu không thì
chúng sẽ không được khởi tạo lại bởi ứng dụng.
- pauseApp():
Phương thức pauseApp() được gọi mỗi khi ứng dụng cần được tạm dừng (ví
dụ, trong trường hợp có cuộc gọi hoặc tin nhắn đến). Cách thích hợp để sử dụng

pauseApp() là giải phóng tài nguyên và các biến để dành cho các chức năng khác
trong điện thoại trong khi MIDlet được tạm dừng. Cần chú ý rằng khi nhận cuộc
gọi đến, hệ điều hành trên điện thoại di động có thể dừng KVM thay vì dừng
MIDlet. Việc này do nhà sản xuất thiết bị quyết định sẽ chọn cách nào.
- destroyApp(boolean un):
Phương thức destroyApp() được gọi khi thoát MIDlet. (ví dụ khi nhấn nút exit
trong ứng dụng). Nó chỉ đơn thuần là thoát MIDlet.. Phương thức destroyApp() chỉ
nhận một tham số Boolean. Nếu tham số này là true, MIDlet được tắt vô điều kiện.
Nếu tham số là false, MIDlet có thêm tùy chọn từ chối thoát bằng cách ném ra một
ngoại lệ MIDletStateChangeException.
Dưới đây là vòng đời của một MIDlet:

Hình 5:
- resumeRequest(),
- notifyPaused(),

Vòng đời của một MIDlet


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

- notifyDestroyed()
.II.4.1.2 Đối tượng Display
Mỗi MIDlet có một tham chiếu đến một đối tượng Display. Đối tượng này cung
cấp các thông tin về màn hình cũng như một số phương thức cần cho việc hiển thị
các đối tượng khác trên màn hình. Có thể xem Display là đối tượng có nhiệm vụ
quản lý việc hiển thị của màn hình. Chức năng của nó là quyết định danh sách các
thành phần cần xuất hiện trên màn hình cũng như thời điểm phù hợp để hiển thị
chúng.
.II.4.1.3 Đối tượng Displayable

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:
public abstract class Displayable
public abstract class Canvas extends Displayable
public abstract class Screen extends Displayable

.II.4.2 Giao diện người dùng cấp thấp
.II.4.2.1 Các hàm API ở 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. Ví dụ hầu hết các nhà phát triển
game di động dựa trên khả năng vẽ các đường thẳng và các hình dạng như là một
phần tích hợp quá trình phát triển. Nếu các hàm API cấp cao cho phép chúng ta tạo
ra giao diện cho các ứng dụng theo chuẩn, thì các hàm API cấp thấp cho phép
chúng ta có thể thể hiện các ý tưởng của mình.
Canvas và Graphics là 2 lớp trái tim của các hàm API cấp thấp. Chúng ta sẽ
làm tất cả các công việc bằng tay. Canvas là một khung vẽ cho phép người phát


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

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().
.II.4.2.2 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ý sự kiện,
vẽ ảnh và chuỗi lên thiết bị hiển thị.
.II.4.2.2.1 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 {
private Command cmdExit; ... display = Display.getDisplay(this);
cmdExit = new Command("Exit", Command.EXIT, 1);
addCommand(cmdExit);
setCommandListener(this);
protected void paint(Graphics g) {
// Draw onto the canvas

}
}
TestCanvas canvas = new TestCanvas(this);
.II.4.2.2.2 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.
KEY_NUM0
KEY_NUM1
KEY_NUM2
KEY_NUM3


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

KEY_NUM4
KEY_NUM5

KEY_NUM6
KEY_NUM7
KEY_NUM8
KEY_NUM9
KEY_STAR KEY_POUND
Năm phương thức để xử lý các mã phím là:
void keyPressed(int keyCode)
void keyReleased(int keyCode)
void keyRepeated(int keyCode)
boolean hasRepeatEvents()
String getKeyName(int keyCode)
.II.4.2.2.3 Sự kiện con trỏ
Trong phần này chúng ta sẽ quản lý sự kiện con trỏ trong một Canvas. Những
sựkiện này được thiết kếđể làm thuận tiện cho việc tương tác với các thiết bị có
dạng con trỏ. Một số phương thức được cung cấp nhằm hỗ trợ cho việc xử lý sự
kiện con trỏ:
boolean hasPointerEvents()
boolean hasPointerMotionEvents()
void pointerPressed(int x, int y)
void pointerReleased(int x, int y)
void pointerDragged(int x, int y)
Các phương thức trên có thể tự giải thích chức năng thông qua tên của chính
mình. Ví dụ như phương thức hasPointerMotionEvents() trả về một giá trị có
kiểu boolean nhằm chỉ rõ rằng thiết bị di động có hỗ trợ khái niệm “nhấp chuột và
rê” hay không


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

.II.4.2.3Lớp Graphics

Chúng ta sử dụng đối tượng Graphics để vẽ lên một Canvas
.II.4.2.3.1 Hỗ Trợ màu
Một ứng dụng MIDP chỉ có một đối tượng Display. Đối tượng này đuợc dùng
để lấy thông tin của màn hình hiển thị hiện tại, ví dụ như số màu hỗ trợ và các
phương thức để yêu cầu các đối tượng được hiển thị. Đối tượng Display đơn giản là
một bộ quản lý sự hiển thị của thiết bị và điều khiển những gì sẽđược hiển thị ra trên
thiết bị.
Có hai phương thức chúng ta cần quan tâm đến:
boolean isColor()
int numColors()
Phương thức đầu tiên cho biết thiết bị có hỗ trợ hiển thị màu hay không. Nếu có
thì phương thức thứ 2 sẽ được gọi để xác định số màu được hỗ trợ. Các phương
thức tiếp theo dưới đây để lấy về màu và thiết lập màu ưa thích của bạn.
void setColor(int RGB)
void setColor(int red, int green, int blue)
int getColor()
int getBlueComponent() int getGreenComponent() int getRedComponent()
void setGrayScale(int value)
int getGrayScale()
Chú ý ta có thể xác định màu bằng 2 cách.
 Cách 1: Xác định một số nguyên đại diện cho 3 giá trị của màu là đỏ,
xanh lá cây và xanh dương với 8 bit cho mỗi màu.
 Cách 2: Dùng từng tham số riêng biệt để xác định mỗi màu. Khi sử
dụng một giá trịđể lưu giữ màu, thì màu đỏ sẽ chiếm 8 bit đầu kể từ bên
trái, tiếp theo là 8 bit dành cho màu xanh lá cây, sau cùng là màu xanh
dương.
Dưới đây là cách thiết lập màu chỉ sử dụng một số nguyên:
int red = 0, green = 128, blue = 255;



Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

...
g.setColor((red << 16) | (green << 8) | blue);
Và ta có thể xác định màu bằng cách thiết lập giá trị cho 3 tham số:
g.setColor(red, green, blue);
.II.4.2.3.2 Vẽ cung
Khi vẽ một cung, bạn có thể vẽ nó chỉ có đường bao xung quanh hay yêu cầu
nó được tô bên trong. Bạn có thể bắt đầu bằng cách chỉđịnh chiều bao quanh bên
ngoài của một hình hộp chữ nhật tưởng tượng. Góc bắt đầu xác định vị trí bắt đầu
vẽkhung, với giá trị 0 được xác định tại thời điểm 3 giờ. Giá trị dương tính theo
ngược chiều kim đồng hồ. Góc của cung chỉ ra rằng có bao nhiêu độ được vẽ tính
từ góc ban đầu, đi theo ngược chiều kim đồng hồ. Để hiểu rõ những phần này
chúng ta hãy cùng xem1 ví dụ sau:
g.drawArc(10, 10, 100, 100, 0, 150);
Đoạn mã trên yêu cầu vẽ một cung,cung này được bao bởi một hình chữ nhật
có tọa độ điểm trái trên là (10,10),chiều rộng và chiều dài là 100, góc bắt đầu là 0,
góc kết thúc là 150

Hình 6:

Vẽ cung


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

Một số các phương thức dùng để vẽ cung:
void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle).
.II.4.2.3.3 Vẽ hình chữ nhật

Cũng giống như cung thì hình chữ nhật có thể chỉđược vẽ viền bao quanh hoặc tô
bên trong. Bên cạnh đó bạn có thể vẽ hình chữ nhật đó có 4 góc là tròn hoặc là vuông.
Dưới đây là một số phương thức để vẽ hình chữ nhật:
void drawRect(int x, int y, int width, int height)
void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
void fillRect(int x, int y, int width, int height)
void fillRoundRect(int x, int y, int width, int height, int arcWidth, int
arcHeight)
Khi vẽ hình chữ nhật có 4 góc là tròn thì bạn phải xác định đường kính theo chiều
ngang (arcWidth) và đường kính theo chiều dọc (arcHeight). Những tham số này được
định nghĩa độ sắc nét của cung theo mỗi chiều. Giá trị càng lớn thể hiện một cung
tăng dần, ngược lại là một đường cong hẹp.
.II.4.2.3.4 Điểm neo
Để xác định tọa độ x, y của chuỗi ký tựđược hiển thị, thì điểm neo cho phép
chúng ta chỉ ra vị trí muốn đặt tọa độ (x,y) trên hình chữ nhật bao quang chuối ký tự.

Hình 7:

Điểm neo(1)

Có 6 điểm neo được định nghĩa trước, 3 theo chiều dọc và 3 theo chiều thẳng
đứng. Khi xác định điểm neo để vẽ chuỗi (các điểm neo thường được sử dụng
thành từng cặp), ta phải chọn một điểm hoành độ và một điểm tung độ. Các điểm


Ứng dụng công nghệ J2ME, xây dựng phần mềm trò chơi xếp gạch trên điện thoại di động

neo được định nghĩa như ở dưới đây
- Chiều ngang
LEFT (Bên trái)

HCENTER (Chính giữa của chiều ngang) RIGHT (Bên phải)
- Chiều dọc
TOP (Ở trên)
BASELINE (Đường thẳng cơ sở) BOTTOM (Ở dưới)
Khi sử dụng điểm neo thì cần phải chỉ ra tọa độ x, y của hình chữ nhật bao
quanh.
Ví dụ:
g.drawString("developerWorks", 0, 0 , Graphics.TOP | Graphics.LEFT);
Hình dưới đây mô tả kết quả của hàm trên

Hình 8:

Điểm neo(2)

Bằng cách thay đổi điểm neo, chúng ta có thể thay đổi vị trí hiển thị của chuỗi
ký tự trên thiết bị di động. Ví dụ tiếp theo chúng ta sẽ minh họa tiếp khi thay đổi
điểm neo thì vị trí của chuỗi ký tự cũng thay đổi theo:

Hình 9:

Điểm neo(3)


×