Cac tro choi theo chu de đặt bom

Share:

Trong bài xích tập béo này, nhiệm vụ của doanh nghiệp là viết một phiên phiên bản Java mô bỏng lại trò đùa Bomberman bom tấn của NES.

Bạn đang đọc: Cac tro choi theo chu de đặt bom

*

Bạn rất có thể thể áp dụng mẫu mã nguồn dưới đây để làm starter project:

Mô tả về các đối tượng người tiêu dùng trong trò chơi

Nếu bạn đã từng chơi Bomberman, các bạn sẽ cảm thấy rất gần gũi với những đối tượng người sử dụng này. Bọn chúng được được chia thành hai loại đó là nhóm đối tượng động (Bomber, Enemy, Bomb) với nhóm đối tượng người dùng tĩnh (Grass, Wall, Brick, Door, Item).

Các Item cũng được giấu phía đằng sau Brick và chỉ hiển thị khi Brick bị phá hủy. Bomber rất có thể sử dụng Item bằng cách di chuyển vào địa điểm của Item. Thông tin về tác dụng của các Item được liệt kê như bên dưới đây:

Có nhiều một số loại Enemy trong Bomberman, mặc dù trong phiên bản này chỉ yêu thương cầu thiết lập hai loại Enemy dưới đây (nếu thiết lập thêm những loại khác sẽ được cộng thêm điểm):

Mô tả game play, xử lý va chạm và xử lý bom nổ

Trong một màn chơi, Bomber sẽ tiến hành người nghịch di chuyển, đặt cùng kích hoạt Bomb cùng với mục tiêu đó là tiêu diệt toàn bộ Enemy cùng tìm ra địa điểm Portal để hoàn toàn có thể qua màn mới

Bomber có khả năng sẽ bị giết lúc va chạm tới Enemy hoặc trực thuộc phạm vi Bomb nổ. Dịp đấy trò đùa kết thúc.

Enemy bị hủy diệt khi ở trong phạm vi Bomb nổ

Một đối tượng người dùng thuộc phạm vi Bomb nổ có nghĩa là đối tượng đó va chạm tới một trong những tia lửa được tạo thành tại thời điểm một đối tượng người tiêu dùng Bomb nổ.

Khi những Flame xuất hiện, nếu có một đối tượng người dùng thuộc loại Brick/Wall nằm trên địa chỉ một trong những Flame thì độ lâu năm Flame đó sẽ tiến hành giảm đi để sao để cho Flame chỉ xuất hiện thêm đến vị trí đối tượng người dùng Brick/Wall theo phía xuất hiện. Lúc đó chỉ có đối tượng người tiêu dùng Brick/Wall bị tác động bởi Flame, các đối tượng tiếp theo không bị hình ảnh hưởng. Còn nếu thứ cản Flame là một đối tượng Bomb không giống thì đối tượng Bomb đó cũng trở thành nổ ngay lập tức.

Mô tả starter project

Xem comment ở starter project

Yêu cầu chung

Có thể nghịch được ít nhất cho một màn chơi (chiến chiến thắng một màn chơi)Có thể chuyển đổi được tệp cấu hình khác đến màn chơi (tương trường đoản cú mẫu cho trước)

Nhiệm vụ của người sử dụng (tối nhiều +12đ)

Gói yêu cầu (+8đ)Di đưa Bomber theo sự điều khiển từ tín đồ chơi +2đTự động dịch chuyển các Enemy +1đXử lý va va cho các đối tượng Bomber, Enemy, Wall, Brick, Bomb +1đXử lý bom nổ +1đXử lý lúc Bomber sử dụng các Item cùng khi bước vào vị trí Portal +1đGói tùy lựa chọn một (+3đ)Tự kiến tạo project nhưng không dùng starter code (+3đ)Gói tùy lựa chọn 2 (tối đa +4đ)Nâng cấp thuật toán tìm đường đến Enemy +0.5đ

Cài để thêm các loại Enemy khác: +0.25đ cho từng loại enemy

Cài để thuật toán AI mang đến Bomber (tự chơi) +1đ

Xử lý hiệu ứng music (thêm music & sound effects) +1đ

Phát triển hệ thống server-client bỏ nhiều người rất có thể cùng đùa qua mạng LAN hoặc internet +1đ

Những ý tưởng phát minh khác sẽ được reviews và cộng điểm theo nấc tương ứng

Lưu ý:

Gói tùy chọn 1 chỉ được xem điểm khi ngừng ít độc nhất 1 nhiệm vụ ở Gói phải và phần mã nguồn bạn viết rất khác starter project số 1 quá 20%

Tham khảo:

Hướng dẫn bỏ ra tiếtProject được gây ra xây dựng hoàn toàn bằng các thư viện có sẵn của java với thiết bị họa thực hiện Java Swing.

Xây dựng phiên bản đồ màn chơi từ tệp cấu hình:


Nhiệm vụ của người tiêu dùng là lấy các thông tin về địa chỉ của các đối tượng ở trong tệp cấu hình và hiển thị vào trong game.

Tệp cấu hình mẫu có thể tải về tại chỗ này và đặt trong folder res/levels

Trong đó:

Dòng thứ nhất gồm 3 số nguyên gồm những: số trang bị tự của màn chơi (ví dụ cấp độ 1 thì có mức giá trị là 1), số hàng R và số cột C của màn chơi.

Tiếp là ma trận R x C tất cả R dòng, từng dòng bao gồm chứa C cam kết tự chứa cục bộ thông tin vị trí của các đối tượng trong game.

Trong đó:


# - Wall: tường


* - Brick: gạch


x - Portal: cổng xong game


p - Bomber: Nhân đồ vật chính


1 - Balloon: Nhân đồ gia dụng Balloon hình trơn bay

b - Bomb Item: cửa nhà tăng con số bom


f - Flame Item: item tăng sức công phá của bom


s - tốc độ Item: tòa tháp tăng tốc độ của tín đồ chơi


Kí tự khác các kí tự bên trên - Grass: Cỏ nền

Để tiến hành bài tập này, các các bạn sẽ phải sửa lại lớp FileLevelLoader được thừa kế từ LevelLoader. Vào đó, sinh sống hàm loadLevel(), chúng ta phải hiểu file thông số kỹ thuật và lưu trữ ma trận chứa thông tin của các đối tượng vào mảng ma trận 2d cho trước _map. Quanh đó mảng _map , bạn cũng cần cập nhật các ở trong tính _level , _width , _height vào lớp FileLevelLoader để các đối tượng người dùng khác trong game hoàn toàn có thể lấy được thông tin. Chú ý, file cấu hình lưu vào resources của project nên bạn phải hiểu file theo resources chứ chưa phải đường dẫn bình thường, xem thêm các hàm Class.getResourceAsStream và Class.getResource() hoặc nghỉ ngơi đây.

Sau đó, chúng ta phải sửa lại hàm createEntities () để đọc những thông tin trong mảng _map với hiển thị vào game. Trong hàm đã gồm ghi chú và các ví dụ để tạo bắt đầu và hiển thị các đối tượng trong game.

Lưu ý là vào Game có 2 dạng tọa độ chính: Tile và Pixel. Trong số đó tọa độ tile là tọa độ số nguyên tương ứng với tọa độ của đối tượng trong mảng _map. Còn tọa độ px là tọa độ số thập phân tương ứng với tọa độ được hiển thị trong Game. Bạn xem thêm lớp Coordinates để biến đổi giữa 2 nhiều loại tọa độ. Lúc hiển thị đối tượng người dùng (bằng cách gọi hàm Entity.render()), ta áp dụng tọa độ Pixel. Khoác định, các đối tượng kế thừa lớp Character gồm tham số x, y sinh sống Constructor là tọa độ px vì các đối tượng người dùng này hoàn toàn có thể di chuyển đề nghị vị trí thường là số thập phân. Còn các đối tượng người sử dụng tĩnh, không di chuyển kế vượt lớp Tile đang nhận thông số x, y là tọa độ Tile. Tham khảo hàm Tile.render() để mày mò thêm.

Di gửi Bomber theo sự tinh chỉnh và điều khiển từ người chơi


Nhiệm vụ này yêu thương cầu tinh chỉnh nhân vật dụng bomber áp dụng bàn phím và dịch chuyển màn hình theo nhân đồ dùng bomber.

Trong phần này, các bạn tham khảo 2 lớp Keyboard với Bomber. Lớp Keyboard có nhiệm vụ nhận và giải pháp xử lý input từ keyboard của fan dùng, chúng ta không yêu cầu sửa lớp này.

Lớp Bomber thay mặt cho nhân thứ bomber. Để di chuyển, các bạn cần sửa lại những hàm calculateMove (), canMove () và move ().

Hàm move () di chuyển nhân thiết bị đến địa điểm xác định. Ở đây, bạn áp dụng canMove () để kiểm soát xem nhân vật có thể di chuyển tới điểm đã tính toán hay không và thực hiện đổi khác các tọa độ _x , _y. lưu ý bạn phải cập nhật giá trị thuộc tính _direction (hướng đi của nhân vật) khi dịch rời để animation được hiển thị thiết yếu xác.

Hàm calculateMove () xử lý nhận tín hiệu tinh chỉnh hướng đi từ _input và call move () để thực hiện di chuyển. Chúng ta phải tích toán khoảng cách theo cả nhị trục x cùng y mà lại nhân đồ gia dụng bomber sẽ dịch rời dựa trên vận tốc của nhân vật. Để mang tốc độ di chuyển của nhân vật, chúng ta sử dụng Game.getPlayerSpeed (). Chúng ta lưu ý nhớ cập nhật lại quý giá cờ _moving khi thay đổi trạng thái di chuyển, khi dịch rời thì nhằm giá trị bởi true , còn ko thì để là false. Giá trị này sẽ bình chọn để hiển thị animation mang đến nhân vật.

Hàm canMove () kiểm tra xem nhân vật rất có thể di chuyển đến vị trí đó không. Bạn phải kiểm tra xem địa chỉ cần dịch chuyển tới có đối tượng người tiêu dùng nào ở đó chưa. Để tìm đối tượng người dùng tại 1 địa điểm nhất định, bạn sử dụng hàm Board.getEntity (double x , double y , Character m ) trong số đó m là đối tượng người dùng cần xét va chạm. Hàm vẫn trả về đối tượng người tiêu dùng nằm ở chỗ x, y và chưa phải là m. Thêm nữa, bạn phải sử dụng hàm collide () vào lớp entity để khám nghiệm 2 đối tượng người sử dụng có được xem là va chạm hay không (phần 4 sẽ miêu tả chi tiết). Nếu có va đụng thì quán triệt di chuyển.

Lưu ý, khi di chuyển nhân đồ bomber, bạn sẽ gặp trường phù hợp nhân vật dụng không dịch chuyển hoàn toàn vào ở trung tâm ô dẫn cho khi di chuyển 1 số hướng có khả năng sẽ bị vướng không đi được. Vì đó, lúc nhân vật di chuyển đến gần sát điểm bao gồm giữa, bạn nên lập trình di chuyển hẳn nhân vật dụng đó ra giữa.

Tự động di chuyển các Enemy


Tương trường đoản cú như dịch rời nhân vật bomber, các bạn sẽ phải chỉnh sửa những hàm calculateMove (), canMove () cùng move () vào lớp Enemy. Chú ý là thay bởi lấy đầu vào nhập từ bàn phím thì bạn sẽ lấy phía đi của đối tượng người dùng từ nằm trong tính _ai qua hàm AI.calculateDirection ().

Xem thêm: Hướng Dẫn Tải Và Cài Đặt Anno 1404 Thành Công 100%, Anno 1404 Việt Hoá Là Ghiền :D

Với AI đơn giản dễ dàng nhất là đi ngẫu nhiên, bạn phải sửa lại những lớp AILow nhằm trả về quý hiếm ngẫu nhiên. Bài toán quy định giá trị số nguyên trả về tương ứng với hướng đi nhé là do chúng ta tự quyết định.

Xử lý va va cho các đối tượng người sử dụng Bomber, Enemy, Brick, Bomb


Ở đây các các bạn sẽ phải sửa hàm collide () của toàn bộ các đối tượng người tiêu dùng Bomber , Enemy , Wall , Brick , Bomb. Các hàm dìm tham số là một đối tượng người sử dụng Entity ngẫu nhiên này trả về false nếu xác định có va đụng với đối tượng đó cùng true vào trường thích hợp không va chạm. Đồng thời, hàm cũng xử lý những sự kiện cần thiết trong game:

* ví như Brick va tiếp xúc với Flame thì Brick sẽ bị hủy diệt. Tìm hiểu thêm hàm DestroyableTile.destroy ().

* trường hợp Bomb va chạm tới Flame thì sẽ tự động hóa nổ. Tìm hiểu thêm hàm Bomb.explode ()

* giả dụ Bomber va chạm với Flame hoặc Enemy thì sẽ ảnh hưởng chết. Tìm hiểu thêm hàm Bomber.kill ().

* giả dụ Enemy va chạm với Flame thì có khả năng sẽ bị chết.


Các hàm này được gọi trong những trường phù hợp muốn xác minh một đối tượng rất có thể được di chuyển hay ko (hàm Bomber.canMove ()và Enemy.canMove ()) hay xử trí khi bom nổ (hàm Flame.calculatePermitedDistance ()).

Bạn chú ý với Bomb , lúc nhân vật bomber khi ban đầu đặt bom thì nhân đồ vật bomber nằm cùng vị trí với bom. Khi ấy để nhân đồ dùng bomber dịch chuyển được thì hàm collide () của Bomb phải xác minh xem bomber đang có cùng vị trí (nằm trong) bom tuyệt không, nếu gồm thì phải trả về false để nhân vật có thể đi qua. Ngược lại, khi nhân vật đã đi ra phía bên ngoài bom cùng đi vào, bắt buộc trả về true để chặn lại.

Xử lý bom nổ


Nhiệm vụ này yêu ước phải thiết lập để bomber rất có thể đặt bom và kích hoạt bom nổ.

Để đặt bom, hãy tham khảo hai thủ tục detectPlaceBomb () và placeBomb () trong lớp Player.

Phương thức detectPlaceBomb () kiểm tra những điều kiện hoàn toàn có thể đặt bom xuất xắc không, bao gồm: có nhận tín hiệu đặt bom từ fan chơi ( _input.space ), thời hạn giữa nhị lần để bom và bạn chơi còn bom để đặt hay không. Các bạn cần tìm hiểu thêm hàm Game.getBombRate () cùng thuộc tính Game._timeBetweenPutBombs. Hàm Game.getBombRate () vẫn trả về số lượng bom rất có thể đặt tiếp tục tại thời khắc hiện tại, tức con số bom sót lại của người chơi. Mặc định số bom đặt tối đa ở 1 thời điểm là 1, chúng ta có thể điều chỉnh quý hiếm này ngơi nghỉ Game.BOMBRATE. ở trong tính _timeBetweenPutBombs dùng để làm ngăn ngăn Bomber để 2 bom cùng tại một vị trí trong 1 khoảng thời hạn quá ngắn. Khi đặt bom, bạn hay để quý hiếm này bằng 30 (tương ứng cùng với 30 khung hình) hoặc một số lượng bất kì. Sau mỗi khung hình (mỗi lần gọi hàm update ()), giá trị này giảm sút 1 1-1 vị. Ta đang quy cầu khi cực hiếm này nhỏ dại hơn 0 là có thể đặt được bom. Ví như 3 đk trên thỏa mãn thì tiến hành đặt bom bởi Bomber ()

Lưu ý, sau khi đặt bom, ghi nhớ giảm con số BombRate đi 1 (tham khảo hàm Game.addBombRate ()).

Với cách làm placeBomb (), bạn chỉ dễ dàng và đơn giản là thêm một đối tượng người tiêu dùng Bomb vào bạn dạng đồ ( _board ).

Tiếp theo là xử trí bom nổ, trước tiên hãy tham khảo lớp Bomb. Thuộc tính _timeToExplode xác định xem bom đã có được nổ giỏi không. Quý hiếm khởi tạo là 120, sau mỗi size hình, giá trị này giảm đi 1 cho đến 0 thì bom có thể nổ được. Có nghĩa là sau 123 khung hình (khoảng 2 giây) thì bom sẽ tự động nổ. Lúc đó, ta sẽ gọi thủ tục explode () để kích hoạt nổ bom. Trọng trách đầu tiên của người sử dụng là sửa lại cách làm này. Trong phương thức, bạn sẽ phải soát sổ xem nhân ái vật (bomber hoặc kẻ thù) có ở trong phần đặt bom xuất xắc không, nếu có thì nhân vật dụng sẽ chết ngay lập tức bằng phương pháp gọi hàm Character.kill (). Lúc bom nổ, bom sẽ ra đời 4 tia lửa tương ứng với bốn hướng trái, phải, trên, dưới. Mỗi tia lửa đã là một đối tượng người sử dụng thuộc lớp Flame. Bạn phải gán quý giá vào mảng _flames vào lớp Bomb để sử dụng sau này.

Tiếp theo, mỗi Flame hoàn toàn có thể có độ lâu năm ngắn khác nhau tùy trực thuộc vào sức khỏe của bom (có thể nạp năng lượng item nhằm tăng) và tia lửa bao gồm bị chặn lại bởi đối tượng người tiêu dùng khác giỏi không. Độ dài này là số nguyên tính thông qua số ô cơ mà tia lửa kéo dài. Mỗi Flame bao gồm thể có rất nhiều FlameSegment , có nghĩa là các đoạn lửa nhỏ, khớp ứng với một ô trên bạn dạng đồ. Nhiệm vụ của bạn là sửa lại hàm createFlameSegments () với calculatePermitedDistance (). Cách tiến hành calculatePermitedDistance () sẽ đo lường độ dài của tia lửa. Lưu ý là nếu tia lửa tiếp xúc với các đối tượng khác (ví dụ là tường) thì sẽ bị chặn lại. Thủ tục createFlameSegments () sẽ tạo nên ra những tia lửa với gán vào mảng _flameSegments. Chú ý, thông số last vào Constructor của FlameSegment để xác minh tia lửa bao gồm phải cuối cùng hay ko (vì phần đầu tia lửa có làm ra khác so với các phần khác).

Xử lý lúc Bomber sử dụng những Item cùng khi lấn sân vào vị trí Portal


Nhiệm vụ này bạn sẽ phải cách xử trí trường thích hợp Bomber ăn các item. Có 3 các loại Item: BombItem góp tăng con số tối đa bomb được đặt cùng lúc ở một thời điểm, FlameItem giúp tăng độ dài của tia lửa khi bom nổ, SpeedItem giúp tăng vận tốc chạy của nhân đồ vật Bomber. Ở đây, các bạn phải sửa hàm collide () trong những lớp tương ứng là BombItem , FlameItemSpeedItem. Với mỗi loại, các bạn sẽ tăng thêm vào cho nhân vật tương ứng tác dụng. Tham khảo các trực thuộc tính bombRate , bombRadiusbomberSpeed trong lớp Game.

Xử lý khi bước vào vị trí Portal , tức là xong game, các bạn cần chỉnh sửa lại hàm collide () trong lớp Portal. Lưu ý là khi toàn bộ các kẻ địch đều bị hủy hoại thì mới gồm thể kết thúc trò chơi. Để xong xuôi màn đùa cũ và đưa sang màn mới, hãy sử dụng _board.nextLevel ().

Nâng cung cấp thuật toán tìm kiếm đường cho Enemy và thiết lập thêm các Enemy khác

Bạn tất cả thể setup lại thuật toán kiếm tìm đường cho những Enemy để tăng độ khó của game. Hãy viết thêm AI mới bằng phương pháp kế vượt lớp AI và thiết đặt hàm calculateDirection (). Chúng ta cũng có thể tùy ý sử dụng bất cứ thông tin như thế nào trong trò chơi (ví dụ thông tin bản đồ, vị trí của Bomber,...) để giao hàng cho việc tính toán (hãy truyền những thông tin này qua Constructor).

Bạn tất cả thể thiết đặt thêm những Enemy khác bằng phương pháp kế vượt lớp Enemy (tương từ bỏ như nhân đồ gia dụng Balloon ). Bạn phải thiết đặt hàm chooseSprite (), hàm này lấy các thông tin quan trọng (thường là _direction_moving ) để chọn ra Sprite tương ứng để hiển thị (gán vào ngôi trường _sprite ).

Các sprite tất cả sẵn cho những nhân trang bị Oneal, Dall, Minvo cùng Doria. Những nhân trang bị này có tương đối nhiều phiên phiên bản game khác nhau với những đặc tính khác nhau. Vì chưng đó, ta thống tốt nhất là thiết lập đặc tính của nhân vật theo phiên bản của NES. Bạn cũng có thể phải thêm AI, cách xử lý va đụng hoặc các phần không giống để thiết đặt các công năng riêng của nhân vật.

Các nhân thiết bị Ovape, Pontan cùng Pass cũng đã có sẵn trong file textures nhưng không được load vào game).

Nâng cấp cho thuật toán đến Bomberman (tự chơi)

Thay vày lấy input từ người tiêu dùng nhập vào, bạn sẽ cài đặt thuật toán nhằm Bomberman có thể tự chơi. Xem thêm cách áp dụng AI của Enemy để tải đặt. Bạn cũng có thể cài để tùy ý phần

Xử lý hiệu ứng âm thanh

Hiện tại game chưa thiết kế để mang âm thanh vào. Bạn có thể thêm music vào trong game, bao gồm âm thanh nền và music của các event trong trò chơi (bom nổ, nhân đồ dùng chết, chiến hạ cuộc, ăn item,...). Chú ý âm thanh nền với event là độc lập với nhau, tức việc phát âm nhạc sự khiếu nại không ảnh hưởng đến âm thanh nền.

Phát triển khối hệ thống client-server để có thể cùng đùa qua mạng LAN hoặc Internet.

Ta rất có thể phát triển phiên bạn dạng multiplayer mang lại game để hoàn toàn có thể chơi qua mạng cùng với nhau.

Bạn rất có thể tùy ý thiết lập phần này, để ý phải đảm bảo an toàn các máy đồng điệu realtime cùng với nhau.

Bài viết liên quan