Lập Trình Game Bomberman Bằng Java: Hướng Dẫn Chi Tiết

Báo cáo chuyên đề học phần lập trình Java với dự án lập trình game Pacman, cung cấp kiến thức và kỹ năng cần thiết cho lập trình viên.

Chuyên ngành

Lập Trình Game

Người đăng

Ẩn danh

Thể loại

hướng dẫn

2023

59
0
0

Phí lưu trữ

30 Point

Mục lục chi tiết

1. I. GIỚI THIỆU BÀI TẬP LỚN “LẬP TRÌNH ỨNG DỤNG GAME BOMBERMAN”

2. II. DANH SÁCH THÀNH VIÊN THỰC HIỆN VÀ ĐÓNG GÓP CỦA CÁC THÀNH VIÊN

3. III. MÔ TẢ CÁC TÍNH NĂNG CỦA ỨNG DỤNG

3.1. Tổng quát về chương trình

3.2. File res

3.2.1. audio

3.2.2. b.font

3.2.3. level - bản đồ của level 0

3.2.4. Bản đồ level 1

3.2.5. Bản đồ level 2

3.2.6. Bản đồ level 3

3.2.7. Sprites - bomb

3.2.8. Enemy

3.2.9. Illustrasions

3.2.10. Map

3.2.11. Player

3.2.12. Powerup

3.2.13. Hình ảnh giao diện

3.3. file src

3.3.1. controller

3.3.2. algorithm (allntelligent)

3.3.3. BFS

3.3.4. enemyMatrix

3.3.5. control method

3.3.6. balloom, bear, broom là các con quái trong game bomberman

Tóm tắt

I. Tổng Quan Về Lập Trình Game Bomberman Bằng Java 2024

Việc lập trình game Bomberman bằng Java là một dự án kinh điển giúp người học nắm vững các khái niệm cốt lõi của lập trình. Java, với thế mạnh về lập trình hướng đối tượng (OOP), cung cấp một nền tảng vững chắc để xây dựng cấu trúc game một cách logic và dễ bảo trì. Bài viết này sẽ cung cấp một lộ trình chi tiết, từ việc thiết lập môi trường đến triển khai các thuật toán phức tạp. Nền tảng chính được sử dụng là JavaFX, một thư viện mạnh mẽ cho việc phát triển ứng dụng đồ họa. Theo tài liệu nghiên cứu gốc, các thành phần của game được phân chia rõ ràng thành hai nhóm: đối tượng động (Bomber, Enemy, Bomb) và đối tượng tĩnh (Grass, Wall, Brick). Sự phân chia này là bước đầu tiên để áp dụng nguyên lý OOP vào project game Java, giúp quản lý mã nguồn hiệu quả. Quá trình phát triển sẽ bao gồm việc xây dựng cửa sổ game, triển khai vòng lặp chính, xử lý đồ họa và sự kiện, đồng thời lập trình logic cho các thực thể trong game. Đây là một hướng dẫn toàn diện dành cho phát triển game cho người mới bắt đầu cũng như những lập trình viên muốn củng cố kỹ năng.

1.1. Nền tảng Lập trình hướng đối tượng Java trong game

Cốt lõi của việc lập trình game Bomberman bằng Java nằm ở việc áp dụng triệt để các nguyên tắc của lập trình hướng đối tượng Java (OOP). Mỗi thực thể trong game, từ nhân vật chính (Bomber), các loại kẻ địch (Enemy), cho đến vật phẩm (Item) và các khối gạch (Brick), đều được mô hình hóa thành các lớp (class) riêng biệt. Phương pháp này mang lại nhiều lợi ích. Thứ nhất, tính đóng gói (Encapsulation) cho phép mỗi đối tượng tự quản lý trạng thái và hành vi của riêng nó, ví dụ, lớp Bomb sẽ chứa thông tin về thời gian nổ và bán kính vụ nổ. Thứ hai, tính kế thừa (Inheritance) giúp tái sử dụng mã nguồn hiệu quả; chẳng hạn, các lớp kẻ địch cụ thể như Balloom hay Oneal có thể kế thừa từ một lớp Enemy chung, chia sẻ các thuộc tính như tốc độ, máu và phương thức di chuyển cơ bản. Thứ ba, tính đa hình (Polymorphism) cho phép xử lý các đối tượng khác nhau một cách thống nhất thông qua một giao diện chung. Ví dụ, một phương thức update() có thể được gọi trên một danh sách chứa nhiều loại đối tượng khác nhau, và mỗi đối tượng sẽ tự thực thi hành vi cập nhật riêng của nó. Việc thiết kế cấu trúc lớp rõ ràng ngay từ đầu là yếu tố quyết định sự thành công và khả năng mở rộng của project game Java.

1.2. Các công cụ và thư viện Java game development cần thiết

Để bắt đầu hướng dẫn lập trình game này, việc chuẩn bị môi trường là bước không thể thiếu. Nền tảng cốt lõi là Java Development Kit (JDK), phiên bản 8 trở lên được khuyến nghị để đảm bảo tương thích. Một Môi trường phát triển tích hợp (IDE) như IntelliJ IDEA hoặc Eclipse sẽ giúp tăng tốc độ viết mã và gỡ lỗi. Thư viện đồ họa chính được sử dụng, như đã đề cập trong tài liệu gốc, là JavaFX. JavaFX cung cấp một bộ công cụ phong phú để tạo giao diện người dùng (GUI), xử lý đồ họa 2D, và quản lý sự kiện. Các lớp quan trọng của JavaFX được sử dụng bao gồm Application để khởi tạo ứng dụng, StageScene để quản lý cửa sổ và nội dung hiển thị, Canvas để vẽ các đối tượng game, và AnimationTimer để tạo ra vòng lặp game (game loop). Ngoài ra, thư viện chuẩn của Java (java.util) cũng đóng vai trò quan trọng trong việc quản lý các cấu trúc dữ liệu như danh sách kẻ địch (ArrayList<Enemy>) hay tập hợp các phím đang được nhấn (HashSet<KeyCode>). Mặc dù có các game engine Java chuyên dụng như libGDX, việc tự xây dựng từ đầu với JavaFX giúp hiểu sâu hơn về các cơ chế hoạt động bên trong của một trò chơi.

II. Bí Quyết Xây Dựng Cấu Trúc Game Bomberman Với Java OOP

Một cấu trúc dự án vững chắc là nền móng cho bất kỳ phần mềm nào, và Java game development cũng không ngoại lệ. Trước khi viết những dòng mã logic đầu tiên, việc phác thảo kiến trúc tổng thể là cực kỳ quan trọng. Dựa trên phân tích từ báo cáo chuyên đề, cấu trúc game Bomberman được chia thành các module rõ ràng. Thư mục src chứa toàn bộ mã nguồn Java, được tổ chức thành các package (gói) theo chức năng như controller, entities, map. Thư mục res chứa các tài nguyên như hình ảnh (sprite animation java), âm thanh, và các file văn bản định nghĩa màn chơi. Cách tiếp cận này giúp tách biệt logic và dữ liệu, làm cho dự án dễ dàng quản lý và nâng cấp. Việc áp dụng các mẫu thiết kế (Design Patterns) như Singleton cho các lớp quản lý tài nguyên hoặc Factory để tạo ra các loại kẻ địch khác nhau cũng là một phương pháp nâng cao cần được xem xét. Cấu trúc này không chỉ tối ưu cho việc phát triển mà còn giúp các thành viên trong nhóm cộng tác hiệu quả hơn, như được thể hiện qua bảng phân công công việc trong tài liệu gốc.

2.1. Thiết kế các lớp đối tượng động Player Enemy Bomb

Các đối tượng động là những thực thể có thể di chuyển và tương tác, tạo nên linh hồn cho game Bomberman. Lớp Player là trung tâm, cần có các thuộc tính như tọa độ (x, y), tốc độ di chuyển (speed), số mạng (lives), và số lượng bom tối đa có thể đặt (maxBombCount). Các phương thức của lớp Player bao gồm move(), plantBomb(), và die(). Lớp Enemy là lớp cơ sở cho tất cả các loại quái vật. Nó nên chứa các thuộc tính và phương thức chung, sau đó các lớp con như Balloom (di chuyển ngẫu nhiên) và Oneal (di chuyển thông minh) sẽ kế thừa và triển khai hành vi riêng. Tài liệu gốc mô tả chi tiết các loại kẻ địch như Broom có khả năng đi xuyên gạch hay Frog khi chết sẽ tạo ra hai Balloom, cho thấy sự đa dạng trong thiết kế. Lớp Bomb cũng là một đối tượng động quan trọng, với các thuộc tính như bộ đếm thời gian (timer) và bán kính nổ (flameLength). Khi timer về 0, đối tượng Bomb sẽ bị xóa và thay thế bằng các đối tượng Flame để thực hiện xử lý va chạm trong game.

2.2. Xây dựng các lớp đối tượng tĩnh và thiết kế màn chơi

Đối tượng tĩnh tạo nên môi trường và các chướng ngại vật của trò chơi. Các lớp cơ bản bao gồm Wall (tường không thể phá hủy), Brick (gạch có thể bị phá hủy), và Grass (nền đất trống). Một lớp trừu tượng Tile hoặc Entity có thể được dùng làm lớp cha cho tất cả các đối tượng này để quản lý chúng một cách thống nhất. Đặc biệt, đối tượng Portal (cổng qua màn) và các Item (vật phẩm tăng sức mạnh) thường được giấu sau các khối Brick. Điều này đòi hỏi một cơ chế logic để khi một Brick bị phá hủy, đối tượng ẩn bên dưới nó sẽ được hiển thị. Việc thiết kế màn chơi được thực hiện hiệu quả bằng cách sử dụng một file văn bản. Như mô tả trong tài liệu, mỗi ký tự trong file đại diện cho một đối tượng: '#' cho Wall, '*' cho Brick, 'p' cho Player. Chương trình sẽ đọc file này, phân tích từng ký tự và khởi tạo các đối tượng tương ứng vào một mảng hai chiều hoặc một danh sách, từ đó dựng nên bản đồ game. Phương pháp này giúp tạo và chỉnh sửa các màn chơi một cách nhanh chóng mà không cần biên dịch lại mã nguồn.

III. Hướng Dẫn Tạo Màn Chơi Vòng Lặp Game Bomberman Java

Sau khi có một cấu trúc vững chắc, bước tiếp theo là biến những ý tưởng thiết kế thành một ứng dụng chạy được. Trọng tâm của phần này là tạo ra cửa sổ game, nơi tất cả các đồ họa trong Java sẽ được hiển thị, và quan trọng hơn là triển khai vòng lặp game (game loop). Game loop là trái tim của mọi trò chơi, một vòng lặp vô tận chịu trách nhiệm cập nhật trạng thái của tất cả các đối tượng và sau đó vẽ lại chúng lên màn hình hàng chục lần mỗi giây. Việc sử dụng lớp AnimationTimer của JavaFX là một lựa chọn tối ưu, vì nó tích hợp mượt mà với luồng render của JavaFX, đảm bảo hiệu suất và hình ảnh động trôi chảy. Tài liệu tham khảo đã chỉ ra việc sử dụng GameLoop extends AnimationTimer, trong đó phương thức handle() được gọi liên tục, là phương pháp tiếp cận hiệu quả. Bên trong vòng lặp này, logic cập nhật logic game và logic hiển thị được tách biệt để đảm bảo tính nhất quán của trò chơi, ngay cả khi tốc độ khung hình (FPS) thay đổi.

3.1. Khởi tạo cửa sổ game bằng thư viện Java Swing JavaFX

Việc hiển thị game ra màn hình bắt đầu bằng việc tạo một cửa sổ. Mặc dù Java Swing (với JFrame, JPanel) là một lựa chọn truyền thống, JavaFX cung cấp một API hiện đại và nhiều tính năng mạnh mẽ hơn cho java game development. Để tạo một cửa sổ với JavaFX, một lớp chính cần kế thừa từ javafx.application.Application và triển khai phương thức start(Stage primaryStage). Stage ở đây tương đương với cửa sổ của ứng dụng. Bên trong Stage, một Scene được thiết lập, chứa các thành phần giao diện. Đối với game 2D, thành phần chính thường là một Canvas, một bề mặt cho phép vẽ các hình ảnh, hình dạng và văn bản một cách linh hoạt. Kích thước của Canvas sẽ quyết định độ phân giải của game. Các tài nguyên hình ảnh (spritesheets) được tải vào các đối tượng Image của JavaFX, sau đó được vẽ lên Canvas tại các tọa độ tương ứng của các đối tượng game. Việc quản lý các Scene khác nhau (ví dụ: Menu Scene, Game Scene, Game Over Scene) cho phép chuyển đổi giữa các trạng thái của trò chơi một cách mượt mà, như cách tài liệu mô tả việc chuyển từ menu vào game thông qua phương thức switchToGame().

3.2. Triển khai Game Loop để cập nhật và render liên tục

Một vòng lặp game (game loop) hiệu quả là yếu tố sống còn. Vòng lặp này thực hiện hai nhiệm vụ chính: update()render(). Giai đoạn update() chịu trách nhiệm cập nhật trạng thái của tất cả các đối tượng game dựa trên thời gian đã trôi qua (delta time) và input của người chơi. Ví dụ, vị trí của nhân vật sẽ được cập nhật dựa trên tốc độ và hướng di chuyển. Giai đoạn render() chịu trách nhiệm vẽ trạng thái hiện tại của tất cả các đối tượng lên màn hình. Lớp AnimationTimer trong JavaFX là công cụ lý tưởng cho việc này. Phương thức handle(long now) của nó được hệ thống gọi tự động khoảng 60 lần mỗi giây. Bên trong handle(), thời gian trôi qua (dt) từ lần gọi trước được tính toán. Sau đó, một vòng lặp sẽ duyệt qua tất cả các đối tượng trong game và gọi phương thức update(dt) của chúng, tiếp theo là gọi phương thức render(GraphicsContext gc). Việc tách biệt logic này đảm bảo rằng tốc độ của game không phụ thuộc vào tốc độ khung hình. Đây là một kỹ thuật tiêu chuẩn trong phát triển game cho người mới bắt đầu.

IV. Phương Pháp Xử Lý Va Chạm Logic Game Bomberman Java

Khi các đối tượng đã có thể di chuyển và hiển thị trên màn hình, phần tiếp theo là làm cho chúng tương tác với nhau. Đây là lúc triển khai logic cốt lõi của game, bao gồm việc xử lý sự kiện bàn phím Java để điều khiển nhân vật và cơ chế xử lý va chạm trong game. Va chạm là nền tảng cho hầu hết các tương tác: nhân vật không thể đi xuyên tường, bom nổ phá hủy gạch, và người chơi thua khi chạm phải kẻ địch. Trong một game dựa trên lưới ô vuông như Bomberman, việc phát hiện va chạm có thể được đơn giản hóa bằng cách kiểm tra tọa độ lưới của các đối tượng. Tuy nhiên, để có độ chính xác cao hơn, phương pháp sử dụng hình chữ nhật bao quanh (Bounding Box) cho mỗi đối tượng thường được áp dụng. Bằng cách kiểm tra xem các hình chữ nhật này có giao nhau hay không, hệ thống có thể xác định va chạm và kích hoạt các hành động tương ứng, chẳng hạn như ngăn chặn di chuyển hoặc giảm máu của nhân vật. Việc tối ưu hóa các thuật toán này là rất quan trọng để đảm bảo game chạy mượt mà.

4.1. Cách xử lý sự kiện bàn phím Java để điều khiển nhân vật

Việc điều khiển nhân vật một cách mượt mà và phản hồi nhanh là yếu tố quan trọng tạo nên trải nghiệm người chơi tốt. Trong JavaFX, việc xử lý sự kiện bàn phím Java được thực hiện bằng cách đăng ký một EventHandler cho các sự kiện KeyEvent.KEY_PRESSEDKeyEvent.KEY_RELEASED trên đối tượng Scene. Một phương pháp phổ biến là sử dụng một HashSet<KeyCode> để lưu trữ tất cả các phím hiện đang được nhấn. Khi sự kiện KEY_PRESSED xảy ra, mã phím tương ứng (ví dụ KeyCode.UP) được thêm vào HashSet. Khi KEY_RELEASED xảy ra, mã phím đó được xóa đi. Trong vòng lặp game, ở giai đoạn update(), chương trình sẽ kiểm tra nội dung của HashSet này. Nếu nó chứa KeyCode.UP, logic di chuyển nhân vật lên trên sẽ được thực thi. Cách tiếp cận này giải quyết được vấn đề xử lý nhiều phím được nhấn đồng thời, cho phép nhân vật di chuyển theo đường chéo một cách tự nhiên. Dựa trên mã nguồn tham khảo, các sự kiện này được dùng để cập nhật thuộc tính direction của đối tượng Player.

4.2. Triển khai logic đặt bom nổ và phá hủy môi trường

Logic của bom là cơ chế trung tâm trong Bomberman. Khi người chơi nhấn phím đặt bom, một đối tượng Bomb mới được tạo ra tại vị trí lưới của người chơi, miễn là số lượng bom đang hoạt động chưa đạt giới hạn. Đối tượng Bomb này có một bộ đếm thời gian. Trong mỗi vòng lặp update(), bộ đếm này sẽ giảm dần. Khi nó về 0, đối tượng Bomb sẽ kích hoạt vụ nổ. Vụ nổ không phải là một đối tượng đơn lẻ mà là một chuỗi các đối tượng Flame được tạo ra theo bốn hướng từ vị trí của quả bom. Độ dài của chuỗi Flame này phụ thuộc vào thuộc tính flameLength của người chơi. Các đối tượng Flame này tồn tại trong một khoảng thời gian ngắn, và trong thời gian đó, chúng sẽ thực hiện xử lý va chạm trong game. Nếu một Flame va chạm với một đối tượng Brick, đối tượng Brick đó sẽ bị phá hủy. Nếu nó va chạm với Player hoặc Enemy, đối tượng đó sẽ bị tiêu diệt. Logic này tạo ra một chuỗi các sự kiện tương tác phức tạp và hấp dẫn.

V. Cách Lập Trình AI Cho Kẻ Địch Trong Game Bomberman Java

Một trò chơi sẽ không có thử thách nếu không có kẻ địch thông minh. Việc lập trình trí tuệ nhân tạo (AI) cho các đối tượng Enemy là một phần thú vị và đầy thử thách trong project game Java này. Độ khó của game phụ thuộc trực tiếp vào sự tinh vi của AI. Có thể bắt đầu với một thuật toán AI đơn giản và dần dần nâng cấp lên các hành vi phức tạp hơn. Tài liệu gốc đã phân loại rõ ràng các loại AI, từ Balloom với hành vi di chuyển ngẫu nhiên đến Oneal có khả năng tìm đường để truy đuổi người chơi. Việc triển khai các hành vi khác nhau này thường được thực hiện bằng cách sử dụng mẫu thiết kế Strategy, trong đó mỗi thuật toán AI là một lớp riêng biệt và có thể được gán cho một đối tượng Enemy lúc khởi tạo. Điều này cho phép tái sử dụng và dễ dàng tạo ra các loại kẻ địch mới với các hành vi độc đáo mà không cần thay đổi nhiều mã nguồn hiện có.

5.1. Thuật toán AI đơn giản Di chuyển ngẫu nhiên cho Balloom

Đối với những kẻ địch cấp thấp như Balloom, một thuật toán AI đơn giản là đủ để tạo ra thử thách ban đầu. Hành vi chính của nó là di chuyển ngẫu nhiên. Logic này có thể được triển khai như sau: khi một Enemy di chuyển đến trung tâm của một ô lưới (một ngã rẽ), nó sẽ đưa ra quyết định về hướng đi tiếp theo. Một danh sách các hướng khả thi (không bị chặn bởi Wall hoặc Brick) sẽ được tạo ra. Sau đó, một hướng ngẫu nhiên được chọn từ danh sách này bằng cách sử dụng lớp java.util.Random. Kẻ địch sẽ tiếp tục di chuyển theo hướng đã chọn cho đến khi nó đến ngã rẽ tiếp theo, và quá trình lặp lại. Mặc dù đơn giản, hành vi này tạo ra sự khó đoán và buộc người chơi phải cẩn thận. Mã nguồn tham khảo sử dụng một phương thức randDir() để sinh ra một hướng ngẫu nhiên, sau đó kiểm tra xem hướng đó có hợp lệ hay không trước khi áp dụng. Đây là nền tảng cơ bản nhất trong việc xây dựng AI cho game 2D Java.

5.2. AI nâng cao Sử dụng thuật toán BFS để tìm đường đi

Để tạo ra những kẻ địch thực sự thông minh như Oneal, cần một thuật toán tìm đường. Thuật toán Tìm kiếm theo chiều rộng (BFS - Breadth-First Search) là một lựa chọn tuyệt vời cho các game dựa trên lưới. BFS có khả năng tìm ra đường đi ngắn nhất từ vị trí của kẻ địch đến vị trí của người chơi. Tài liệu nghiên cứu đã mô tả rõ việc triển khai lớp BFS với phương thức findSortPath. Thuật toán hoạt động bằng cách khám phá bản đồ theo từng lớp, bắt đầu từ vị trí của kẻ địch. Nó sử dụng một hàng đợi (queue) để theo dõi các ô cần khám phá. Khi tìm thấy vị trí của người chơi, thuật toán sẽ truy ngược lại đường đi để xác định nước đi đầu tiên mà kẻ địch cần thực hiện. Kết quả của thuật toán không phải là toàn bộ đường đi, mà chỉ là hướng di chuyển tiếp theo (lên, xuống, trái, phải). Kẻ địch sẽ di chuyển theo hướng này. Trong mỗi lần cập nhật, thuật toán BFS có thể được chạy lại để điều chỉnh đường đi theo vị trí mới của người chơi, tạo ra hành vi truy đuổi năng động và đầy thách thức.

VI. Tổng Kết Project Game Java Hướng Phát Triển Tương Lai

Hoàn thành một project game Java như Bomberman là một thành tựu đáng kể, cung cấp kinh nghiệm thực tế quý báu. Quá trình này không chỉ củng cố kiến thức về ngôn ngữ Java mà còn bao gồm các kỹ năng quan trọng trong phát triển phần mềm: thiết kế kiến trúc, quản lý tài nguyên, gỡ lỗi và tối ưu hóa hiệu suất. Từ việc áp dụng lập trình hướng đối tượng Java để mô hình hóa các thực thể, triển khai vòng lặp game với JavaFX, cho đến việc xây dựng các thuật toán AI đơn giản và phức tạp, mỗi giai đoạn đều mang lại những bài học riêng. Như kết luận trong tài liệu gốc, dự án giúp sinh viên hiểu sâu hơn về Java và quy trình làm game. Tuy nhiên, một dự án không bao giờ thực sự kết thúc. Luôn có những hướng để cải tiến và mở rộng, biến một sản phẩm học thuật thành một trò chơi hoàn chỉnh và hấp dẫn hơn.

6.1. Review mã nguồn game Bomberman và các bài học rút ra

Nhìn lại toàn bộ mã nguồn game Bomberman, có thể thấy rõ tầm quan trọng của việc tuân thủ các nguyên tắc thiết kế tốt. Việc phân tách rõ ràng các lớp theo chức năng giúp mã nguồn dễ đọc và dễ bảo trì. Việc sử dụng tính kế thừa cho các lớp Enemy đã giảm thiểu sự trùng lặp mã. Việc áp dụng các giao diện (interface), như EntityController trong tài liệu gốc, cho phép tách rời logic điều khiển (AI hoặc người chơi) khỏi đối tượng được điều khiển, tạo ra một thiết kế linh hoạt. Bài học lớn nhất là tầm quan trọng của việc lên kế hoạch trước. Một cấu trúc lớp được thiết kế tốt và một kiến trúc dự án rõ ràng sẽ tiết kiệm rất nhiều thời gian và công sức trong giai đoạn triển khai và gỡ lỗi. Hơn nữa, việc tự mình triển khai các cơ chế cốt lõi như xử lý va chạm trong gamegame loop mang lại một sự hiểu biết sâu sắc mà việc sử dụng một game engine Java có sẵn không thể mang lại.

6.2. Các hướng cải tiến và nâng cấp cho project game Java

Một khi nền tảng game đã vững chắc, có vô số hướng để phát triển thêm. Một cải tiến rõ ràng là thêm hệ thống âm thanh. Tài liệu gốc đã đề cập đến việc sử dụng MediaPlayer của JavaFX để phát nhạc nền và các hiệu ứng âm thanh khi đặt bom, nhận vật phẩm hoặc nhân vật bị tiêu diệt. Việc thêm nhiều màn chơi với các thiết kế và thử thách khác nhau sẽ tăng giá trị chơi lại của game. Hệ thống vật phẩm (Power-ups) có thể được mở rộng với nhiều loại hơn, ví dụ như khả năng đi xuyên gạch hoặc đá bom. Một mục tiêu tham vọng hơn là triển khai chế độ chơi nhiều người (multiplayer) qua mạng LAN. Điều này đòi hỏi kiến thức về lập trình mạng với Java Sockets nhưng sẽ nâng tầm dự án lên một đẳng cấp hoàn toàn mới. Cuối cùng, việc tối ưu hóa hiệu suất, đặc biệt là trong các thuật toán phát hiện va chạm và vẽ đồ họa, luôn là một lĩnh vực cần được quan tâm để đảm bảo game chạy mượt mà trên nhiều cấu hình máy tính khác nhau.

10/07/2025

Trích đoạn nội dung tài liệu

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN LẬP TRÌNH JAVA ĐỀ TI: LẬP TRÌNH GAME PACMAN Sinh viên thực hiện : LÊ QUANG SƠN : LÊ HUY ĐỒNG : NGUYỄN VIẾT TIẾN Giảng viên hướng dẫn : THS. TRẦN HỮU PHI Ngành : CÔNG NGHỆ THÔNG TIN Chuyên ngành : CÔNG NGHỆ PHẦN MỀM Lớp : D16CNPM2 Khóa : 2022 Hà Nội, tháng 11 năm 2022 PHIẾU CHẤM ĐIỂM Sinh viên thực hiện: Họ và tên Chữ ký Ghi chú Lê Quang Sơn Lê Huy Đồng Nguyễn Viết Tiến Giảng viên chấm: Họ và tên Chữ ký Ghi chú Giảng viên chấm 1 : Giảng viên chấm 2 : MỤC LỤC Nội dung Trang I. Giới thiệu bài tập lớn “Lập trình ứng dụng game Bomberman”. Danh sách thành viên thực hiện và đóng góp của các thành viên.

Mô tả các tính năng của ứng dụng. Tổng quát về chương trình.Mô tả API(thư viện)chính được sử dụng trong code……………………45 1.Thư viện javafx………………………………………………………….Thư viện Java. Demo ứng dụng. Giới thiệu bài tập lớn “Lập trình ứng dụng game Bomberman” Lời đầu tiên bọn em xin gửi lời cảm ươn thầy đã hướng dẫn môn Lập trình java trong kì này , môn học quan trọng để bọn em có thể có kinh nghiệm trong việc thực tập.

Về lí do chọn đề tài , Game đặt Bomb đã là một thể loại Game mà ai cũng từng chơi khi nhỏ , và khi thầy cho bọn em tự chọn đề tài thì cả 3 bọn em đều muốn tạo dựng một Game đặt Bomb do chính tay bọn em làm .Đề tài giúp bọn em hiểu hơn về Java và quy trình làm game ạ. Đi sơ qua về game thì bọn em tạo dựng đầy đủ các yếu tố chính , và nó được chia làm 2 loại là nhóm đối tượng động (Bomber, Enemy, Bomb) và nhóm đối tượng tĩnh (Grass, Wall, Brick, Portal, Item). [09/05/2023 18:34:16] Đỗ Đăng Quyền: Các đối tượng Nếu bạn đã từng chơi Bomberman, bạn sẽ cảm thấy quen thuộc với những đối tượng này. Chúng được được chia làm hai loại chính là nhóm đối tượng động (Bomber, Enemy, Bomb) và nhóm đối tượng tĩnh (Grass, Wall, Brick, Portal, Item).

Bomber là nhân vật chính của trò chơi. Bomber có thể di chuyển theo 4 hướng trái/phải/lên/xuống theo sự điều khiển của người chơi. Bomb là đối tượng mà Bomber sẽ đặt và kích hoạt tại các ô Grass. Bomber có một lần được đi từ vị trí đặt Bomb ra vị trí bên cạnh.

Sau khi kích hoạt 2s, Bomb sẽ tự nổ, các đối tượng Flame được tạo ra. Grass là đối tượng mà Bomber và Enemy có thể di chuyển xuyên qua, và cho phép đặt Bomb lên vị trí của nó Wall là đối tượng cố định, không thể phá hủy bằng Bomb cũng như không thể đặt Bomb lên được, Bomber và Enemy không thể di chuyển vào đối tượng này Brick là đối tượng được đặt lên các ô Grass, không cho phép đặt Bomb lên nhưng có thể bị phá hủy bởi Bomb được đặt gần đó. Bomber và Enemy thông thường không thể di chuyển vào vị trí Brick khi nó chưa bị phá hủy. 1 Portal là đối tượng được giấu phía sau một đối tượng Brick.

Khi Brick đó bị phá hủy, Portal sẽ hiện ra và nếu tất cả Enemy đã bị tiêu diệt thì người chơi có thể qua Level khác bằng cách di chuyển vào vị trí của Portal. Các Item cũng được giấu phía sau Brick và chỉ hiện ra khi Brick bị phá hủy. Bomber có thể sử dụng Item bằng cách di chuyển vào vị trí của Item. SpeedItem tăng vận tốc di chuyển của bomber.

FlameItem tăng độ dài các Flame khi bomb nổ. BombItem giúp tăng số lượng Bomb có thể đặt thêm một. LifeItem tăng số mạng của bomber lên một. TimeItem tăng thời gian chơi.

StrengthItem làm cho bomb có thể nổ xuyên tường (và item). DetonatorItem giúp cho bomber có khả năng kích hoạt bomb nổ sớm bằng cách bấm phím D. Enemy là các đối tượng mà Bomber phải tiêu diệt hết để có thể qua Level. Balloom là Enemy đơn giản nhất, di chuyển ngẫu nhiên với vận tốc cố định.

Oneal di chuyển "thông minh" hơn, biết tìm đường để đuổi bomber. Broom có khả năng đi xuyên qua gạch. Bear có tốc độ di chuyển nhanh, có khả năng đuổi theo bomber ở một mức độ nhất định. Frog khi chết sẽ tạo ra 2 Balloom tại vị trí của nó.

Fire di chuyển nhanh, có thể phá hủy item khi chạm vào. Mô tả game play, xử lý va chạm và xử lý bom nổ II. Danh sách thành viên thực hiện và đóng góp của các thành viên TT Họ tên Mã số SV Nội dung thực hiện Ghi chú Phân tích Lập trình Viết mô chức năng thực thi tả tài liệu yêu cầu ứng dụng, giải pháp 2 thực thi 1 Lê Quang Sơn 21810310335 35% 60% 30% 2 Lê Huy Đồng 21810310631 35% 20% 40% 3 Nguyễn Viết Tiến 21810310518 30% 20% 40% 3 III. Mô tả các tính năng của Ứng dụng 1.

Tổng quát về chương trình P - Thư mục res: là thư mục chứa các dữ liệu cần xây dựng trong game(âm thanh,hình ảnh, …) - Thư mục src Là thư mục chứa code để hình thành nên một game 4 2. File res Đây là nơi chứa các dữ liệu cần xây dựng trong trò chơi hoạt động. Sau đây là các lớp có trong res a. audio Đây là nơi chứa những đoạn âm thanh của game - bom.wav là phần chứa video âm thanh khi đặt bom ,và đây là âm thanh của nó - clear.wav là âm thanh khi chạy lại từ đầu - dead1.wav là âm thanh khi chết lần 1 - dead2.wav là âm thanh khi chết lần 2 trở đi - gameaudio.wav là âm thanh trò chơi - getitem.wav là âm thanh khi nhận các item trong game - homestay.mp3 là âm thanh khi ở màn hình chính -intro.wav là âm thanh giới thiệu -putbomb.wav là âm thanh khi đặt bom - b.font -phần này nói về các phông chữ trong game : +ARCADE.fxmlbên trong Đây là một tệp FXML được sử dụng để định dạng giao diện người dùng cho một ứng dụng JavaFX.

Tệp được viết bằng ngôn ngữ đánh dấu XML và chứa các thành phần giao diện như VBox, Label và Button. Trong tệp này, có một VBox được sử dụng để định dạng giao diện người dùng. VBox này có thuộc tính alignment được đặt là CENTER và thuộc tính spacing được đặt là 20.0, cho phép các thành phần con trong VBox được căn giữa và có khoảng cách 20 đơn vị giữa chúng. Trong VBox, có hai thành phần con: một Label với văn bản "Bomberman" và một Button với fx:id là "playButton" và văn bản "Play".

Button này có một xử lý sự kiện onAction được đặt là "#switchToGame", cho phép khi người dùng nhấp vào nó, ứng dụng chuyển sang giao diện trò chơi. Cuối cùng, VBox có một thuộc tính padding được đặt với giá trị của Insets, cho phép đặt khoảng cách giữa các cạnh của VBox và các thành phần con bên trong.level - bản đồ của level 0 : +Đây là một bản đồ cho trò chơi, được biểu diễn bằng các ký tự. Mỗi ký tự tương ứng với một vật thể trên bản đồ: "#" đại diện cho tường. " " đại diện cho một ô trống.

"p" đại diện cho nhân vật chính. "f" đại diện cho một quái vật. "*" đại diện cho một vật phẩm. 9 "1", "2", "5", "6" đại diện cho các cửa chìa khóa, và chúng cần một chìa khóa tương ứng để mở ra.

"t" đại diện cho một chìa khóa. "s" đại diện cho một cửa ra. "b" đại diện cho một quả bom. "d", "w", "x" đại diện cho các cửa đi qua, và chúng có thể mở hoặc đóng lại Bản đồ này có kích thước 13x19 và bao gồm các phần bên trong khoảng trống và các vật thể, hình ảnh một màn chơi của trò chơi.

- Bản đồ level 1 : +Đây là một bản đồ cho trò chơi, được biểu diễn bằng các ký tự. Mỗi ký tự tương ứng với một vật thể trên bản đồ: "#" đại diện cho tường. " " đại diện cho một ô trống. "p" đại diện cho nhân vật chính.

"f" đại diễn cho một quái vật. "*" đại diễn cho một vật phẩm. 10 "1", "2", "3", "4" đại diễn cho các cửa chìa khóa, và chúng cần một chìa khóa tương ứng để mở ra. "t" đại diễn cho một chìa khóa.

"s", "d", "w", "x" đại diễn cho các cửa đi qua, và chúng có thể mở hoặc đóng lại. Bản đồ này có kích thước 13x19 và bao gồm các phần bên trong khoảng trống và các vật thể, hình ảnh một màn chơi của trò chơi. Bản đồ level 2 : +Đây là một bản đồ cho trò chơi, được biểu diễn bằng các ký tự. Mỗi ký tự tương ứng với một vật thể trên bản đồ: "#" đại diễn cho tường.

" " đại diễn cho một ô trống. "p" đại diễn cho nhân vật chính. "f" đại diễn cho một quái vật. "*" đại diễn cho một vật phẩm.

"1", "2", "3", "4" đại diễn cho các cửa chìa khóa, và chúng cần một chìa khóa tương ứng để mở ra. "t" đại diễn cho một chìa khóa. 11 "s", "d", "w", "x" đại diễn cho các cửa đi qua, và chúng có thể mở hoặc đóng lại. Bản đồ này có kích thước 12x31 và bao gồm các phần bên trong khoảng trống và các vật thể, hình ảnh một màn chơi của trò chơi.

- Bản đồ level 3: +Đây là một bản đồ cho trò chơi, được biểu diễn bằng các ký tự. Mỗi ký tự tương ứng với một vật thể trên bản đồ: "#" đại diễn cho tường. " " đại diễn cho một ô trống. "p" đại diễn cho nhân vật chính.

"f" đại diễn cho một quái vật. "*" đại diễn cho một vật phẩm. "1", "2", "3", "4", "5", "6" đại diễn cho các cửa chìa khóa, và chúng cần một chìa khóa tương ứng để mở ra. "t" đại diễn cho một chìa khóa.

"s", "d", "w", "x" đại diễn cho các cửa đi qua, và chúng có thể mở hoặc đóng lại. 12 Bản đồ này có kích thước 12x31 và bao gồm các phần bên trong khoảng trống và các vật thể, hình ảnh một màn chơi của trò chơi.Sprites - bomb Sau đây là các hình ảnh theo thứ tự từ trên xuống như hình trên : 13 - Enemy : + Sau đây là các hình minh họa của enemy theo thứ tự từ trên xuống như hình trên : 14 - Illustrasions 15 + Sau đây là các hình ảnh trong mục illustrations theo thứ tự như hình trên - Map 16 + Sau đây là hình ảnh của các phần tử trong map theo thứ tự như hình trên - Player +Sau đây là các hình ảnh của các phần tử trong phần player : 17 - Powerup 18 Sau đây là các hình ảnh có trong phần powerup theo thứ tự như hình trên: - Hình ảnh giao diện 19 + các hình ảnh dưới đây sẽ phù hợp với thứ tự của hình trên : 20 21 22 3.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ