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
Trang 1ĐẠ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
Trang 2cô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ôngnghệ Java nói chung và J2ME (Java 2 Micro Edition) nói riêng do Sun phát triển đã tạonê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ếtyế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áttriể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áttriể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
Trang 3LỜ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 đạtcho 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 ĐHCô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ô
Trang 5MỤC LỤC
Trang 6CHƯƠNG 1 – GIỚI THIỆU
1.1. 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ầncứ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 chomọ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ạncầ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
1.2. 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ốttrê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úngem
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ìnhcủa cô, nhóm chúng em đã hoàn thành việc mô phỏng game Tuy nhiên trong game cònnhiề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ó
Trang 7Trang 7
1.3. 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 gamebắ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ượcnhư 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ứcnă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ứcnă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ệnnhư những cục máu, cục đá, …
Trang 8CHƯƠ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ẫnhay 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ôngthườ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
Trang 9Trang 9
CHƯƠNG 3 – THIẾT KẾ3.1. Cấu trúc chương trình
3.1.1. Cấu trúc của Game
3.1.2. Cấu trúc của Menu
Trang 10New Game
Exit Resume
Sound:
MainMidlet
SplashScreen Menu
GameScreen
3.1.3. Cấu trúc của MainMidlet
Cấu trúc của GameManager
Trang 11SoundBreakout
Trang 123.2. Giới thiệu các lớp
3.2.1. 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
3.2.2.1. 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),
…
3.2.2.2. 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ờigian
3.2.3. Lớp “Bullet” : được kế thừa từ lớp Sprite, dùng để tạo ra đối tượng viên
đạn
3.2.3.1. Các thuộc tính chính : active, ySpeed, RATE, …
3.2.3.2. 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
3.2.4. 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
3.2.4.1. Các thuộc tính chính : active, RATE, …
3.2.4.2. Các phương thức chính : destroy(), advance() và
• Component() : constructor dùng để khởi tạo đối tượng mới
Trang 13Trang 13
3.2.5. Lớp “Enemy” : được kế thừa từ lớp Sprite, dùng để tạo ra đối tượng tàu
địch
3.2.5.1. 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ổ), …
3.2.5.2. 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ớitốc độ x, y ngẫu nhiên
3.2.6. 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)
3.2.6.1. Các thuộc tính chính : active, RATE, …
3.2.6.2. 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ùytheo biến thời gian
• advanceSplash() : thể hiện hình ảnh tàu mình bị trúng đạnnhưng chưa hết máu
3.2.7. Lớp “Item” : được kế thừa từ lớp Sprite, dùng để tạo ra đối tượng vật thể.
3.2.7.1. Các thuộc tính chính : type (loại vật thể), value (giá trị), …
3.2.7.2. 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
3.2.8. 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
3.2.8.1. Các thuộc tính chính : options (mảng các lựa chọn trong menu),
…
3.2.8.2. 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
3.2.9. Lớp “Ship” : được kế thừa từ lớp Sprite, dùng để tạo ra đối tượng con tàu.
3.2.9.1. 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), …
3.2.9.2. Các phương thức chính : destroy(), advance(), fire() và
Trang 14• Ship() : constructor dùng để khởi tạo đối tượng mới.
• moveLeft(), moveRight(), moveUp(), moveDown() : di chuyểnqua 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
3.2.10. 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
3.2.10.1. Các thuộc tính chính : image(hình nền), …
3.2.10.2. 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
3.2.11. 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
3.2.11.1. 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), …
3.2.11.2. 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
3.2.12. 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
3.2.12.1. Các thuộc tính chính : Menu, SplashScreen, GameScreen, …
3.2.12.2. 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
3.2.13. 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
3.2.13.1. Các thuộc tính chính : các biến tạo hình ảnh, các mảng Enemy, các
Trang 15Trang 15
• 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ó thời gian chờ vào khoảng 3000ms Nhưng bạn cũng có thể bỏ qua màn hình bằngcá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 (đốivới màn hình cảm ứng)
3.3.2. Màn hình Menu
Trang 16Hì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ó: NewGame, 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
Trang 17Splash Screen Menu Start Game End Game
Trang 17
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
Trang 19Trang 19
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
Trang 20CHƯƠ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, DefaultFxPhone1trong 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
Trang 21Trang 21
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 độngbằng công nghệ J2ME thông qua một ví dụ game cụ thể Qua đó, chúng ta cũng phầnnà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 Gamecủ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ộtcá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ínhnhư 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ề
• …
Trang 22DANH 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”, J2ME TM Game Programming,Course PTR – Course
Technology.
[3] John W.Muchow (2001), “Low-Level User Interface”, Core J2ME, Prentice Hall PTR.