Hiện nay, công việc lập trình trên thiết bị di động ngày càng phát triển. Nhiều công nghệ đã ra đời giúp chúng ta hiện thực hóa ý tưởng của mình lên trên các thiết bị nhỏ gọn ấy. Ngoài công nghệ .NET Compact Framework của Microsoft, có thể nói công nghệ Java nói chung và J2ME (Java 2 Micro Edition) nói riêng do Sun phát triển đã tạo nên một bước ngoặt lớn cho nhân loại. Giờ đây, chúng ta có thể làm hầu như mọi thứ trên chiếc di động bé nhỏ của mình. Và giải trí cũng là một trong những nhu cầu thiết yếu mà chiếc điện thoại di động có thể đáp ứng cho người sử dụng. Cùng với sự phát triển của công nghệ game trên máy tính thì game trên di động cũng ngày một phát triển.Hơn nữa, game cũng chính là một thành phần cơ bản nhất cho mọi chiếc điện thoại di động. Do vậy, để tạo nên các game hay và hấp dẫn thì việc lập trình game trên di động là một công việc tất yếu. Nhận thức được điều đó, nhóm chúng em đã phát triển một game nho nhỏmang tên “Game STAR WARS”.
Cấu trúc của bài báo cáo gồm có 5 phần chính :
- Chương 1 – Giới thiệu.
- Chương 2 – Phân tích.
- Chương 3 –Thiết kế.
- Chương 4 – Cài đặt và thử nghiệm.
- Kết luận. Nêu lên những vấn đề, kết quả đã đạt được và hướng phát triển trong tương lai.
22 trang |
Chia sẻ: ngtr9097 | Lượt xem: 2390 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Báo cáo Lập trình nhúng căn bản- Game star wars, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA : CÔNG NGHỆ PHẦN MỀM
BÁO CÁO MÔN HỌC : LẬP TRÌNH NHÚNG CĂN BẢN
GAME STAR WARS
Giảng viên hướng dẫn : ThS. PHAN NGUYỆT MINH
Sinh viên thực hiện : LÊ ĐỨC TIÊN, LƯƠNG HỮU MINH
Lớp : CNPM04
Khóa : 04
TP. Hồ Chí Minh, tháng 12 năm 2011
MỞ ĐẦU
Hiện nay, công việc lập trình trên thiết bị di động ngày càng phát triển. Nhiều công nghệ đã ra đời giúp chúng ta hiện thực hóa ý tưởng của mình lên trên các thiết bị nhỏ gọn ấy. Ngoài công nghệ .NET Compact Framework của Microsoft, có thể nói công nghệ Java nói chung và J2ME (Java 2 Micro Edition) nói riêng do Sun phát triển đã tạo nên một bước ngoặt lớn cho nhân loại. Giờ đây, chúng ta có thể làm hầu như mọi thứ trên chiếc di động bé nhỏ của mình. Và giải trí cũng là một trong những nhu cầu thiết yếu mà chiếc điện thoại di động có thể đáp ứng cho người sử dụng. Cùng với sự phát triển của công nghệ game trên máy tính thì game trên di động cũng ngày một phát triển.Hơn nữa, game cũng chính là một thành phần cơ bản nhất cho mọi chiếc điện thoại di động. Do vậy, để tạo nên các game hay và hấp dẫn thì việc lập trình game trên di động là một công việc tất yếu. Nhận thức được điều đó, nhóm chúng em đã phát triển một game nho nhỏmang tên “Game STAR WARS”.
Cấu trúc của bài báo cáo gồm có 5 phần chính :
Chương 1 – Giới thiệu.
Chương 2 – Phân tích.
Chương 3 –Thiết kế.
Chương 4 – Cài đặt và thử nghiệm.
Kết luận. Nêu lên những vấn đề, kết quả đã đạt được và hướng phát triển trong tương lai.
LỜI CẢM ƠN
Đầu tiên, chúng em xin chân thành cảm ơn côPhan Nguyệt Minh đã truyền đạt cho chúng em những kiến thức quý báu trong môn “Lập trình nhúng căn bản” để chúng em hoàn thành bài báo cáo này.
Chúng em cũng xin gửi lời cảm ơn chân thành đến các thầy cô trong trường ĐH Công Nghệ Thông Tin đã tận tình giúp đỡ chúng em trong thời gian học vừa qua.
Do kiến thức có hạn nên bài làm của chúng em không tránh khỏi nhiều thiếu sót. Chúng em rất mong nhận được sự đóng góp quý báu của các thầy cô.
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
MỤC LỤC
CHƯƠNG 1 – GIỚI THIỆU
Giới thiệu về đề tài
Hiện nay, lập trình game trên di động là một công việc khá khó khăn và vấtvả.Với số lượng code lớn và phức tạp thì đòi hỏi người lập trình phải tập trung cao. Lập trình game trên di động khó khăn hơn lập trình trên PC rất nhiều do đặc tính về phần cứng của chiếc điện thoại thường rất hạn chế như bộ nhớ ít, bộ vi xử lý chậm, … Vì thế, công việc tối ưu code chương trình, cấp phát và thu hồi bộ nhớ hợp lý để cho game có thể chạy tốt trên thiết bị thật luôn là vấn đề được quan tâm hàng đầu.
Phát triển game trên di động là một công việc rất cần thiết trong cuộc sống. Game di động cũng góp phần nào đó làm cho thế giới xung quanh thêm sinh động, giúp cho mọi người giải trí hoặc tìm cảm giác mới mẻ.
Game STAR WARS của nhóm chúng em lấy ý tưởng trong bộ phim cùng tên “Star Wars”và game bắn máy bay. Khi chơi bạn sẽ nhập vai vào chiến binh Jedi lái chiếc phi thuyền của mình chiến đấu với quân xâm lược định thôn tính hành tinh của bạn. Bạn cần phải vượt qua các thử thách và tiêu diệt chỉ huy của địch để hoàn thành nhiệm vụ bảo vệ hành tinh của mình.
Mục tiêu
Mục tiêu của nhóm chúng em là phát triển một ứng dụng đơn giản có thể chạy tốt trên chiếc điện thoại di động. Và ứng dụng game chính là sự lựa chọn của nhóm chúng em.
Với công nghệ J2ME, kiến thức lập trình hướng đối tượng và sự giúp đỡ tận tình của cô, nhóm chúng em đã hoàn thành việc mô phỏng game. Tuy nhiên trong game còn nhiều thiếu sót do thiếu kinh nghiệm thực tiễn nhưng nhóm chúng em đã cố gắng để hoàn thành những ý tưởng cơ bản của game. Hy vọng rằng phiên bản tiếp theo của game có thể bù đắp được những thiếu sót hiện có của nó.
Các chức năng chính
Game này sở hữu gần như toàn bộ các yêu cầu, chức năng cơ bản mà một game bắn máy bay đơn giản cần phải có. Các chức năng chính của game có thể được tóm lược như sau :
Tàu mình sẽ có các đại lượng như áo giáp, máu, điểm số, đạn, … và các chức năng như là tăng tốc, bắn đạn, ăn các vật thể để tăng áo giáp, máu, điểm số, …
Tàu địch sẽ có các đại lượng như tốc độ di chuyển, tốc độ bắn, … và các chức năng như là bắn, ẩn nắp, tăng tốc đạn, …
Chỉ huy địch sở hữu toàn bộ các chức năng như tàu thường nhưng có thêm các đại lượng máu, điểm thưởng, … và các chứ năng như chuyển hướng di chuyển, tạo ra các cục đá, …
Để làm cho game thêm sinh động thì không thể thiếu các vật thể lạ xuất hiện như những cục máu, cục đá, …
CHƯƠNG 2 – PHÂN TÍCH
+ Về khái niệm, việc phân tích yêu cầu bao gồm ba loại hoạt động sau:
Làm rõ yêu cầu (Eliciting requirements): giao tiếp với khách hàng và người sử dụng để xác định các yêu cầu của họ.
Xem xét yêu cầu (Analyzing requirements): xác định xem các yêu cầu được đặt ra có ở tình trạng không rõ ràng, không hoàn chỉnh, đa nghĩa, hoặc mâu thuẫn hay không, và giải quyết các vấn đề đó.
Làm tài liệu yêu cầu (Recording requirements): các yêu cầu có thể được ghi lại theo nhiều hình thức, chẳng hạn các tài liệu ngôn ngữ tự nhiên, các tình huống sử dụng (use case),câu chuyện sử dụng (user story), hoặc các đặc tả tiến trình.
+ Các yêu cầu về game của nhóm chúng em bao gồm :
Game thuộc dòng Molibe Java Games 240x320.
Game chạy tốt trên các dòng điện thoại từ cấp trung bình đến cấp cao.
Game có đầy đủ các chức năng cơ bản của một game bắn máy báy thông thường.
Game có hỗ trợ người chơi các mức chơi khác nhau (dễ, trung bình, khó).
Game có hỗ trợ phần điều chỉnh âm lượng cho người chơi.
Game có khả năng lưu lại 5 mức điểm số cao nhất của người chơi.
Game có phần liên hệ với người lập trình khi gặp trục trặc về kỹ thuật.
Game có khả năng quay lui khi game over.
…
CHƯƠNG 3 – THIẾT KẾ
Cấu trúc chương trình
Cấu trúc của Game
Cấu trúc của Menu
Cấu trúc của MainMidlet
Cấu trúc của GameManager
Giới thiệu các lớp
Lớp “BackgroundLayer” : được kế thừa từ lớp TiledLayer, dùng để load hình nền cho màn hình level và màn hình game chính.
Các thuộc tính chính : không có.
Các phương thức chính :
BackgroundLayer(): constructor dùng để khởi tạo đối tượng mới.
Lớp “Boss” : được kế thừa từ lớp Sprite, dùng để tạo ra đối tượng tàu chỉ huy địch.
Các thuộc tính chính : active (sống/chết) ; xSpeed, ySpeed (tốc độ x, y) ; fireTick (thời gian cuối cùng khi nó xuất hiện) ; shootRate (khoảng thời gian giữa 2 lần bắn) ; RATE (tỷ lệ frame trên giây), …
Các phương thức chính :
Boss() : constructor dùng để khởi tạo đối tượng mới.
destroy() : hủy đối tượng.
fire() : trả về true nếu khoảng thời gian giữa 2 lần bắn là hợp lý, ngược lại là false.
advance() : vẽ lại đối tượng này lên màn hình tùy theo biến thời gian.
Lớp “Bullet” : được kế thừa từ lớp Sprite, dùng để tạo ra đối tượng viên đạn.
Các thuộc tính chính : active, ySpeed, RATE, …
Các phương thức chính :destroy(), advance() như lớp Boss. Ngoài ra còn có các phương thức sau :
Bullet() : constructor dùng để khởi tạo đối tượng mới.
shoot() : thể hiện viên đạn lên màn hình.
Lớp “Component” : được kế thừa từ lớp Sprite, dùng để tạo ra các đối tượng như level và warning.
Các thuộc tính chính : active, RATE, …
Các phương thức chính : destroy(), advance() và
Component() : constructor dùng để khởi tạo đối tượng mới.
reAppear() : thể hiện lại đối tượng lên màn hình sau khi ẩn.
Lớp “Enemy” : được kế thừa từ lớp Sprite, dùng để tạo ra đối tượng tàu địch.
Các thuộc tính chính : active, RATE, damage (tính sát thương), score (điểm số sau khi bị nổ), …
Các phương thức chính : destroy(), advance(), fire() và
Enemy() : constructor dùng để khởi tạo đối tượng mới.
reAppear() : thể hiện lại đối tượng lên màn hình sau khi ẩn với tốc độ x, y ngẫu nhiên.
Lớp “Explosion” : được kế thừa từ lớp Sprite, dùng để tạo ra đối tượng tàu nổ (tàu mình, tàu địch và tàu chỉ huy địch).
Các thuộc tính chính : active, RATE, …
Các phương thức chính : destroy(), advance(), reAppear() và
Explosion() : constructor dùng để khởi tạo đối tượng mới.
advanceExplosion () : vẽ lại đối tượng này lên màn hình tùy theo biến thời gian.
advanceSplash() : thể hiện hình ảnh tàu mình bị trúng đạn nhưng chưa hết máu.
Lớp “Item” : được kế thừa từ lớp Sprite, dùng để tạo ra đối tượng vật thể.
Các thuộc tính chính : type (loại vật thể), value (giá trị), …
Các phương thức chính : destroy(), advance(), reAppear() và
Item() : constructor dùng để khởi tạo đối tượng mới.
Lớp “Menu” : được kế thừa từ lớp GameCanvas, dùng để vẽ các hình ảnh menu lên màn hình.
Các thuộc tính chính : options (mảng các lựa chọn trong menu), …
Các phương thức chính : destroy(), advance(), reAppear() và
Menu() : constructor dùng để khởi tạo đối tượng mới.
draw() : vẽ menu ban đầu.
drawNext() : vẽ lại menu khi có sự thay đổi.
keyPressed() : bắt sự kiện bàn phím.
Lớp “Ship” : được kế thừa từ lớp Sprite, dùng để tạo ra đối tượng con tàu.
Các thuộc tính chính : damageTick(thời gian cuối cùng khi con tàu trúng đạn), DAMAGED_RATE (khoảng thời gian giữa 2 lần trùng đạn), …
Các phương thức chính : destroy(), advance(), fire() và
Ship() : constructor dùng để khởi tạo đối tượng mới.
moveLeft(), moveRight(), moveUp(), moveDown() : di chuyển qua trái, phải, lên, xuống.
isDamageable() : là true nếu khoảng thời gian giữa 2 lần trúng đạn là hợp lý, ngược lại là false.
Lớp “SplashScreen” : được kế thừa từ lớp GameCanvas và giao diện Runnable dùng để tạo ra đối tượng màn hình khởi động game.
Các thuộc tính chính : image(hình nền), …
Các phương thức chính :
SplashScreen() : constructor dùng để khởi tạo đối tượng mới.
start() : tạo một thread mới.
paint() : vẽ hình nền.
dismiss() : chuyển qua màn hình Menu.
run() : hàm điều khiển chính.
Lớp “GameScreen” : được kế thừa từ lớp GameCanvas và giao diện Runnable dùng để tạo ra đối tượng màn hình chính của game.
Các thuộc tính chính : tick(biến điều khiển thời gian), delay (khoảng thời gian giữa 2 lần render), …
Các phương thức chính : start(), stop(), run() và
GameScreen() : constructor dùng để khởi tạo đối tượng mới.
render() : vẽ lại màn hình chính của game.
advance() : gọi hàm advance trong lớp GameManager.
Lớp “MainMidlet” : được kế thừa từ lớp MIDlet và giao diện CommandListener dùng để quản lý các đối tượng settings, high scores, … và kết hợp các lớp khác lại với nhau.
Các thuộc tính chính : Menu, SplashScreen, GameScreen, …
Các phương thức chính : startApp(), pauseApp(), destroyApp() và
MainMidlet() : constructor dùng để khởi tạo đối tượng mới.
settingsForm() : khởi tạo Form Settings.
helpForm() : khởi tạo Form Help.
aboutForm() : khởi tạo Form About.
Lớp “GameManager” : được kế thừa từ lớp LayerManager, dùng để kết hợp các đối tượng ở các lớp khác lại với nhau.
Các thuộc tính chính : các biến tạo hình ảnh, các mảng Enemy, các mảng Explosion, các mảng Item, …
Các phương thức chính :
GameManager() : constructor dùng để khởi tạo đối tượng mới.
paint() : vẽ lại các đối tượng lên màn hình.
advance() : xử lý sự kiện bàn phím, va chạm và load sprite.
createUpdateEnemy() : tạo và cập nhật lại vị trí tàu địch.
createBoss(), updateBoss() : tạo và cập nhật lại vị trí tàu chỉ huy địch.
Các hàm va chạm.
Các hàm nổ tàu.
freeMemory() : giải phóng bộ nhớ.
Giao diện
Màn hình khởi động (Splash screen)
Hình 3.1. Màn hình khởi động
Có nhiều cách để tạo ramàn hình Splash screen.Chúng ta có thể dùng lớp Canvas kết hợp với Timer hay dùng lớp GameCanvas kết hợp với Thread, …Chức năng của màn hình Splash Screen này chủ yếu dùng để trang trí cho game. Trong các doanh nghiệp, màn hình splash Screen này chủ yếu dùng để quảng bá cho nhà phát triển. Màn hình này có thời gian chờ vào khoảng 3000ms. Nhưng bạn cũng có thể bỏ qua màn hình bằng cách nhấn phím bất kì trên bàn phím điện thoại hoặc dùng tay chạm vào màn hình (đối với màn hình cảm ứng).
Màn hình Menu
Hình 3.2. Màn hình Menu
Game Menu là phần bắt buộc trong quá trình làm Game. Một Game Menu thể hiện đầy đủ các chức năng có trong Game. Ở đây chúng em thiết kế Menu gồm có: New Game, Settings, High Scores, Help, About và Exit.
New Game: Vào game mới.
Hình 3.3. Màn hình Level trước khi vào game
Hình 3.4. Màn hình game chính
Settings: Tại đây, người chơi có thể cài đặt âm thanh hay mức chơi chotrò chơi. có thể tăng giảm âm lượng sao cho phù hợp với từng người và có thể chọn mức chơi Easy, Normal hay Hard.
Hình 3.5. Màn hình Settings
High Scores: Hiển thị điểm của 5 người chơi có điểm số cao nhất.
Hình 3.6. Màn hình High Scores
Help: Cũng giống như tên của nó, nếu người không không biết cách chơi thì có thể xem hướng dẫn chơi tại đây.
Hình 3.7. Màn hình Help
About:Hiển thị thông tin của nhóm lập trình, địa chỉ liên hệ. Người sử dụng có bất cứ lỗi phát sinh nào trong game có thể liên hệ tại đây.
Hình 3.8. Màn hình About
Exit: Ở phần này, nếu người chơi chọn thì sẽ hiện ra câu hỏi để hỏi người chơi có muốn thoát game hay không.
Hình 3.9. Màn hình Exit
CHƯƠNG 4 – CÀI ĐẶT VÀ THỬ NGHIỆM
Môi trường : J2ME
Ngôn ngữ cài đặt : Java.
Thử nghiệm giả lập : Điện thoại DefaultCldcMsaPhone2, DefaultFxPhone1 trong Netbeans ; DefaultColorPhone trong Wireless Toolkit.
Thiết bị thật : Nokia N78.
Đánh giá kết quả : Giả lập chạy tốt, thiết bị thật chạy tốt khi không có âm thanh, chạy hơi giật khi load âm thanh lên.
KẾT LUẬN
Chúng em đã điểm qua các phần cơ bản nhất của việc lập trình game trên di động bằng công nghệ J2ME thông qua một ví dụ game cụ thể. Qua đó, chúng ta cũng phần nào thấy được tầm quan trọng của game nói chung và game trên di động nói riêng. Game của nhóm chúng em chỉ dừng lại ở mức độ đơn giản, nhằm giúp cho người chơi có một cái nhìn tổng quát về nó.
Hướng phát triển tiếp theo của chúng em không chỉ dừng lại ở đây, nếu có thể chúng em sẽ tiếp tục nghiên cứu sâu hơn nữa về lĩnh vực này.
Để phát triển hơn nữa, hy vọng rằng phiên bản sau của game có thêm các đặc tính như là :
Sửa các lỗi hiện có.
Tăng số level lên.
Có khả năng kết nối mạng để cập nhật các phiên bản trên mạng về.
…
DANH MỤC TÀI LIỆU THAM KHẢO
[1] Jason Lam, “Settings and High Scores”, J2ME & Gaming.
[2] Martin J.Wells, “The J2ME API”, J2METM Game Programming,Course PTR – Course Technology.
[3] John W.Muchow (2001), “Low-Level User Interface”, Core J2ME, Prentice Hall PTR.