Tải bản đầy đủ (.pdf) (21 trang)

lập trình nhúng căn bản - game star wars

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 (347.87 KB, 21 trang )

ĐẠ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
Trang 6
CHƯƠ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ầ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.
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ố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ó.
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 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 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 đá, …
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 8
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.
• …
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 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
3.1.3. Cấu trúc của MainMidlet
3.1.4. Cấu trúc của GameManager
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 10
3.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.1.1. Các thuộc tính chính : không có.
3.2.1.2. Các phương thức chính :
• BackgroundLayer(): constructor dùng để khởi tạo đối tượng
mới.

3.2.2. Lớp “Boss” : được kế thừa từ lớp Sprite, dùng để tạo ra đối tượng tàu chỉ
huy địch.
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ời gian.
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.
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 11
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.
• reAppear() : thể hiện lại đối tượng lên màn hình sau khi ẩn.
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ới
tố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ù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.
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.
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 12
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à
• 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.
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.
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 13
• 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()

• 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 mảng Explosion, các mảng Item, …
3.2.13.2. 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.
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 14
• 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ớ.
3.3. Giao diện
3.3.1. 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).
3.3.2. Màn hình Menu
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 15
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
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 16
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.
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 17
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.

GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 18
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
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 19
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.
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 20
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ề.
• …
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh
Trang 21
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”, J2ME
TM
Game Programming,Course PTR – Course
Technology.
[3] John W.Muchow (2001), “Low-Level User Interface”, Core J2ME, Prentice Hall PTR.
GVHD : ThS. Phan Nguyệt Minh SVTH : Lê Đức Tiên, Lương Hữu Minh

×