Lập trình ứng dụng cho điện thoại di động trên nền tảng J2ME
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
KHOA ĐIỆN TỬ VIỄN THÔNG
BÁO CÁO PROJECT MÔN LẬP TRÌNH NÂNG CAO
ĐỀ TÀI : LẬP TRÌNH ỨNG DỤNG CHO ĐIỆN THOẠI DI ĐỘNG
TRÊN NỀN TẢNG J2ME
Giảng viên hướng dẫn : Thầy Vũ Song Tùng
Sinh viên thực hiện : Nguyễn Văn Hiến
HÀ NỘI
Trang 2BÁO CÁO PROJECT MÔN LẬP TRÌNH NÂNG CAO
ĐỀ TÀI : LẬP TRÌNH ỨNG DỤNG CHO ĐIỆN THOẠI DI ĐỘNG
TRÊN NỀN TẢNG J2ME
Giảng viên hướng dẫn : Thầy Vũ Song Tùng Sinh viên thực hiện : Nguyễn Văn Hiến
Trang 3MỤC LỤC
1 Giới thiệu đề tài ……… 4
2 Tổng quan về J2ME ……… 5
3 Xây dựng BrickBreaker ……… 10
4 Phát triển đề tài ……… 15
5 Tài liệu tham khảo ……… 16
Trang 41 GIỚI THIỆU ĐỀ TÀI
Đề tài lập trình game BrickBreaker trên điện thoại di động được xuất phát từ yêu cầu của bài tập lớn môn Lập Trình Nâng Cao Đó là phát triển một chương trình trên điện thoại di động trên nền J2ME Với kiến thức căn bản về Java , em đã xây dựng một chương trình game đơn giản với đồ họa , gameplay và âm thanh Chương trình được chạy
mô phỏng trên Java Wireless Toolkit Version 2.5.1 và chạy thử trên điện thoại di động
BrickBreaker là một game 2D đơn giản với phong cách chơi
BreakOut truyền thống Người chơi sẽ điều khiển pad hứng và điều chỉnh hướng bay của của bóng để bóng chạm vào tất cả các viên gạch phía trên Bóng sẽ chuyển động theo quy tắc phản xạ Người chơi sẽ thắng khi tất cả các viên gạch bị bóng chạm vào , và sẽ thua khi để bóng chạm vào biên dưới Trò chơi có thể được tạm dừng và có thể chọn hai chế độ chơi : tự động hoặc có người chơi
Em xin chân thành cảm ơn thầy Vũ Song Tùng đã hướng dẫn em hoàn thành bài tập này
Trang 52 TỔNG QUAN VỀ J2ME
Kiến trúc J2ME:
A Giới thiệu các thành phần trong nền tảng J2ME
1 Đị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 Qua đây ta thấy khẩu hiệu
“Write Once, Run Everywhere” của Java đã không còn đúng nữa, nhưng
ta cũng phải đánh giá cao sự nổ lực của Sun trong việc tạo ra một môi trường phần mềm chung cho vô số chủng loại thiết bị di động có trên thị
Trang 6trường Hiện nay Sun đã đưa ra 2 dạng Configuration.
2 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
3 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, đố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ả 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
Trang 7Bảng dưới là sự so sánh các thông số kỹ thuật của CDC và CLDC
B Đị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 Chúng ta sẽ điểm qua các profile tiêu biểu:
1 Mobile Information Device Profile (MIDP)ban : 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)
2 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
3 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
Bạn đọc có thể hiểu rõ hơn về vị trí của các profile này trong kiến trúc J2ME theo hình bên dưới
Trang 8C Sơ lược về MIDP
Định nghĩa: Đâ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 máy PDA Tuy nhiên MIDP không phải là cây đũa thần cho mọi lập trình viên vì như chúng ta đã biết, MIDP được thiết kế cho các máy di động có cấu hình rất thấp Trong phần sau tôi sẽ liệt kê qua các tính năng mà MIDP cung cấp và những giới hạn của nó
Những chức năng MIDP không thể làm được:
1 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ó
2 Bộ nạp class (Class Loader)
3 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
4 Không hỗ trợ JNI
5 Hỗ trợ hạn chế thao tác bắt lỗi
6 Phần lớn các thư viện API cho Swing và AWT không thể sử dụng được trong MIDP
7 Không hỗ trợ các tính năng quản lý file và thư mục: Đây có thể làm bạn ngạc nhiên nhưng 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à bạn 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
Trang 9Những chức năng MIDP cung cấp:
1 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
2 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
3 Hỗ trợ Form và các giao diện người dùng
4 Hỗ trợ Timer và Alert
5 Cung cấp tính năng Record Management System (RMS) cho việc lưu trữ dữ liệu
Trang 103 XÂY DỰNG BRICKBREAKER
A Xây dựng code
Chu trình một game hoạt động trên nền J2ME :
Start : Khởi tạo game
Pause : Tạm dừng game
Stop : Kết thúc game
Trang 11Giản đồ hoạt động của BrickBreaker có thể mô tả rõ ràng hơn như sau :
Từ giản đồ ta xây dựng các lớp quan trọng nhất trong chương trình là:
• MainCanvas: Khởi tạo các màn hình của trò chơi, và điều khiển các bản cập nhật,
vẽ, và chuyển tiếp giữa các màn hình.
• BrickBreakerScreen: Các lớp có chứa logic của trò chơi
• Ball: Điều khiển chuyển động của quả bóng, va chạm, phát hiện và vẽ
• Brick: Đại diện của một viên gạch duy nhất
• BrickField: Đại diện của tất cả những viên gạch trong trò chơi.
• Paddle: Đại diện pad; lưu ý rằng lớp này dựa trên một PaddleController để thực sự kiểm soát pad
• PaddleController: Giao diện được thực hiện bởi ComputerPaddleController và HumanPaddleController để cho phép hoặc là một con người hay một máy tính cầm để kiểm soát pad
• MenuScreen: Thực hiện game menu
Trang 12Ví dụ về code của lớp khởi tạo màn hình
Việc khởi tạo màn hình trò chơi là một bước rất quan trọng trong việc xây dựng toàn bộ trò chơi Việc này có thể thực hiện bằng cách xây dựng một lớp GameScreen class
Collapse
package com.bornander.games.utils;
import javax.microedition.lcdui.Graphics;
public abstract class GameScreen {
protected Background background;
protected int width;
protected int height;
public GameScreen(int width, int height) {
this.width = width;
this.height = height;
this.background = null;
}
public void setBackground(Background background) {
this.background = background;
}
protected void paintBackground(Graphics graphics) {
if (background != null)
background.paint(graphics);
}
public abstract void activated(GameScreen previousScreen);
public abstract void paint(Graphics graphics);
public abstract int doUpdate();
public abstract void keyPressed(int keyCode, int gameAction); public abstract void keyReleased(int keyCode, int gameAction); }
B Mô phỏng và chạy thử trên điện thoại di động
Việc mô phỏng trò chơi trên Java Wireless Toolkit khá dễ dàng Sau khi
Trang 13Các bước chạy mô phỏng
Trang 154 PHÁT TRIỂN ĐỀ TÀI
Với cùng phong cách BreakOut , trò chơi có thể được phát triển theo nhiều hướng khác nhau , như nâng cấp đồ họa , hoặc chơi với nhiều level hơn nữa
Với sự đa dạng trong cách phát triển game trên nền J2ME , thì việc xây dựng các game sẽ trở nên phong phú hơn nữa
Mục tiêu tiếp theo của em sẽ là nghiên cứu và xây dựng một game 3D trên điện thoại di động
Trang 165 TÀI LIỆU THAM KHẢO
1 J2ME All – Ngô Nhất Phương
2 Java 3d Programming – O’Reilly
3 Mobile Game Programming for Beginner – Fredrik Bornander
4 Programming 2D Game in J2ME – Hoàng Tuấn