Người chơi lựa chọn nhân vật mình mong muốn và sử dụng các phím đã được quy định để điều khiển nhân vật để đánh nhau nhân vật kia do người chơi khác điều khiển.. Các điều khiển cần phải
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
TRƯỜNG ĐIỆN – ĐIỆN TỬ
BÁO CÁO GIỮA KỲ
LẬP TRÌNH NÂNG CAO
ĐỀ TÀI: ỨNG DỤNG NGÔN NGỮ JAVA
TRONG LẬP TRÌNH GAME ĐỐI KHÁNG 2D - DABDE
Hà Nội, 12 - 2022
Trang 2MC LC
Chương 1: Tổng quan đề tài 6
1.1 Giới thiệu game 6
1.1.1 Tổng quan về game Dabde 6
1.1.2 Bối cảnh của trò chơi 6
1.1.3 Cách chơi 7
1.2 Xác định yêu cầu 7
1.2.1 Giao tiếp hệ thống 7
1.2.2 Giao tiếp về điều khiển 8
1.2.3 Giao tiếp về giao diện 8
Chương 2: Phân tích và thiết kế hệ thống 9
2.1 Phân tích nội dung game 9
2.1.1 Biểu đồ Use-case 9
2.2 Thiết kế hệ thống 13
2.2.1 Hệ thống nhân vật 13
2.2.2 Hệ thống map 14
2.2.3 Hệ thống điều khiển nhân vật 14
2.2.4 Sơ đồ quan hệ giữa các lớp 14
Chương 3: Xây dựng Game 17
3.1 Khung hình 17
3.2 Vòng lặp Game 17
3.3 Xây dựng nhân vật 19
3.3.1 Thiết kế đồ họa và hiệu ứng animation 19
3.3.2 Lớp Entity 20
3.3.3 Lớp Character 21
3.4 Xây dựng bản đồ 22
3.4.1 Map sprite 22
3.4.2 Bản đồ trong game 22
3.4.3 Xử lý va chạm với nhân vật 23
3.5 Trọng lực và sự kiện nhảy 23
3.5.1 Trọng lực 23
3.5.2 Sự kiện nhảy 23
2
Trang 3Danh mục hình ảnh
Hình 1: Biểu đồ Use-case tổng quát 9
Hình 2:Minh họa màn hình lựa chọn nhân vật 10
Hình 3: Biểu đồ mô tả người chơi tương tác với nhân vật 11
Hình 4: Sơ đồ quan hệ giữa các lớp 15
Hình 5: Hình ảnh nhân vật được in ra trong hệ tọa độ 16
Hình 6: Minh họa cách hoạt động của hiệu ứng Animations 17
Hình 7: Vòng lặp game 17
Hình 8: Sprite sheet cho nhân vật Fighter 18
Hình 9: Minh họa cách chia hình ảnh vào trong mảng 2 chiều 19
Hình 10: Hình ảnh nhân vật (màu đen) và hit box (màu đỏ) 20
Hình 11: Map sprite sử dụng trong game 21
Hình 12: Minh họa cách chia các khối vào trong mảng 1 chiều 21
Hình 13: Map được tạo ra 22
3
Trang 4Tóm tắt nội dung đã triển khai
STT Công việc Mô tả Thời gian Kết quả đạt được
1 Thành lập nhóm -Thành lập nhóm
-Xác định đề tài và các yêu cầu để thực hiện
1 tuần:
23 - 31/10/2022
Đã thành lập nhóm và xác định được đề tài, tuy nhiên nội dung còn thiếu hấp dẫn người chơi
2 Xây dựng nhân
vật -Thiết kế lớp nhân vật-xử lý các hiệu ứng
animation cơ bản cho nhân vật: đứng yên, di chuyển trái phải, nhảy
1 tuần:
1 - 8/11/2022 Đã xây dựng một lớp tổng quát cho nhân
vật,có thể dễ dàng thay đổi kích thước, hiệu ứng animations và thêm 1 người chơi vào trong game
1 tuần:
17 - 24/11/2022 Xây dựng được lớp bản đồ, xử lý được trường
hợp map lớn hơn cửa sổ trò chơi
Tạo được công cụ giúp
-Thiết lập sự kiện ngồi xuống
-Xử lý va chạm sao cho nhân vật đứng được trênđất
2 tuần:
9/12/2022
25/11-Thêm trọng lực cho nhânvật, xử lý được sự kiện nhảy, vừa nhảy vừa di chuyển trái phải và sự kiện va chạm với các khối vật thể rắn trong bản đồ
4
Trang 5Nội dung tiếp tục thực hiện
1 -Thiết kế thanh máu, mana
-Xây dựng lớp nhân vật
Fighter
-Thêm thanh máu, mana cho nhân vật và có thể hiển thị lên màn hình game
2 Xây dựng lớp nhân vật
Pirate -Xây dựng kỹ năng:Tấn công gần, tăng tốc độ di
chuyển và sát thương, dựng tường chặn công tầm xa, đặt bẫy gây choáng
1 tuần:24-31/12/2022
3 Xây dựng bảng chọn nhân
vật
Xử lý hiệu ứng âm thanh
Trước khi bắt đầu game sẽ xuất hiện bảng chọn nhân vật cho người chơi lựa chọn
Chèn âm thanh vào game
1 tuần:2-9/1/2023
chức năng Play, Setting, Quit
-Xử lý sự kiện kết thúc game
1 tuần:10-16/1/2023
5 Điều chỉnh lại hiệu ứng
animation Tìm/thiết kế các hiệu ứng cho nhân vật sao cho phù hợp và
đẹp mắt
1 tuần:17-23/1/2023
5
Trang 6CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI
1.1 Giới thiệu game.
1.1.1 Tổng quan về game Dabde.
Dabde là một game đối kháng 1 vs 1 được xây dựng trên không gian 2 chiều được lấy cảm hứng từ tựa game “Đấu trường thú” và các trò chơi cùng thể loại giúp người chơi giải trí cùng bạn bè sau những giờ làm việc mệt mỏi Theo dòng game đối kháng dành cho 2 người chơi
1.1.2 Bối cảnh của trò chơi.
Cốt truyện:
Trong thiên hà số 7, có một hành tinh tên là Alen Ở đây có tồn tại những con sinh vật khủng bố, đầy khát máu và để con người có thể sống sót trên hành tinh này thì không thể nào tồn tại kẻ yếu được Cùng với sự tồn tại của quái vật thì hành tinh này còn được nhiều vị thần bảo hộ Nhiều con người với sức mạnh phi thường đã thức tỉnh dưới sức mạnh của các vị thần, họ đứng lên dẫn dắt con người đứng lên đấu tranh với lũ quái vật Tuy nhiên với bản tính của con người, không chịu phục tùng ai cả Và ở một thành phố Z - nơi tồn tại những người siêu mạnh đã mở ra đấutrường Dabde nhằm tìm ra người có sức mạnh phi thường có thể lãnh đạo đội quânchống lại lũ quái vật Ở đây mọi người muốn thể hiện sức mạnh mong muốn được công nhận được, mỗi người đều là một tài năng hiếm có, họ tinh thông những độc chiêu riêng biệt mà chỉ ở họ mới có được
gươm biển cả
Là kẻ sống ở biển cả, nơi tồn tại nhiều thủy quái nguy hiểm Hắn là
kẻ mạnh, có thể gọi là vua biển cả trong thời kỳ này với những kỹ năngtấn công và phòng thủ kì quặc 6
Trang 7Ngoài biển cả, hắn còn muốn là chủ lãnh đạo loài người chống lại lũ quáivật đáng sợ kia.
Alain Sát thủ A SS+ Dao lưỡi
liềm Một gã sát thủ chuyên nghiệp khét tiếng trên thê giới Tuy nhiên trong
lòng gã vẫn đau đáu 1 nỗi đau Con gái lão bị quái vật giết bỏ Lão mongmuốn giành chiến thắng trong đấu trường để tiêu diệt lũ quái vật
thần công
Là một người không quan tâm đến chiến thắng trong cuộc đấu chỉ muốn những kỹ thuật của mình đượctrọng dụng để giúp ích cho nhân loại
Thể loại game:
Game là thể loại game chiếu đấu đối kháng 1 vs 1 Mang tính kỹ năng và chiến thuật cao Người chơi lựa chọn nhân vật mình mong muốn và sử dụng các phím đã được quy định để điều khiển nhân vật để đánh nhau nhân vật kia do người chơi khác điều khiển
Ngoài ra game còn có những map đầy thú vị, người chơi cần chú ý để có thể có những chiến thuật chơi hợp lí
Trang 8Chạy trên nền tảng App desktop trên Windows OS.
Ngôn ngữ lập trình: Java
1.2.2 Giao tiếp về điều khiển.
Các điều khiển phải đầy đủ, dễ dàng sử dụng để người dùng không bị ngượng khi sử dụng ứng dụng Các điều khiển cần phải có hệ thống quản lý rõ ràng, liênkết chặt chẽ với nhau và đặc biệt phải phục vụ được đầy đủ các chức năng khi người dùng chơi game
1.2.3 Giao tiếp về giao diện.
Giao diện phải sử dụng các hình ảnh sắc nét, mượt mà, mới lạ, dễ nhìn Giao diện phải sắp xếp các nút điều khiển, các hình ảnh, các chữ một cách ngănnắp, gọn gàng và đặc biệt là phải phân bố hợp lý không bị loạn
Có hiệu ứng chuyển động animation làm cho game thêm phần sinh động
CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ
HỆ THỐNG2.1 Phân tích nội dung game.
Với thể loại game đối kháng theo sự tìm hiểu trên thị trường thì có những yếu tố nổi bật có thể liệt kê: Nhân vật, map, điều khiển, âm thanh và hình ảnh
8
Trang 92.1.1 Biểu đồ Use-case
Biểu đồ Use-case tổng quát
Hình 1: Biểu đồ Use-case tổng quát
Đặc tả Use-case “Play game”
- Tên use-case: Use-case Play game
- Người sử dụng: Người dùng
- Mục đích: Chức năng này là chức năng chơi game, là chức năng sử dụng chính của ứng dụng
- Dòng sự kiện:
Hành động của tác nhân Phản ứng của hệ thống
1 User vào ứng dụng Hệ thống đưa ra giao diện chính
2 User nhấn vào button “Play” Hệ thống hiện thị ra màn hình lựa
chọn nhân vật
- Mô tả chi tiết:
9
Trang 10Hình 2:Minh họa màn hình lựa chọn nhân vật.
Khi người chơi nhấn vào “ Play” sẽ xuất hiện 1 khung hình có các hình ảnh nhân vật và 2 khung Khung hình này có vai trò chọn nhân vật cho 2 người chơi Người chơi dùng các hướng mũi tên để di chuyển vị trí, Phím Space dùng đểchốt nhân vật sử dụng cho màn chơi
Sau đó người chơi ấn “OKE” để bắt đầu màn chơi
Hành động của tác nhân Phản ứng của hệ thống
1 User sau khi ấn vào nút “Play” Hệ thống đưa ra phần lựa chọn nhân
vật
2 User nhấn vào button “OKE” Hệ thống hiện thị phần chơi game cho
người chơi
10
Trang 11Hình 3: Biểu đồ mô tả người chơi tương tác với nhân vật
Khi người chơi nhấn vào “OKE” sẽ xuất hiện 1 khung hình có nhân vật và map xung quanh
Nhân vật:
Được điểu khiển bởi người chơi bằng bàn phím hoặc chuột
Nhân vật di chuyển trong map theo tọa độ từng điểm, có những khu vực trong maplàm chết nhân vật
Nhân vật cần có thanh máu và thanh sức mạnh, có giao diện hình ảnh và hiệu ứng
di chuyển
Khi người điều khiển cho nhân vật đánh nhân vật đối thủ phải có sự kiện làm giảm máu nếu đánh trúng, hình ảnh cũng phải đáp ứng theo sự điều khiển
Map:
Thay đổi theo hướng đi của nhân vật ( hiệu ứng chuyển cảnh)
Trò chơi kết nối 2 người nên cần xây dựng một lớp để có thể kết nối 2 ngườilại với nhau
Đi kèm với trò chơi cần hiệu ứng hình ảnh và âm thanh
Phần kết nối:
Cần xây dựng một cách kết nối để chơi game cho 2 người chơi:
- Chơi cùng trên một máy tính
- Chơi trên 2 máy tính khác nhau
Tùy vào những ưu và nhược điểm của 2 cách trên để lựa chọn Với mục tiêu là kết nối nhanh, thuận tiện cho người dùng
11
Trang 12- Các yêu cầu đặc biệt:
Không có
- Trạng thái hệ thống trước khi bắt đầu thực hiện Use-case:
Hệ thống đang ở màn hình chính
- Trạng thái hệ thống sau khi thực hiện Use-case:
Hệ thống hiển thị ra màn hình chơi game chính
âm thanh, FPS trong game
- Các yêu cầu đặc biệt: Không có
- Trạng thái hệ thống khi bắt đầu thực hiện Use-case:
Hệ thống đang ở màn hình chính
- Trạng thái hệ thống sau khi thực hiện Use-case:
Hệ thống hiện thị màn hình điểu chỉnh âm thanh trong game
Trang 13Hệ thống đang ở màn hình chính.
- Trạng thái hệ thống sau khi thực hiện Use-case:
Hệ thống thoát ra khỏi màn hình giao diện chính
Các nhân vật được xây dựng theo bối cảnh câu truyện với những kĩ năng độc đáo cùng với độ phù hợp với khả năng lập trình của nhóm
Nhân vật Kỹ năng đặc biệt
Fighter - Thánh quang vô tận (Tung ra một vầng hào quang +20 sát thương
nếu trúng tướng địch) – Kỹ năng thay đổi thông số chiến đấu
- Dịch chuyển tức thời (Nhân vật có khả năng dịch chuyển 1 khoảng cách nhất định) – Kỹ năng thay đổi vị trí nhân vật
- Đại địa hào quang (Khi địch đến gần tạo ra một địa chấn +5 sát thương và làm suy giảm tốc độ tướng địch trong 2s) – Kỹ năng thay đổi thông số chiến đấu + tốc độ di chuyển khung hình
Pirate -Nhất đao ( Tạo ra một dòng nước biển bắn đến kẻ địch sát thương
+10 và +2 tốc độ di chuyển cho bản thân trong 1s) – Kỹ năng thay đổithông số chiến đấu + tốc độ di chuyển khung hình)
-Rào chắn (Tạo ra một tảng địa hình để tạo khó khăn cho quân địch) -Kỹ năng làm thay đổi bản đồ
- Thu thủy (Lấy cảm hứng về dòng nước mùa thu, một nhát kiếm nhẹ nhàng, chiêu thức tầm gần nhưng hiệu quả +15 sát thương cho tướng địch) – Kỹ năng thay đổi thông số chiến đấu
Alain -Tàng hình (Trong vòng 2s có khả năng tàng hình nhưng sát thương
giảm 5 tuy nhiên nếu đánh trúng đối phương 10 lần thì giữ nguyên)
- Ám sát (Đâm đối phương +5 sát thương, +10 sát thương nếu đang trong trạng thái tàng hình và đánh trúng tướng địch 10 lần) - Kỹ năng thay đổi thông số chiến đấu
- Phi tiêu vô tận (Chiêu thức tầm xa, Alain tung phi tiêu +5 sát thươngvới mỗi phi tiêu trúng, tổng cộng có 5 phi tiêu) -Kỹ năng thay đổi thông số chiến đấu + hình ảnh
13
Trang 14Vegote - Súng vô tận (Bắn liên tục chiêu laze sát thương +2) -Kỹ năng thay
đổi thông số chiến đấu
- Di ảnh hoán hình (Bằng công nghệ kì lạ cho phép bản thân và kẻ địch đổi chỗ cho nhau) -Kỹ năng thay đổi vị trí nhân vật
- Headshot (Bắn ra một viên đạn có mức sát thương + 30 tuy nhiên bản thân bị làm chậm trong 4s) -Kỹ năng thay đổi thông số chiến đấu + tốc độ khung hình
Ngoài ra các nhân vật còn các kỹ năng đánh thường bình thường khác và một nănglực ẩn thân thú vị
2.2.2 Hệ thống map.
Là các nơi hiểm địa trên khắp hành tinh Alen
2.2.3 Hệ thống điều khiển nhân vật.
Nhân vật được điều khiển bằng chuột và bàn phím, các phím di chuyển và sử dụng
ác kỹ năng được tính toán sao cho hợp lý và quy ước
Nhân vật được điều khiển bằng chuột và bàn phím, các phím di chuyển và sử dụng
ác kỹ năng được tính toán sao cho hợp lý và quy ước
2.2.4 Sơ đồ quan hệ giữa các lớp
Để hiểu rõ hơn về yêu cầu của đề tài, nhóm nghiên cứu đề xuất phương án thiết kế các biểu đồ để hiểu thêm về cách thức hoạt động, cách xử lý của đề tài
14
Trang 15Hình 4: Sơ đồ quan hệ giữa các lớp
Mô tả:
-MainClass: Khi bắt đầu chương trình sẽ gọi hàm main -> tạo Game mới.-Game: Game sẽ khởi tạo GamePanel, GameWindow, các Character và vòng lặpgame
-GamePanel: Tạo panel, lắng nghe các sự kiện từ bàn phím, chuột và hiển thị cáchình ảnh trong game
15
Trang 16-GameWindow: Cài đặt các tham số cho cửa sổ game (kích thước, ẩn/hiện GamePanel,…)
-Entity: Lớp chứa các thuộc tính hỗ trợ cho lớp Character như tọa độ, chiều dài/rộng hình ảnh nhân vật, Hit box
-Character: Lớp nhân vật được kết thừa từ Entity, bổ xung thêm các thuộc tính như các hình ảnh animation, tốc độ di chuyển, đội đuổi/chạy, Map hiện tại Character là nơi xử lý các sự kiện chung nhất của các nhân vật và là nền móng
để xây dựng lên các lớp nhân vật
-Lớp nhân vật Pirate và Fighter kế thừa các thuộc tính và phương thức của Character và có thêm các kỹ năng cho nhân vật
-Map: Chứa ma trận 2 chiều mô tả bản đồ
-MapManager: Lớp quản lý các bản đồ hình ảnh từng khối của bản đồ sau đó kếthợp với ma trận của Map để tạo nên ảnh Map hoàn chỉnh
16
Trang 17CHƯƠNG 3: XÂY DỰNG GAME.3.1 Khung hình
Khi bắt đầu, chương trình sẽ khởi tạo 1 lớp GameWindows nhằm mục đích tạo một cửa sổ game với kích thước 832x448 và 1 lớp gamePanel kế thừa từ lớp JPanel trong Java Swing Lớp gamePanel này được khởi tạo nhằm lắng nghe các
sự kiện được ấn xuống từ bàn phím, chuột và cũng là để hiển thị các hình ảnh trong game
Hệ tọa độ trong cửa sổ gồm 2 chiều x,y có gốc tọa độ là góc trên cùng bên trái với đơn vị là pixel
Hình 5: Hình ảnh nhân vật được in ra trong hệ tọa độ
Trang 18Ý tưởng cho việc làm game là xây dựng một vòng lặp có thể cập nhật lại các hình ảnh và tọa độ của chúng.
Hình 7: Vòng lặp game
Số hình ảnh được cập nhật trong vòng 1 giây được gọi là FPS (Frames Per Second) Khi FPS càng lớn nhân vật di chuyển càng mượt mà và ngược lại FPS nhỏ sẽ làm cho game trở nên giật lag, tuy nhiên thời gian để cập nhật một hình ảnh sẽ lớn và tốn tài nguyên của máy tính hơn rất nhiều lần thời gian để tính toán xử lý logic
Nếu hệ thống hoạt động theo tuần tự nghĩa là: bắt ký tự -> tính toán -> cập nhật lại hình ảnh -> bắt ký tự -> … thì việc tính toán sẽ bị phụ thuộc vào việc cập nhật lại hình ảnh điều này làm chúng ta khó có thể tăng được nhịp độ game Vì vậy giải pháp là sẽ đưa phần cập nhật hình ảnh và xử lý tính toán logic có tốc độ cập nhật khác nhau Số lần cập nhật xử lý tính toán logic trong 1 giây được gọi
là UPS UPS càng lớn thì nhịp game càng nhanh, ngoài ra điều này còn giúp choquá trình xử lý va chạm với vật thể được diễn ra tốt hơn
Trong báo cáo này ta sẽ sử dụng FPS là 120 và UPS là 200
18
Trang 193.3 Xây dựng nhân vật
3.3.1 Thiết kế đồ họa và hiệu ứng animation.
Tất cả các hình ảnh như chuyển động của các nhân vật sẽ được đưa vào 1 tấm hình được gọi là sprite sheet với các hàng ngang là các chuyển động của nhân vật (đứng yên, rẽ trái, rẽ phải, nhảy…) còn các cột dọc tương ứng là các frame chuyển động của hành động đó
Hình 8: Sprite sheet cho nhân vật Fighter
Các sprite sheet này có thể được tạo ra bằng các phần mềm như Adobe Animate,Unity,…
Khi đã có đươc sprite sheet cùng với các chiều cao, chiều rộng của 1 khung ảnh nhân vật ta có thể tính toán vị trí của các frame và đưa chúng vào một mảng 2 chiều với cách sắp xếp hành động tương tự như trong sprite sheet
Bằng cách này ta có thể dễ dàng tính toán được hình ảnh nào tiếp theo sẽ được
in ra
19