1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

26 576 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 796,99 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

Báo cáo bài 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 1 Bùi Anh Dũng 2

Lê Quý Dương 3 Nguyễn Trọng Hiếu4

Phạm Tuấn Long 5 Lê Anh Tú 6

• Ngày & địa điểm viết

Hà Nội, Ngày 19 tháng 11 năm 2009

Trang 2

Mục lục

1.1 Nội dung dự án 1

1.2 Phạm vi dự án 1

1.3 Công nghệ sử dụng 1

2 Nội dung công việc 2 2.1 Chi tiết công việc 2

2.2 Cách thức tổ chức hoạt động nhóm 3

3 Đặc tả phần mềm 4 3.1 Các modules của phần mềm 4

3.1.1 Các module do nhóm xây dựng 5

3.1.2 Các modules được kế thừa từ các nguồn có sẵn 6

3.1.3 Use case Diagram 8

3.2 Sequence Diagram 9

3.3 Package Diagram 10

3.4 Class Diagram 11

3.5 Danh sách các pattern đã sử dụng 12

3.5.1 Factory method 12

3.5.2 Observer 13

3.5.3 Proxy 14

3.5.4 Singleton 14

3.5.5 Strategy 15

3.5.6 State 15

3.6 Thuật toán điều khiển xe tăng tự động (AI) 16

3.6.1 Giải pháp hiện tại 16

3.6.2 Giải pháp đề xuất 16

3.7 Giao diện đồ họa phác thảo 18

4 Các kết quả đạt được 19 4.1 Giao diện trò chơi 19

4.2 Gameplay 20

5 Kết luận và hướng phát triển 21 5.1 Ưu điểm 21

5.2 Hạn chế 21

Trang 3

A Một số APIs cơ bản của Jgame 3.3 23

Trang 4

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ẽ bổ sung thêm nhiều tính năng mới, vũ khí mớikhiến nó trở nên đẹp hơn, hấp dẫn hơn và kịch tính hơn Đặc biệt, luật chơiđược thay đổi, thay vì bắn nổ xe tăng đối phương để qua bài thì trong phiênbản mới này, người chơi phải phá hủy thành lũy của đối phương

1.2 Phạm vi dự án

Mục đích thực hiện dự án là học tập nên chúng em sẽ cắt giảm nhiều tiểutiết của game để giữ cho game có cấu trúc rõ ràng như số lượng hạn chế cácloại khí tài, bản đồ, bonus, mà thay vào đó, chúng em sẽ chứng minh tínhkhả thi khi mở rộng chương trình với các tính năng đó

Một số phần trong bản phân tích thiết kế chi tiết (specification) có thểkhông được thực hiện căn cứ vào mức ưu tiên của chúng và tiến độ thực hiện

dự án

Phần mềm được mặc định sẽ chạy trên phiên bản mới nhất của JRE 6+trên hệ điều hành Ubuntu 9.10+ hoặc windows XP SP3, ram tương thích,chip tương thích, card đồ họa tương thích

Trang 5

2 Nội dung công việc

2.1 Chi tiết công việc

TT Nhiệm vụ Mô tả Thời gian Thành

Dũng BA,Hiếu NT,Dương LQ

100%

2 Phân tích 15/9/2009

22/9/2009

-100%

Phân tích yêucầu

Dũng BA,Dung BK,Dương LQ

100%

Phân tích chứcnăng Dũng BA,Dung BK,

-100.00%

Thiết kế tổngthể Long PT,Hiếu NT 100%Thiết kế giao

diện

TúLA 100%

Thiết kế media Dung BK,Long PT 100.00%Thiết kế module

multi-(chi tiết)

Dũng BA,Dung BK,

100.00%2

Trang 6

2.2 Cách thức tổ chức hoạt động nhóm 2 NỘI DUNG CÔNG VIỆC

TT Nhiệm vụ Mô tả Thời gian Thành

viên Trạng thái

30/10/2009

-95.00%

Cài đặt giao diện Long PT,

Dung BA 90.00%Cài đặt business All 95.00%Ghép code Dũng BA 100.00%

5 Kiểm thử 31/10/2009

5/11/2009

-100.00%

Danh sách testcase (các tìnhhuống có thể cókhi người dùngchơi game)

DungBK 100.00%

Thực hiện testcase

Tú LA,Dương LQ,Hiếu NT

100.00%

6 Chuyển

giao

6/10/2009-

10/11/2009

100.00%

Viết hướng dẫn

sử dụng phầnmềm

Dương LQ 100.00%

Viết báo cáo DungBK 100.00%Đóng gói &

chuyển giaochương trình

Long PT 100.00%

2.2 Cách thức tổ chức hoạt động nhóm

• Tổ chức nhóm thành 2 teams:

– Team 1: Dũng BA, Dung BK, Dương LQ

– Team 2: Long PT, Hiếu NT, Tú LA

Trang 7

Công việc của nhóm sẽ được chia cho các cá nhân hoặc cho cả teamnhưng dù trong trường hợp nào, các team sẽ phải chủ động hỗ trợ đốcthúc nhau thực hiện công việc.

• Nhóm họp 1 tuần 2 lần, 1 buổi online bằng skype vào tối thứ 7 và mộtbuổi offline vào 2 tiết cuối ngày thứ 5 (2 tiết trống) Ngoài ra, nhómvẫn thường xuyên trao đổi khó khăn cũng như ý kiến về công việc củanhau qua email

• Để tiện trong việc lập trình và quản lý các revision và việc lưu trữ mãnguồn, nhóm đã đăng kí dự án trên code.google.com Địa chỉ dự án củanhóm là: http://code.google.com/p/tank-war/

Bất cứ ai cũng có thể tải mã nguồn của dự án về, thông qua các SVNclient Sau khi hoàn thành việc kiểm thử và viết tài liệu hướng dẫn sửdụng, nhóm sẽ tổ chức offline để đánh giá hiệu quả làm việc cũng nhưchất lượng của phần mềm, so sánh với mục tiêu đặt ra khi bắt đầu dựán

3 Đặc tả phần mềm

3.1 Các modules của phần mềm

Trang 8

3.1 Các modules của phần mềm 3 ĐẶC TẢ PHẦN MỀM

3.1.1 Các module do nhóm xây dựng

• Game Engine: Module này có vai trò điều phối hoạt động của Game,như 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 này bao gồm một số module nhỏnhư sau:

– Game: Module chính quản lý các hoạt động nói trên

– Keysettings: Quản lý phím điều khiển của người chơi (phím dichuyển, bắn, đổi súng )

– State: Quản lý diễn biến các state của 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ày nằm trong gói com.battletank.engine

• Factory: Module này có nhiệm vụ sinh và quản lý một vài tập hợp đốitượng cần thiết cho Game như tập hợp các xe tank, tập hợp các bonus,tập hợp các phần địa hình (terrain) Module này bao gồm các modulenhỏ:

– TankFactory: để sinh tank địch cũng như tank phe ta, dựa vào cácthông số đọc từ map, như số lượng xe tank, số lượng từng chủngloại tank

– TerrainFactory: sinh địa hình (gạch, đá, rừng, biển, nhà )– BonusFactory: sinh bonus

Module này nằm trong gói com.battletank.factory

• Object: Module này bao gồm các đối tượng được hiển thị trên bản đồ,bao gồm:

– Tank: Các chủng loại tank

Trang 9

• Core: Module bao gồm một số class thiết yếu cho game Một số phầnchính của module:

– AI: Trí tuệ nhân tạo, điều khiển việc di chuyển của tank địch.Hiện giờ game hỗ trợ cấp độ Normal với việc di chuyển của tankđịch là ngẫu nhiên và cấp medium khi xe tank địch có khả năngquan sát xung quanh để tiêu diệt xe tăng của người chơi Cấp độHard đang trong giai đoạn phát triển, ở cấp độ này, tank địch cóthể truy tìm tank hoặc nhà của phe ta để tiêu diệt Chức năngtìm nhà đã hoàn thành

– Map: Bản đồ, chứa thông tin về bản đồ, quản lý các đối tượngtrên bản đồ

– Gun: Một số chủng loại súng của tank

– Bonuses: Thực thi tác dụng của các chủng loại bonus

Module này nằm trong gói com.battletank.core

3.1.2 Các modules được kế thừa từ các nguồn có sẵn

• Resource: Module này chứa thư viện hình ảnh & âm thanh cần thiếtcho chương trình, bao gồm:

– Các hiệu ứng khi chơi (đạn, cháy nổ, )

– Các hình vẽ được hiện trên màn hình (background, button )– Địa hình (textures)

– Các loại xe tank, máy bay (units) Module này được thu thập từnhiều nguồn trên Internet, và có một số thành phần tự thiết kế

Nó này nằm trong gói resources

• JLayer: Module dùng để thao tác với định dạng MP3 trên Java Đây làmột dự án mã nguồn mở, được đăng kí giấy phép LGPL (GNU LesserGeneral Public License) Hiện gi JLayer đã ra phiên bản 1.0.1, bao gồmcác chức năng sau:

– Converter: Chuyển đổi giữa định dạng MP3 và các định dạng khác– Decoder: Decode MP3

– Player: Dùng để phát các bài MP3

Trang 10

3.1 Các modules của phần mềm 3 ĐẶC TẢ PHẦN MỀM

Website: http://www.javazoom.net/javalayer/javalayer.html Module nàynằm trong gói javazoom.jl Trong Game sử dụng chức năng Player củaJLayer

• JGame: Module chủ yếu hỗ trợ phần front-end, và một phần backendcủa Game JGame là một engine đồ họa được dùng để hỗ trợ trong việclập trình các game 2D, trên máy tính hoặc các thiết bị di động Đây

là dự án mã nguồn mở, được đăng kí giấy phép BSD Hiện giờ JGame

đã ra phiên bản 3.3, hỗ trợ những chức năng sau:

Frontend:

– Hiển thị hình ảnh: Nạp và hiển thị hình ảnh từ các file PNG vàJPG

– Phát âm thanh: Nạp và phát nhạc từ các file WAV

– Hiệu ứng animation: Nạp và hiển thị hiệu ứng animation từ cácfile PNG và JPG

– Vẽ: Cung cấp một số API cơ bản để vẽ hình (đường thẳng, hìnhtròn, đa giác, hình chữ nhật)

– Hiển thị đối tượng: Hiển thị các đối tượng dựa vào tọa độ (x,y)của đối tượng

Backend:

– Kiểm tra va chạm: Kiểm tra va chạm giữa các đối tượng

– Thiết lập Game: Thiết lập cấu hình cho Game (độ phân giải, kíchthước của mỗi tile )

– JGame cung cấp một cơ chế lập trình hướng sự kiện thay vì lậptrình đa luồng Một số sự kiện chính:

Sự kiện của toàn bộ 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 các thông số cho game, như chỉ số FPS (FramePer Second) tại thời điểm này

∗ paintFrame: Cơ chế lập trình game phổ biến hiện nay là chiacác cảnh game thành nhiều frame, và chạy lần lượt các framenày Sự kiện paintFrame được gọi mỗi khi frame cần được vẽlại (bước sang frame mới) Có thể thực hiện việc vẽ hình ởđây

Trang 11

∗ doFrame: Giống paintFrame, nhưng doFrame được dùng đểđiều khiển hoạt động của game.

Sự kiện của các đối tượng:

∗ move: Sự kiện được gọi khi đối tượng cần cập nhật vị trí

∗ hit: Sự kiện được gọi khi có va chạm với đối tượng khác.Website: http://www.13thmonkey.org/ boris/jgame/

Module này nằm trong gói jgame

3.1.3 Use case Diagram

Chỉ có 1 actor là player, có 2 thao tác chính là hiệu chỉnh tùy chọn và điềukhiển xe tăng trong khi chơi

Trang 12

3.2 Sequence Diagram 3 ĐẶC TẢ PHẦN MỀM

3.2 Sequence Diagram

Trang 13

3.3 Package Diagram

Trang 14

– begin: Lúc đối tượng bắt đầu được kích hoạt

– onEnterFrame: Lúc mỗi frame được hiển thị

– end: Lúc đối tượng kết thúc (ví dụ như khi tank bị bắn nổ)

• IArmor, IGun, IBonus, IDisplayObject, là những interface kế thừa trựctiếp từ IObject Chúng nằm trong module Core

– IArmor: Áo giáp của các đối tượng Nhằm chống đỡ sức công phácủa đạn

– IGun: Súng của tank Mỗi loại súng tương ứng với một hay nhiềuloại đạn, súng quyết định số lượng đạn, thời gian nạp đạn.– IMoveBehaviour là AI của tank địch, cũng nằm trong moduleCore

Trang 15

– IDisplayObject là interface chung cho các đối tượng được hiểnthị lên màn hình Những đối tượng này bao gồm: Tank, Bullet,Terrain Chúng nằm trong module Object.

Các đối tượng thuộc module này đều được kế thừa từ JGObject,đây là một class chuẩn của JGame cho những đối tượng cần hiểnthị

• Để sinh ra các đối tượng trên, cần các Factory, bao gồm TankFactory,TerrainFactory, BonusFactory Chúng nằm trong module Factory.Các implementation của những interface trên đều phải là singleton.Nhằm đảm bảo không có 2 factory cùng loại được sinh ra

• Việc quản lý diễn biến game, khởi tạo game và các đối tượng cần thiết,cần class Game và các class khác trong module GameEngine (Xem lạiphần 3.1 Các module chính của chương trình)

3.5 Danh sách các pattern đã sử dụng

3.5.1 Factory method

Trang 16

3.5 Danh sách các pattern đã sử dụng 3 ĐẶC TẢ PHẦN MỀM

Factory method pattern được sử dụng với 2 mục đích chính:

• Che giấu cách thức khởi tạo các đối tượng Khi muốn khởi tạo thêmđối tượng mới, ta chỉ cần sử dụng các method mà Factory cung cấp,không quan tâm cách thức tạo ra đối tượng đó như thế nào

• Quản lý mối ràng buộc giữa các đối tượng thuộc cùng tập hợp Ví dụ,với 1 bản đồ nào đó, số lượng xe tăng địch chỉ tối được phép có tối đa

20 chiếc, trong đó có 10 chiếc loại A, 5 chiếc loại B, 5 chiếc loại C Tất

cả những việc này sẽ do Factory quản lý

Factory method pattern được áp dụng trong module Factory, bao gồmTankFactory, TerrainFactory, BonusFactory (xem hình vẽ)

3.5.2 Observer

Observer pattern được sử dụng với mục đích:

• Đồng thời kích hoạt tất cả các components (buttons) khi xảy ra một

sự 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ảiquan tâm có bao nhiêu components (buttons), và vị trí của từng com-ponents

Trang 17

3.5.3 Proxy

Proxy pattern được sử dụng với mục đích: Tạo ra một đối tượng trung gian(BonusImage), quản lý việc truy cập đối tượng thật (Bonus) BonusImagechỉ là hình ảnh bonus hiển thị trên sân chơi, nhằm giúp người chơi nhận biếtđược sự xuất hiện của các loại bonus Bonus là đối tượng chính thực thi cáctác dụng của từng chủng loại bonus (tăng tốc, bất tử ) Khi các xe tăng

“ăn” được BonusImage thì đối tượng thật Bonus mới được kích hoạt và thựcthi các tác dụng của mình

3.5.4 Singleton

Singleton được sử dụng với mục đích: Đảm bảo với một số class chỉ có duynhất một đối tượng được sinh ra Với các Factory class, rõ ràng chỉ có thể códuy nhất 1 Factory được sinh ra, hoặc với class Game, không thể có hai đốitượng Game cùng chạy trong một chương trình

Trang 18

3.5 Danh sách các pattern đã sử dụng 3 ĐẶC TẢ PHẦN MỀM3.5.5 Strategy

Strategy pattern được sử dụng với mục đích: Giúp cho AI của các tank địchtrở nên linh hoạt, và có thể dễ dàng thay đổi, nâng cấp Với strategy pattern,phần AI được tách riêng ra khỏi đối tượng tank, do đó sẽ dễ dàng sửa đổi,hoặc có thể thay đổi một cách linh hoạt phụ thuộc vào mức độ khó của mànchơ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 Gamemột cách linh hoạt phụ thuộc vào từng trạng thái Game có rất nhiều trạngthá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ếnkhác nhau Sử dụng state pattern, ta có thể thay đổi diễn biến của game mộtcách linh hoạt mỗi khi game bước sang một trạng thái mới

Trang 19

3.6 Thuật toán điều khiển xe tăng tự động (AI)

3.6.1 Giải pháp hiện tại

Các loại MoveBehaviour (AI di chuyển cho tank):

• NormalMoveBehaviour: di chuyển theo các hướng ngẫu nhiên, yêu cầutank phải đi một độ dài nhất định rồi mới được quay đầu

• GoodMoveBehaviour: phát triển từ NormalMoveBehaviour, tuy nhiênkhi Player tank cùng hàng với tank địch (ngang hay dọc) thì tank địch

sẽ quay ra bắn Player tank ngay lập tức

• HardMoveBehaviour: tank địch tự tìm đường đến phá thành của mình.Trong quá trình kiểm nghiệm chương trình, chúng tôi nhận thấy chế độNormalMoveBehaviour là chế độ đơn giản dành cho người mới bắt đầu chơi.Với GoodMoveBehaviour và HardMoveBehaviour thì tank địch khó chịu hơnrất nhiều, đặc biệt là GoodMoveBehaviour thì không thể bắn lén tank địchtheo các cách chơi thông thường trước đây HardMoveBehaviour thì phù hợpvới những tank chạy nhanh hoặc với những map mà tank địch xuất hiện gầnthành của Player

Ngoài ra độ khó của game có thể được tăng lên bằng số lượng tank xuất hiệntrên bản đồ trong cùng một thời điểm

3.6.2 Giải pháp đề xuất

Thực ra với AI hiện có thì game đã có chế độ chơi rất khó đòi hỏi người chơiphải rất có kinh nghiệm mới chiến thắng được Do đó, việc đề xuất các AImới không nhằm vào việc tăng độ khó của game mà là tạo ra một phươngthứ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ảiphá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ựngmảng a[i,j] ở đó, a[i,j]=1 nếu 2 ô i,j kề nhau (tức là có thể trực tiếp đếnnhau), 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âydựng mảng d[i,j] chính là khoảng cách ngắn nhất giữa 2 ô i và j Việcxâ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_ algorithm

Trang 20

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, quaylạ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 và truyền tin của xe tăng địch Vẫn sử dụng thuật toántrên nhưng xe tăng địch chỉ có thể nhận thức sự tồn tại của playertank khi player tank cách nó trong một khoảng nào đó Khi một xetă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 player tank

• Chế độ kính tiềm vọng của xe tăng địch: Xe tăng địch không có radarnên không thể truy vết player tank, thay vào đó, nó có kính tiềm vọngtứ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ùngmột hàng hoặc cột và không bị chắn tầm nhìn bởi địa hình (cây, đá,gạch) Khi phát hiện ra thông tin, chúng sẽ lan truyền thông tin chonhau và tổ chức vây bắt tại địa điểm xung quanh nơi xuất hiện playertank

• Chế độ đa mục tiêu của xe tăng địch Chế độ này sẽ đặc biệt hữu hiệutrong trường hợp game có nhiều hơn 1 người chơi Xe tăng địch sẽ cónhiều mục tiêu theo dõi và việc chọn lựa đúng đối tượng để đi theocũng sẽ làm cho game trở nên thú vị và thử thách hơn!

Ngày đăng: 26/09/2015, 21:41

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w