updatePhysicstime,deltaTime : Hàm dùng để update lại vị trí và trạng thái của tất cả đối tượng sau môi frame.. time : xác định thông qua đôê khó của game, dùng để thay đổi trạng thái của
Trang 1CAO HỌC KHÓA 22
Báo cáo đồ án môn Phát triển ứng dụng trên Android
ĐỀ TÀI
Xây dựng game bắn súng đơn giản
Sinh viên thực hiện
Nguyễn Phan Minh Phúc – 1011047
Trang 2MỤC LỤC
Trang 3Tổng quan về môi trường Android
Android là hệ điều hành điện thoại di động mở nguồn mở miễn phí do Google phát triển dựa trên nền tảng của Linux Bất kỳ một hãng sản xuất phần cứng nào cũng đều có thể tự do
sử dụng hệ điều hành Android cho thiết bị của mình, miễn là các thiết bị ấy đáp ứng được các tiêu chuẩn cơ bản do Google đặt ra (có cảm ứng chạm, GPS, 3G, ) (Xem thêm: Android Compatibility Definition Document )
Các nhà sản xuất có thể tự do thay đổi phiên bản Android trên máy của mình một cách
tự do mà không cần phải xin phép hay trả bất kì khoản phí nào nhưng phải đảm bảo tính tương thích ngược (backward compatibility) của phiên bản chế riêng đó
Android là nền tảng cho thiết bị di động bao gồm một hệ điều hành, midware và một số ứng dụng chủ đạo Bộ công cụ Android SDK cung cấp các công cụ và bộ thư viên các hàm API cần thiết để phát triển ứng dụng cho nền tảng Android sử dụng ngôn ngữ lập trình java
Những tính năng mà nền tảng Android hổ trợ:
Application framework: Cho phép tái sử dụng và thay thế các thành phần sẳn có của
Android
Dalvik virtual macine: Máy ảo java được tối ưu hóa cho thiết bị di động.
Intergrated browser: Trình duyệt web tích hợp được xây dựng dựa trên WebKit engine
Optimized graphics: Hổ trợ bộ thư viện 2D và 3D dự vào đặc tả OpenGL ES 1.0 SQLite: DBMS dùng để lưu trữ dữ liệu có cấu trúc.
Trang 4NÔÔI DUNG BÁO CÁO
Trang 51 Các kỹ thuâÔt sử dụng
- Xây dựng giao diêên các activity menu:
o Sử dụng cái layout cơ bản :
LinearLayout : sử dụng trong hầu hết các activity
TableLayout : sử dụng trong activity settingScreen
ScrollView : sử dụng trong activity settingScreen
o Sử dụng các FormWidget như :
Button
ToggleButton
TextView
- Xây dựng giao diêên game:
o SurfaceView để tạo context
o Bitmap để hiển thị hình ảnh
o Thread để tạo các chuyển đôêng
- Xây dựng hình ảnh đồ họa:
o Adobe Photoshop
o Microsoft Paint
2 Các thuâÔt toán sử dụng
activity
i Nén đối tượng gameplay vào bundle thông qua lêênh :
bS.putSerializable("GamePlay",gameplay);
ii Sử dụng hàm :
startActivity(i) để chuyển đối tượng và startActivityForResult(i,1) để chuyển và nhâên giá trị trả về, trong trường hơp này đối tượng gởi và trả về đều là gameplay
Trang 62.2 Tạo chuyển đôêng của nhiều đối tượng:
Quá trình chính bao gồm 3 hàm được gọi trong thread :
iii onDraw() : Vẽ ra tất cả các đối tượng tại thời điểm đó, bao gồm:
1 Vẽ các loại đối tượng vụ nô
2 Vẽ các đối tượng hình học (ếch, rắn, cua)
3 Vẽ đối tượng viên đạn
4 Vẽ máu của đối tượng ếch
5 Vẽ thanh menu phía dưới cùng các button ( sound, pause, back)
iv updatePhysics(time,deltaTime) : Hàm dùng để update lại vị trí và trạng thái của tất cả đối tượng sau môi frame Với 2 đối sô
1 time : xác định thông qua đôê khó của game, dùng để thay đổi trạng thái của đối tượng con rắn
2 deltaTime : 1 đối số quan trọng, dùng để lưu trữ thời gian của 1 frame để xác định tiếp vị trí của các đối tượng mà không cần quan tâm đến tốc đôê của thiết bị
VD: Tốc đôê di chuyển của đối tượng của bạn là 5pixel ( x = x + 5) trong 1 frame(thời gian 1 vòng lăêp while) Vâêy nếu game được chạy trên thiết bị có tốc đôê là 60 frame/second (FPS) thì trong 1s đối tượng sẽ đi được 5*60 = 300 pixel Trong khi đó nếu game được chạy trên thiết bị có tốc đôê la 30FPS thì môi giây đối tượng sẽ chỉ đi được là 5*30 = 150pixel Như vâêy gây ảnh hưởng đến cách game-play rất nhiều Từ đó ta đưa them công thức của deltaTime:
deltaTime = TimeCurrentFrame - TimeLastFrame tức là thời gian của 1 frame của thiết bị đó
khi đó, nếu muốn đối tượng của bạn duy chuyển 50pixel / 1s bạn chỉ cần : x = x + 50*deltaTime Khi đó, cac thiết bị đều di chuyển như nhau, chỉ khác ở chổ, thiết bị có số FPS cao hơn thì hình ảnh sẽ mượt mà hơn
Trang 73 checkShots: Hàm dùng để kiểm tra va chạm và xử lý khi va chạm,có thể chuyển đối tượng hình học thành đối tượng vụ nô ( sau quá trình nô thì sẽ không sử dụng đối tượng đó nửa ), bao gồm :
a Kiểm tra các đối tượng viên đạn và các đối tượng đầu rắn,đuôi rắn, cua và set hp của các đối tượng đó, nếu hp =
0 thì chuyển thành đối tượng vụ nô Măêc nhiên đối tượng viên đạn sẽ chuyển thành đối tượng vụ nô sau khi va chạm
b Kiểm tra giữa đối tượng ếch và đối tượng rắn,cua
ếch đến điểm vừa touch:
Sử dụng thuâêt toán vẽ đường thẳng DDA của C Mô tả thuâêt toán như sau : ta sẽ vẽ từng pixel nối dài từ điểm bắt đầu đến điểm kết thúc Và 1 đường thằng được vẽ sẽ là tổng hợp của tất cả các pixel đã vẽ từ điểm đầu đến điểm cuối Áp dụng vào đồ án, thay vì ta vẽ từng pixel thì ta sẽ cho đối tượng viên đạn di chuyển theo từng pixel và điểm đầu là tọa đôê của đối tượng ếch, điểm cuối sẽ là tọa đôê của điểm ta vừa touch vào
Áp dụng lại thuâêt toán DDA nhưng thay đổi điểm đầu là tọa đọ của đối tượng rắn, điểm cuối là tọa đôê của đối tượng ếch
Trang 82.5 Giới hạn di chuyển của các đối tượng lại là trong màn hình và chế đôê HARD:
Sử dụng thuâêt toán đơn giản
if(x>width || x<0) Vx = -Vx // doi chieu x if(y>height || y<0) Vy = -Vy // doi chieu y
Và thay đổi thêm 1 số thông số để đáp ứng được yêu cầu của đề bài ( như công them chiều rông, chiều dài của đối tượng v.v ) , nhưng k đáng kể, chủ yếu vẫn
là sử dụng thuâêt toán trên
Đối với chế đôê HARD, tức là giới hạn của đối tượng chay ra quá ngoài màn hình,
ta chỉ cần làm như thuâêt toán trên, chỉ cần chỉnh width và height lớn hơn màn hình
Sau khi qua hàm checkShots đã nói ở trên thì đối tương sẽ có thể bị chuyển thành đối tượng vụ nô, khi đó thì trong hàm onDraw sẽ có 1 phần riêng dùng để vẽ các đối tượng vụ nô, và thực chất là thay đổi hình ảnh trong bitmap của các đối tượng vụ nô đó, và hình ảnh về vụ nô đã được cung cấp sẵn trong res/Drawable
Lưu ý là ta có 3 loại vụ nô, và đối với từng loại vụ nô sẽ được các hàm hô trợ để chuyển đổi hình ảnh đúng với các bước của vụ nô thông qua câu lêênh switch để hình ảnh không bị lôên xôên Và khi đã chuyển đổi hết các bước của vụ nô, ta sẽ không sử dụng đối tượng đó nửa
VD về hình ảnh đối với vụ nô của đối tuọng ếch khi va chạm với đối tượng cua hoăêc rắn
Trang 93 Sơ lược qua các Class chính của game
o bitmap để lưu trữ hình ảnh
o 2 class con : Speed và Coordinates
Speed: gồm 2 thuôêc tính x và y để lưu giữ tốc đôê và chiều của đối tượng Coordinates: gồm 2 thuôêc tính x và y để lưu giữ tọa đôê
o Biến Int _typeExplesion: để lưu trữ dạng vụ nô
o Biến Int _explosionStep: để lưu trữ các bươc nô ( cho viêêc gán hình ảnh vụ
nô )
Trang 103.2 Class Crab:kế thừa lại Class GraphicObject và them vào 2 thuôêc tính:
o Biến Int _hpCarb : số máu của đối tượng
o Biến Bool _collision : trạng thái vụ nổ của đối tượng
o Biến Int _hpTail : số máu của 1 đuôi rắn ( rắn bao gồm nhiều đuôi)
o ArrayList<GraphicObject> body : dùng 1 mảng các graphics object làm thân cho đối tượng rắn, số lượng của mảng là số lượng đuôi của rắn
o Move : di chuyển cả đối tượng rắn ( bao gồm cả mảng body)
o getHead : lấy ra GraphicObject ở vị trí đầu tiên của mảng body ( có thể hiểu
là đầu rắn )
o Draw : vẽ cả đối tượng rắn ( cả mảng body)
Kế thừa Thread, dùng để tạo chuyển đôêng cho game Bao gồm:
o Biến bool _run: chỉ trạng thái hoạt đôêng của thread
o Biến bool _pause: chỉ trạng thái pause của thread
o Biến float _deltaTime: lưu thời gian giữa 1 frame
o Hàm run: tạo 1 vòng lăêp vô hạn ( dừng khi run = false) để update và vẽ game canvas
Trang 113.5 Class Panel:
Cass chính, điều khiển tất cả các hoạt đôêng của game, khởi tạo tất cả các class chính có lien quan trong game và các phương thức để game hoạt đôêng, bao gồm:
o Constuctor : khởi taọ và truyền giá trị cho các đối tượng ở các lớp khác
o Hàm onDraw : vẽ tất cả các đối tượng hình học ( GraphicObjects ) với hình ảnh và tọa đôê hiêên tại được lưu trong môi đối tượng
o Hàm UpdatePhysics : Hàm dùng để update lại vị trí và trạng thái của tất cả đối tượng sau môi frame
o checkShots: Hàm dùng để kiểm tra va chạm( thông qua hàm checkcollison )
và xử lý khi va chạm
o điều khiển các sự kiêên ontouch và onkey để update các đối tượng hình học
Trang 124 Các giao diêÔn cơ bản và hướng dẫn sử dụng
Menu chính của game
Thông tin về Game Giúp đỡ, hướng dẫn game
Vào game
Tùy chỉnh: máu, số quái
Thoát Chọn độ khó cho game
Trang 13Giao diện SETTING
Trang 14Giao diện chơi game
Sound: On/Off Thoát ra menu Pause/Play game
Quái vật rắn khi bình thường (mắt màu trắng và không có nanh)
Người chơi: sử dụng các
phím DPAD để di chuyển
Máu của người chơi
Quái vật cua
Trang 15Giao diện chơi game
Đạn bắn ra: người chơi nhấp vào màn hình ở điểm muốn bắn
Quái vật chuẩn bị nổi điên: mắt màu đỏ,có nanh và chuẩn bị lao vào người chơi Hiệu ứng đạn nổ khi bắn trúng
Trang 17Giao diện chơi game
WIN LOSE
Trang 19Giao diện HELP GAME PLAY