Dự án xây dựng game có ý tưởng bắt nguồn từ trò chơi xe tăng (tank) cổ điển
TANK WAR Báo cáo tập lớn Môn Kỹ thuật lập trình hướng đối tựợng • Người viết Bùi Kim Dung Bùi Anh Dũng Lê Quý Dương Nguyễn Trọng Hiếu Phạm Tuấn Long Lê Anh Tú • Nhóm, Lớp Nhóm 11, Lớp Công nghệ phần mềm K51 • Người hướng dẫn TS. Nguyễn Khanh Văn • Tổng số trang 23 • Ngày & địa điểm viết Hà Nội, Ngày 19 tháng 11 năm 2009 Email: kimdung.bkit@gmail.com Nhóm trưởng, Email: griever_zero_1912@yahoo.com.vn Email: mail@lequyduong.net Email: tronghieubk@gmail.com Email: longpt214@gmail.com Email: hover.dienanh@gmail.com Bộ môn CNPM, Viện CNTT & TT, ĐH BKHN, Email: vannk@it-hut.edu.vn Mục lục Tổng quan 1.1 Nội dung dự án . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Phạm vi dự án . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Công nghệ sử dụng . . . . . . . . . . . . . . . . . . . . . . . . 1 1 Nội dung công việc 2.1 Chi tiết công việc . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Cách thức tổ chức hoạt động nhóm . . . . . . . . . . . . . . . 2 Đặc tả phần mềm 3.1 Các modules phần mềm . . . . . . . . . . . . 3.1.1 Các module nhóm xây dựng . . . . . . 3.1.2 Các modules kế thừa từ nguồn có 3.1.3 Use case Diagram . . . . . . . . . . . . . . 3.2 Sequence Diagram . . . . . . . . . . . . . . . . . 3.3 Package Diagram . . . . . . . . . . . . . . . . . . 3.4 Class Diagram . . . . . . . . . . . . . . . . . . . . 3.5 Danh sách pattern sử dụng . . . . . . . . . 3.5.1 Factory method . . . . . . . . . . . . . . . 3.5.2 Observer . . . . . . . . . . . . . . . . . . . 3.5.3 Proxy . . . . . . . . . . . . . . . . . . . . 3.5.4 Singleton . . . . . . . . . . . . . . . . . . 3.5.5 Strategy . . . . . . . . . . . . . . . . . . . 3.5.6 State . . . . . . . . . . . . . . . . . . . . . 3.6 Thuật toán điều khiển xe tăng tự động (AI) . . . 3.6.1 Giải pháp . . . . . . . . . . . . . 3.6.2 Giải pháp đề xuất . . . . . . . . . . . . . . 3.7 Giao diện đồ họa phác thảo . . . . . . . . . . . . . . . . . . sẵn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 10 11 12 12 13 14 14 15 15 16 16 16 18 Các kết đạt 19 4.1 Giao diện trò chơi . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.2 Gameplay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Kết luận hướng phát triển 21 5.1 Ưu điểm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 5.2 Hạn chế . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 5.3 Hướng phát triển . . . . . . . . . . . . . . . . . . . . . . . . . 21 A Một số APIs Jgame 3.3 23 B Code repository 23 TỔNG QUAN Tổng quan 1.1 Nội dung dự án Dự án xây dựng Game có ý tưởng bắt nguồn từ trò chơi Xe Tăng (Tank) cổ điển chúng em bổ sung thêm nhiều tính mới, vũ khí khiến trở nên đẹp hơn, hấp dẫn kịch tính hơn. Đặc biệt, luật chơi thay đổi, thay bắn nổ xe tăng đối phương để qua phiên này, người chơi phải phá hủy thành lũy đối phương. 1.2 Phạm vi dự án Mục đích thực dự án học tập nên chúng em cắt giảm nhiều tiểu tiết game để giữ cho game có cấu trúc rõ ràng số lượng hạn chế loại khí tài, đồ, bonus, . mà thay vào đó, chúng em chứng minh tính khả thi mở rộng chương trình với tính đó. Một số phần phân tích thiết kế chi tiết (specification) không thực vào mức ưu tiên chúng tiến độ thực dự án. Phần mềm mặc định chạy phiên JRE 6+ hệ điều hành Ubuntu 9.10+ windows XP SP3, ram tương thích, chip tương thích, card đồ họa tương thích. 1.3 Công nghệ sử dụng • Ngôn ngữ sử dụng: JAVA • IDE sử dụng: NETBEAN 6.5 + ECLIPSE 3.3 • Framework: JRE 6+ • Engine: JGame 3.3 • Thư viện đồ họa: Thu thập, chọn lọc từ mạng Internet Jgame 3.3 trình bày chi tiết phần sau tài liệu. Nguồn: http://www.13thmonkey.org/ boris/jgame/ NỘI DUNG CÔNG VIỆC 2.1 Nội dung công việc Chi tiết công việc TT Nhiệm vụ Mô tả Khảo sát hệ thống Thời gian 10/9/2009 15/9/2009 Khảo sát phạm vi hệ thống Khảo sát chi tiết hệ thống Dự trù cho dự án (định lượng thời gian khó khăn gặp phải) Review Phân tích Phân tích chức Review Thiết kế All 100% LongPT, HiếuNT, TúLA Dũng BA, Hiếu NT, Dương LQ 100% All 100.00% 100% Dũng BA, Dung BK, Dương LQ Dũng BA, Dung BK, Dương LQ All 100% Long PT, Hiếu NT TúLA 100% Dung BK, Long PT Dũng BA, Dung BK, Dương LQ All 100.00% 22/09/2009 05/10/2009 Thiết kế tổng thể Thiết kế giao diện Thiết kế multimedia Thiết kế module (chi tiết) Review Trạng thái 100% 15/9/2009 22/9/2009 Phân tích yêu cầu Thành viên 100% 100% 100.00% 100.00% 100% 100.00% 100.00% 2.2 Cách thức tổ chức hoạt động nhóm TT Nhiệm vụ Mô tả NỘI DUNG CÔNG VIỆC Thời gian Cài đặt 6/10/2009 30/10/2009 Cài đặt giao diện Cài đặt business Ghép code Kiểm thử Chuyển giao 2.2 Long PT, Dung BA All Dũng BA 90.00% DungBK 100.00% Tú LA, Dương LQ, Hiếu NT 100.00% 6/10/2009 10/11/2009 Viết hướng dẫn sử dụng phần mềm Viết báo cáo Đóng gói & chuyển giao chương trình – Team 1: Dũng BA, Dung BK, Dương LQ – Team 2: Long PT, Hiếu NT, Tú LA 95.00% 100.00% 100.00% 100.00% Dương LQ 100.00% DungBK Long PT 100.00% 100.00% Cách thức tổ chức hoạt động nhóm • Tổ chức nhóm thành teams: Trạng thái 95.00% 31/10/2009 5/11/2009 Danh sách test case (các tình có người dùng chơi game) Thực test case Thành viên ĐẶC TẢ PHẦN MỀM Công việc nhóm chia cho cá nhân cho team dù trường hợp nào, team phải chủ động hỗ trợ đốc thúc thực công việc. • Nhóm họp tuần lần, buổi online skype vào tối thứ buổi offline vào tiết cuối ngày thứ (2 tiết trống). Ngoài ra, nhóm thường xuyên trao đổi khó khăn ý kiến công việc qua email. • Để tiện việc lập trình quản lý revision việc lưu trữ mã nguồn, nhóm đăng kí dự án code.google.com. Địa dự án nhóm là: http://code.google.com/p/tank-war/ Bất tải mã nguồn dự án về, thông qua SVN client. Sau hoàn thành việc kiểm thử viết tài liệu hướng dẫn sử dụng, nhóm tổ chức offline để đánh giá hiệu làm việc chất lượng phần mềm, so sánh với mục tiêu đặt bắt đầu dự án. 3.1 Đặc tả phần mềm Các modules phần mềm 3.1 Các modules phần mềm 3.1.1 ĐẶC TẢ PHẦN MỀM Các module nhóm xây dựng • Game Engine: Module có vai trò điều phối hoạt động Game, sinh tank địch, sinh bonus, tính điểm, xử lí va chạm, hiển thị hình ảnh, điều khiển tank địch, . Module bao gồm số module nhỏ sau: – Game: Module quản lý hoạt động nói trên. – Keysettings: Quản lý phím điều khiển người chơi (phím di chuyển, bắn, đổi súng .) – State: Quản lý diễn biến state game (lúc menu chính, lúc vào chơi, lúc hoàn thành nhiệm vụ, lúc thất bại .) Module nằm gói com.battletank.engine • Factory: Module có nhiệm vụ sinh quản lý vài tập hợp đối tượng cần thiết cho Game tập hợp xe tank, tập hợp bonus, tập hợp phần địa hình (terrain) .Module bao gồm module nhỏ: – TankFactory: để sinh tank địch tank phe ta, dựa vào thông số đọc từ map, số lượng xe tank, số lượng chủng loại tank. – TerrainFactory: sinh địa hình (gạch, đá, rừng, biển, nhà .) – BonusFactory: sinh bonus Module nằm gói com.battletank.factory • Object: Module bao gồm đối tượng hiển thị đồ, bao gồm: – Tank: Các chủng loại tank. – Bullet: Các chủng loại đạn. – BonusImage: Các chủng loại bonus. – Terrain: Địa hình. Module nằm gói com.battletank.object 3.1 Các modules phần mềm ĐẶC TẢ PHẦN MỀM • Core: Module bao gồm số class thiết yếu cho game. Một số phần module: – AI: Trí tuệ nhân tạo, điều khiển việc di chuyển tank địch. Hiện game hỗ trợ cấp độ Normal với việc di chuyển tank địch ngẫu nhiên cấp medium xe tank địch có khả quan sát xung quanh để tiêu diệt xe tăng người chơi. Cấp độ Hard giai đoạn phát triển, cấp độ này, tank địch truy tìm tank nhà phe ta để tiêu diệt. Chức tìm nhà hoàn thành. – Map: Bản đồ, chứa thông tin đồ, quản lý đối tượng đồ. – Gun: Một số chủng loại súng tank. – Bonuses: Thực thi tác dụng chủng loại bonus. Module nằm gói com.battletank.core 3.1.2 Các modules kế thừa từ nguồn có sẵn • Resource: Module chứa thư viện hình ảnh & âm cần thiết cho chương trình, bao gồm: – Các hiệu ứng chơi (đạn, cháy nổ, .) – Các hình vẽ hình (background, button .) – Địa hình (textures) – Các loại xe tank, máy bay .(units) Module thu thập từ nhiều nguồn Internet, có số thành phần tự thiết kế. Nó nằm gói resources • JLayer: Module dùng để thao tác với định dạng MP3 Java. Đây dự án mã nguồn mở, đăng kí giấy phép LGPL (GNU Lesser General Public License). Hiện gi JLayer phiên 1.0.1, bao gồm chức sau: – Converter: Chuyển đổi định dạng MP3 định dạng khác – Decoder: Decode MP3 – Player: Dùng để phát MP3 3.1 Các modules phần mềm ĐẶC TẢ PHẦN MỀM Website: http://www.javazoom.net/javalayer/javalayer.html Module nằm gói javazoom.jl Trong Game sử dụng chức Player JLayer. • JGame: Module chủ yếu hỗ trợ phần front-end, phần backend Game. JGame engine đồ họa dùng để hỗ trợ việc lập trình game 2D, máy tính thiết bị di động. Đây dự án mã nguồn mở, đăng kí giấy phép BSD. Hiện JGame phiên 3.3, hỗ trợ chức sau: Frontend: – Hiển thị hình ảnh: Nạp hiển thị hình ảnh từ file PNG JPG. – Phát âm thanh: Nạp phát nhạc từ file WAV. – Hiệu ứng animation: Nạp hiển thị hiệu ứng animation từ file PNG JPG – Vẽ: Cung cấp số API để vẽ hình (đường thẳng, hình tròn, đa giác, hình chữ nhật). – Hiển thị đối tượng: Hiển thị đối tượng dựa vào tọa độ (x,y) đối tượng. Backend: – Kiểm tra va chạm: Kiểm tra va chạm đối tượng. – Thiết lập Game: Thiết lập cấu hình cho Game (độ phân giải, kích thước tile .) – JGame cung cấp chế lập trình hướng kiện thay lập trình đa luồng. Một số kiện chính: Sự kiện toàn chương trình: ∗ initGame: Sự kiện lúc bắt đầu khởi tạo game. Có thể nạp hình ảnh, khởi tạo thông số cho game, số FPS (Frame Per Second) thời điểm ∗ paintFrame: Cơ chế lập trình game phổ biến chia cảnh game thành nhiều frame, chạy frame này. Sự kiện paintFrame gọi frame cần vẽ lại (bước sang frame mới). Có thể thực việc vẽ hình đây. 3.1 Các modules phần mềm ĐẶC TẢ PHẦN MỀM ∗ doFrame: Giống paintFrame, doFrame dùng để điều khiển hoạt động game. Sự kiện đối tượng: ∗ move: Sự kiện gọi đối tượng cần cập nhật vị trí. ∗ hit: Sự kiện gọi có va chạm với đối tượng khác. Website: http://www.13thmonkey.org/ boris/jgame/ Module nằm gói jgame 3.1.3 Use case Diagram Chỉ có actor player, có thao tác hiệu chỉnh tùy chọn điều khiển xe tăng chơi 3.2 Sequence Diagram 3.2 ĐẶC TẢ PHẦN MỀM Sequence Diagram 3.3 Package Diagram 3.3 ĐẶC TẢ PHẦN MỀM Package Diagram 10 3.4 Class Diagram 3.4 ĐẶC TẢ PHẦN MỀM Class Diagram Giải thích • Hầu hết đối tượng kế thừa từ IObject. IObject cung cấp giao diện chung để quản lý đối tượng thời điểm định: – begin: Lúc đối tượng bắt đầu kích hoạt – onEnterFrame: Lúc frame hiển thị. – end: Lúc đối tượng kết thúc (ví dụ tank bị bắn nổ) • IArmor, IGun, IBonus, IDisplayObject, interface kế thừa trực tiếp từ IObject. Chúng nằm module Core. – IArmor: Áo giáp đối tượng. Nhằm chống đỡ sức công phá đạn. – IGun: Súng tank. Mỗi loại súng tương ứng với hay nhiều loại đạn, súng định số lượng đạn, thời gian nạp đạn. – IMoveBehaviour AI tank địch, nằm module Core. 11 3.5 Danh sách pattern sử dụng ĐẶC TẢ PHẦN MỀM – IDisplayObject interface chung cho đối tượng hiển thị lên hình. Những đối tượng bao gồm: Tank, Bullet, Terrain. Chúng nằm module Object. Các đối tượng thuộc module kế thừa từ JGObject, class chuẩn JGame cho đối tượng cần hiển thị. • Để sinh đối tượng trên, cần Factory, bao gồm TankFactory, TerrainFactory, BonusFactory. Chúng nằm module Factory. Các implementation interface phải singleton. Nhằm đảm bảo factory loại sinh ra. • Việc quản lý diễn biến game, khởi tạo game đối tượng cần thiết, cần class Game class khác module GameEngine. (Xem lại phần 3.1 Các module chương trình) 3.5 3.5.1 Danh sách pattern sử dụng Factory method 12 3.5 Danh sách pattern sử dụng ĐẶC TẢ PHẦN MỀM Factory method pattern sử dụng với mục đích chính: • Che giấu cách thức khởi tạo đối tượng. Khi muốn khởi tạo thêm đối tượng mới, ta cần sử dụng method mà Factory cung cấp, không quan tâm cách thức tạo đối tượng nào. • Quản lý mối ràng buộc đối tượng thuộc tập hợp. Ví dụ, với đồ đó, số lượng xe tăng địch tối phép có tối đa 20 chiếc, có 10 loại A, loại B, loại C. Tất việc Factory quản lý. Factory method pattern áp dụng module Factory, bao gồm TankFactory, TerrainFactory, BonusFactory (xem hình vẽ). 3.5.2 Observer Observer pattern sử dụng với mục đích: • Đồng thời kích hoạt tất components (buttons) xảy kiện xác định (nhấp chuột). • Khi người dùng nhấp chuột, với Observer pattern, ta không cần phải quan tâm có components (buttons), vị trí components. 13 3.5 Danh sách pattern sử dụng 3.5.3 ĐẶC TẢ PHẦN MỀM Proxy Proxy pattern sử dụng với mục đích: Tạo đối tượng trung gian (BonusImage), quản lý việc truy cập đối tượng thật (Bonus). BonusImage hình ảnh bonus hiển thị sân chơi, nhằm giúp người chơi nhận biết xuất loại bonus. Bonus đối tượng thực thi tác dụng chủng loại bonus (tăng tốc, .). Khi xe tăng “ăn” BonusImage đối tượng thật Bonus kích hoạt thực thi tác dụng mình. 3.5.4 Singleton Singleton sử dụng với mục đích: Đảm bảo với số class có đối tượng sinh ra. Với Factory class, rõ ràng có Factory sinh ra, với class Game, có hai đối tượng Game chạy chương trình. 14 3.5 Danh sách pattern sử dụng 3.5.5 ĐẶC TẢ PHẦN MỀM Strategy Strategy pattern sử dụng với mục đích: Giúp cho AI tank địch trở nên linh hoạt, dễ dàng thay đổi, nâng cấp. Với strategy pattern, phần AI tách riêng khỏi đối tượng tank, dễ dàng sửa đổi, thay đổi cách linh hoạt phụ thuộc vào mức độ khó chơi. 3.5.6 State State pattern sử dụng với mục đích: Giúp thay đổi diễn biến Game cách linh hoạt phụ thuộc vào trạng thái Game có nhiều trạng thái khác (ví dụ hình chính, lúc chơi game, lúc hoàn thành nhiệm vụ, lúc thất bại .). Với trạng thái, Game hoạt động theo diễn tiến khác nhau. Sử dụng state pattern, ta thay đổi diễn biến game cách linh hoạt game bước sang trạng thái mới. 15 3.6 Thuật toán điều khiển xe tăng tự động (AI)3 ĐẶC TẢ PHẦN MỀM 3.6 3.6.1 Thuật toán điều khiển xe tăng tự động (AI) Giải pháp Các loại MoveBehaviour (AI di chuyển cho tank): • NormalMoveBehaviour: di chuyển theo hướng ngẫu nhiên, yêu cầu tank phải độ dài định quay đầu. • GoodMoveBehaviour: phát triển từ NormalMoveBehaviour, nhiên Player tank hàng với tank địch (ngang hay dọc) tank địch quay bắn Player tank lập tức. • HardMoveBehaviour: tank địch tự tìm đường đến phá thành mình. Trong trình kiểm nghiệm chương trình, nhận thấy chế độ NormalMoveBehaviour chế độ đơn giản dành cho người bắt đầu chơi. Với GoodMoveBehaviour HardMoveBehaviour tank địch khó chịu nhiều, đặc biệt GoodMoveBehaviour bắn tank địch theo cách chơi thông thường trước đây. HardMoveBehaviour phù hợp với tank chạy nhanh với map mà tank địch xuất gần thành Player. Ngoài độ khó game tăng lên số lượng tank xuất đồ thời điểm. 3.6.2 Giải pháp đề xuất Thực với AI có game có chế độ chơi khó đòi hỏi người chơi phải có kinh nghiệm chiến thắng được. Do đó, việc đề xuất AI không nhằm vào việc tăng độ khó game mà tạo phương thức chơi hấp dẫn hơn, gần thực tế hơn. Hiện chúng em có số giải pháp đề xuất sau: • Xe tăng địch đuổi theo xe tăng người chơi: Ta đánh số ô (tile) đồ. Bản đồ thời có mặc định 25x25 ô. Xây dựng mảng a[i,j] đó, a[i,j]=1 ô i,j kề (tức trực tiếp đến nhau), a[i,j]=0 ô không kề đá nước (các địa hình phá vỡ được). Từ mảng a[i,j] có, ta xây dựng mảng d[i,j] khoảng cách ngắn ô i j. Việc xây dựng mảng d thuật toán Floyd . Việc cần http://en.wikipedia.org/wiki/Floyd-Warshall_ algorithm 16 3.6 Thuật toán điều khiển xe tăng tự động (AI)3 ĐẶC TẢ PHẦN MỀM làm lần, xây dựng lúc bắt đầu vào chơi tính toán sau tạo map (bởi nhà sản xuất người sử dụng). Khi có mảng d[i,j], xe tăng địch chọn sang trái, phải, thẳng, quay lại tùy xem hướng làm giảm khoảng cách (d) mục tiêu (player tank thành lũy người chơi). • Chế độ radar truyền tin xe tăng địch. Vẫn sử dụng thuật toán xe tăng địch nhận thức tồn player tank player tank cách khoảng đó. Khi xe tăng địch phát player tank, lan truyền thông tin cho xe tăng đồng đội bán kính cho phép. Thông tin lan truyền số xe tăng điều động để bao vây tiêu diệt player tank • Chế độ kính tiềm vọng xe tăng địch: Xe tăng địch radar nên truy vết player tank, thay vào đó, có kính tiềm vọng tức có khả quan sát hướng. Điều có nghĩa xe tăng địch nhận thấy tồn player tank chúng hàng cột không bị chắn tầm nhìn địa hình (cây, đá, gạch). Khi phát thông tin, chúng lan truyền thông tin cho tổ chức vây bắt địa điểm xung quanh nơi xuất player tank. • Chế độ đa mục tiêu xe tăng địch. Chế độ đặc biệt hữu hiệu trường hợp game có nhiều người chơi. Xe tăng địch có nhiều mục tiêu theo dõi việc chọn lựa đối tượng để theo làm cho game trở nên thú vị thử thách hơn! 17 3.7 Giao diện đồ họa phác thảo 3.7 ĐẶC TẢ PHẦN MỀM Giao diện đồ họa phác thảo 18 CÁC KẾT QUẢ ĐẠT ĐƯỢC 4.1 Các kết đạt Giao diện trò chơi 19 4.2 Gameplay CÁC KẾT QUẢ ĐẠT ĐƯỢC • Trò chơi bố trí theo màn, với đồ xác định sẵn người chơi đưa vào dạng matrix . • Các đồ định nghĩa file XML (eXtensible Markup Language ) chuẩn . • Menu Menu cho phép chọn chức : – Xác định chế độ người chơi / hai người chơi – Các tùy chọn thiết lập – Sơ lược nhóm phát triển – Chức thoát khỏi trò chơi (Exit ) • Chế độ người chơi (One player) xác định sau : – Người chơi vai trò người điều khiển xe tank, có nhiệm vụ bảo vệ thành công thành , tiêu diệt xe tank địch. – Xe tank trúng đạn bị tiêu diệt tùy theo cấp độ bonus item mà xe tank người chơi thu đồ , xe tank người chơi có số lần chết xác định , bị chết nhiều, người chơi thua chơi kết thúc ( Game over ) – Người chơi tăng điểm tiền tương ứng với số xe tank địch tiêu diệt • Chế độ hai người chơi (Two player): chưa hỗ trợ • Credits: Trang thông tin nhóm phát triển trò chơi 4.2 Gameplay • Trò chơi điều khiển keyboard, với phím mũi tên để di chuyển, phím Ctrl để bắn. • Địa hình bố trí bao gồm nhiều loại vật liệu khác nhau, đá, gạch, rừng , nước, với loại xe tăng đa dạng độ mạnh yếu khác 20 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN • Các loại địa hình dẫn đến trở ngại khác cho xe tăng, xuyên qua rừng, xuyên qua gạch, đá, nước. Tường gạch bị xe tăng bắn sụp. Kết luận hướng phát triển 5.1 Ưu điểm • Trò chơi đạt chức game tank, có độ tùy biến cao thuận tiện cho người chơi đưa vào đồ khác nhau. Việc bổ sung chủng loại tank, đạn, bonus dễ dàng. Game cho phép điều chỉnh chế độ chơi dễ hay khó làm thêm tăng sức hấp dẫn. • Trò chơi phát triển Java, nên có ưu điểm cao tính đa , chạy hệ điều hành khác 5.2 Hạn chế • Chưa có Shop mua đạn. • Chưa phát triển khả xe tăng địch đuổi theo xe tăng người chơi (ở chế độ khó game) 5.3 Hướng phát triển Các hạn chế phía chủ yếu thời gian chưa cho phép nên cải thiện dễ dàng • Tiếp tục phát triển công cụ cho phép người chơi tạo đồ GUI (thay tạo file XML nay) • Phát triển phiên phù hợp dành cho điện thoại, chạy HDH Symbian ( Mobile Tank War) • Đăng ký PPA Launchpad, nhằm giúp người sử dụng Ubuntu cài đặt game cách dễ dàng. • Tiếp tục bổ sung tính mới, chế độ Highscore, bổ sung loại tank, đạn . 21 5.3 Hướng phát triển KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN • Đăng ký giấy phép cho Game, cụ thể GPL v3. Phát triển theo hướng mã nguồn mở. 22 B CODE REPOSITORY A Một số APIs Jgame 3.3 Tên API moveObjects() checkCollision() checkBGCollision() defineMedia() setCanvasSettings() removeObjects() drawRect() drawImage() playAudio() B Chức Thông báo cho tất object cần thay đổi tọa độ Kiểm tra va chạm đối tượng Kiểm tra va chạm đối tượng với background Định nghĩa & nạp liệu hình ảnh, âm thanh, hiệu ứng animation Chỉnh thuộc tính hình chơi (độ phân giải, ) Xóa object khỏi game Hàm đồ họa để vẽ hình chữ nhật Hàm đồ họa để hiển thị file ảnh Phát nhạc WAV Code repository Như nói trên, nhóm sử dụng Google Code để quản lý dự án & lưu trữ mã nguồn, sử dụng Version Control System Subversion (SVN). Địa code repository http://tank-war.googlecode.com/svn/trunk/ Để checkout mã nguồn máy sử dụng SVN client: TortoiseSVN Windows RabbitVCS Linux. 23 [...]... hiện có thì game đã có chế độ chơi rất khó đòi hỏi người chơi phải rất có kinh nghiệm mới chiến thắng được Do đó, việc đề xuất các AI mới không nhằm vào việc tăng độ khó của game mà là tạo ra một phương thức chơi mới hấp dẫn hơn, gần thực tế hơn Hiện chúng em có một số giải pháp đề xuất như sau: • Xe tăng địch đuổi theo xe tăng người chơi: Ta có thể đánh số các ô (tile) trên bản đồ Bản đồ hiện thời có. .. algorithm 16 3.6 Thuật toán điều khiển xe tăng tự động (AI)3 ĐẶC TẢ PHẦN MỀM làm một lần, có thể xây dựng lúc bắt đầu vào màn chơi hoặc có thể tính toán ngay sau khi tạo map (bởi nhà sản xuất hoặc người sử dụng) Khi có mảng d[i,j], xe tăng địch sẽ chọn đi sang trái, phải, thẳng, quay lại tùy xem hướng nào làm giảm khoảng cách (d) giữa nó và mục tiêu (player tank hoặc là thành lũy của người chơi) • Chế độ radar... Bản đồ hiện thời có mặc định là 25x25 ô Xây dựng mảng a[i,j] ở đó, a[i,j]=1 nếu 2 ô i,j kề nhau (tức là có thể trực tiếp đến nhau), a[i,j]=0 nếu 2 ô không kề nhau hoặc 1 trong 2 là đá hoặc nước (các địa hình không thể phá vỡ được) Từ mảng a[i,j] đang có, ta xây dựng mảng d[i,j] chính là khoảng cách ngắn nhất giữa 2 ô i và j Việc xây dựng mảng d có thể bằng thuật toán Floyd 9 Việc này chỉ cần 9 http://en.wikipedia.org/wiki/Floyd-Warshall_... người chơi) • Chế độ radar và truyền tin của xe tăng địch Vẫn sử dụng thuật toán trên nhưng xe tăng địch chỉ có thể nhận thức sự tồn tại của player tank khi player tank cách nó trong một khoảng nào đó Khi một xe tăng địch phát hiện ra player tank, nó có thể lan truyền thông tin cho xe tăng đồng đội trong bán kính cho phép Thông tin được lan truyền và một số xe tăng sẽ được điều động để bao vây tiêu diệt... Chức năng thoát khỏi trò chơi (Exit ) • Chế độ một người chơi (One player) được xác định như sau : – Người chơi trong vai trò là người điều khiển chiếc xe tank, có nhiệm vụ bảo vệ thành của mình và tấn công thành , tiêu diệt các xe tank địch – Xe tank trúng đạn sẽ bị tiêu diệt tùy theo cấp độ và các bonus item mà xe tank của người chơi thu được trên bản đồ , xe tank của người chơi có số lần chết xác... loại xe tăng đa dạng và độ mạnh yếu khác nhau 20 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN • Các loại địa hình cũng dẫn đến trở ngại khác nhau cho xe tăng, như có thể xuyên qua rừng, nhưng không thể xuyên qua gạch, đá, nước Tường gạch có thể bị xe tăng bắn sụp 5 Kết luận và hướng phát triển 5.1 Ưu điểm • Trò chơi đã đạt được các chức năng cơ bản của một game tank, có độ tùy biến cao và thuận tiện cho người chơi. .. chủng loại tank, đạn, bonus là khá dễ dàng Game cũng cho phép điều chỉnh chế độ chơi dễ hay khó làm thêm tăng sức hấp dẫn • Trò chơi được phát triển bằng Java, nên có ưu điểm cao về tính đa nền , chạy được trên các hệ điều hành khác nhau 5.2 Hạn chế • Chưa có Shop mua đạn • Chưa phát triển khả năng xe tăng địch đuổi theo xe tăng của người chơi (ở chế độ rất khó của game) 5.3 Hướng phát triển Các hạn chế... tank của người chơi có số lần chết xác định , nếu bị chết quá nhiều, người chơi sẽ thua và màn chơi kết thúc ( Game over ) – Người chơi sẽ được tăng điểm và tiền tương ứng với số xe tank địch tiêu diệt được • Chế độ hai người chơi (Two player): chưa hỗ trợ • Credits: Trang thông tin về nhóm phát triển trò chơi 4.2 Gameplay • Trò chơi được điều khiển bằng keyboard, với các phím mũi tên để di chuyển, phím... lan truyền và một số xe tăng sẽ được điều động để bao vây tiêu diệt player tank • Chế độ kính tiềm vọng của xe tăng địch: Xe tăng địch không có radar nên không thể truy vết player tank, thay vào đó, nó có kính tiềm vọng tức là có khả năng quan sát cả 4 hướng Điều đó có nghĩa là xe tăng địch có thể nhận thấy sự tồn tại của player tank khi chúng ở trên cùng một hàng hoặc cột và không bị chắn tầm nhìn... khó của màn chơi 3.5.6 State State pattern được sử dụng với mục đích: Giúp thay đổi diễn biến của Game một cách linh hoạt phụ thuộc vào từng trạng thái Game có rất nhiều trạng thái khác nhau (ví dụ ở màn hình chính, lúc chơi game, lúc hoàn thành nhiệm vụ, lúc thất bại ) Với một trạng thái, Game sẽ hoạt động theo diễn tiến khác nhau Sử dụng state pattern, ta có thể thay đổi diễn biến của game một cách . Một số APIs cơ bản của Jgame 3.3 23 B Code repository 23 1 TỔNG QUAN 1 Tổng quan 1.1 Nội dung dự án Dự án xây dựng Game có ý tưởng bắt nguồn từ trò chơi Xe Tăng (Tank) cổ điển nhưng chúng em sẽ. Hiện chúng em có một số giải pháp đề xuất như sau: • Xe tăng địch đuổi theo xe tăng người chơi: Ta có thể đánh số các ô (tile) trên bản đồ. Bản đồ hiện thời có mặc định là 25x25 ô. Xây dựng mảng. PHẦN MỀM làm một lần, có thể xây dựng lúc bắt đầu vào màn chơi hoặc có thể tính toán ngay sau khi tạo map (bởi nhà sản xuất hoặc người sử dụng). Khi có mảng d[i,j], xe tăng địch sẽ chọn đi sang