Bài toán yêu cầu xây dựng 1 game mà người chơi điểu khiển nhân vật trong một bản đồ 2D được lưu bởi mảng 2 chiều, trong đó mỗi ô tương ứng với một phần bản đồ với dạng khác nhau như: đá, cỏ, ..và các nhân vật như: quái vật, người chơi có thể di chuyển trên bản đồ.
Phân cơng thành viên nhóm Họ tên Cơng việc thực -Phân tích thiết kế mã nguồn Hoàn thành 100% -Phát triển mã nguồn -Làm báo cáo -Thuyết trình -Phân tích thiết kế mã nguồn 100% -Phát triển mã nguồn -Thiết kế đồ - Vẽ sơ đồ lớp -Phân tích thiết kế mã nguồn 100% -Phát triển mã nguồn -Thiết kế đồ -Làm báo cáo -Phân tích thiết kế mã nguồn -Phát triển mã nguồn -Thiết kế đồ -Làm báo cáo 100% I KHẢO SÁT, ĐẶC TẢ U CẦU BÀI TỐN Mơ tả yêu cầu toán Bài toán yêu cầu xây dựng game mà người chơi điểu khiển nhân vật đồ 2D lưu mảng chiều, tương ứng với phần đồ với dạng khác như: đá, cỏ, nhân vật như: quái vật, người chơi di chuyển đồ Các nhân vật người chơi kẻ thù có thuộc tính , số thể lực như: Attack, Speed, máu,…Người chơi công kẻ thù dùng skill đặc biệt Kẻ thù phát người chơi phạm vi tầm nhìn định, theo công người chơi Để chiến thắng, người chơi cần tiêu diệt hết kẻ thù theo Game chia thành màn, theo độ tăng địa hình đồ khó, nhiều kẻ thù nên đòi hỏi người chơi phải tập trung cao có kĩ chơi tốt để giành chiến thắng Trong người chơi tăng số nhân vật cách phá hộp, thùng đường nhặt bình thuốc Nội dung cải tiến Bản đồ Bản đồ đơn giản, tẻ nhạt, địa hình Bản đồ địa hình khó dần qua phẳng, kẻ thù màn, nhiều quái vật bẫy hơn, địi hỏi người chơi có kỹ chơi tốt Di chuyển Người chơi di chuyển sang Người chơi di chuyển sang trái, phải, nhảy chéo trái, chéo trái, phải, nhảy chéo trái, chéo phải phải Người chơi tăng tốc nhấn nút E Số Độ trễ với địa hình gần giống với cấp có địa hình khó nhiều trở ngại Hơi lag khắc phục độ trễ, khung hình ổn định Phân tích hệ thống II Dữ liệu hình ảnh Các hình ảnh game xây dựng dựa hình ảnh có sẵn youtube - Bản đồ được tạo thành lấy ô 32x32 từ img lớn(Hình 1) Sau vẽ đồ theo ý muốn phần mềm GIMP Hình outside - Về player kẻ thù, menu xây dựng dựa hình ảnh có sẵn youtube Nhóm em sử dụng ảnh dạng spritesheet để tạo animation chuyển động Hình Player_Sprites Hình Crabby_Sprites Hình Objects_Sprites Hình Potion_sprites Hình Menu Hình Button_menu Biểu đồ gói biểu đồ lớp 2.1 Giới thiệu hệ thống package ● entities : chứa class để tạo thành thực thể động như: người chơi, kẻ thù, ● Gamestates: Mô tả, định dạng trạng thái game chơi hay sử dụng mục menu… ● Inputs: package xử lí đầu vào từ bàn phím thao tác với chuột ● levels: package chứa class để tạo thành đồ game ● main: package chứa class Main class GamePanel quản lí tồn trạng thái, hành động, hình ảnh, thứ liên quan game ● objects: chứa class để tạo thành đồ vật game hộp, thùng, bình thuốc, … ● ui: chứa class tạo giao diện menu, chọn chế độ chơi, button,… ● utilz: Chứa class interface hỗ trợ class khác thực công việc cách dễ dàng hơn, helpmethods, giúp vẽ ảnh qua tên file LoadSave 2.2 Biểu đồ lớp Chi tiết lớp 3.1 Class Crabby Đây lớp kế thừa từ lớp Enemy, dùng để tạo hitbox attackbox quái vật, giúp xử lý va chạm vùng công quái vật + Crabby(float x, float y) : Vẽ quái vật có chiều cao, độ rộng theo đơn vị pixel , khung hitbox attackbox quái vật + initAttackBox() : Dùng để tạo vùng công quái vật, người chơi vùng bị chịu sát thương bắt đầu game cập nhật vị trí quái vật kiểm tra xem quái vật có khơng khí qi vật rơi xuống sàn Khi sàn quái vật chuyển sang trạng thái IDLE chuyển sang trạng thái RUNNING lúc quái vật RUNNING tuần tra phát người chơi vùng kiểm soát (isPlayerInSight) di chuyển đến đến gần nhân vật(move towards player), Đến khoảng cách định quái vật kiểm tra xem nhân vật có đủ gần để chuyển sang trạng thái cơng (isPlayerInRang) khơng tiếp tục di chuyển đến lại gần nhân vật Khi trạng thái ATTACKING kích hoạt qi vật thực animation công 3.3 Class Entity: Đây lớp cha quan trọng lớp thực thể động như: người chơi, kẻ thù kế thừa Trong lớp này, phương thức getter, setter nhóm em xây dựng thuộc tính liên quan đến tọa độ object, biến lưu hoạt ảnh, biến đếm, …Một số phương thức quan trọng như: + initHitbox(int width, int height): vẽ hitbox thực thể + getState(): hàm get trạng thái + drawAttackBox( ): hàm vẽ box công 3.4 Class player: Là lớp biểu tượng cho người chơi kế thừa từ lớp cha Entity + update( ): cập nhật trạng thái người chơi như: máu, vị trí cập nhật hoạt ảnh + setAnimation( ): từ trạng thái người chơi set lại hoạt ảnh nhân vật + loadAnimations( ): Xử lý việc tạo hiệu ứng chuyển động cho nhân vật đứng im, di chuyển, công + checkAttack(): Kiểm tra xem nhân vật gây sát thương chưa + updateAttackBox(): Thay đổi vùng công nhân vật nhân vật di chuyển, nhảy + updateHealthBar(): Cập nhật máu người chơi + drawUI(Graphics g): Vẽ máu lượng cho nhân vật + updatePos(): Thay đổi vị trí nhân vật di chuyển + resetAll( ): đưa nhân vật trạng thái IDLE, máu max 3.5 Class Menu + loadBackground(): cài đặt chiều cao, chiều rộng cho background chiều rộng, chiều cao cho nút option + loadButton(): khởi tạo nút lựa chọn cho menu + update(): cập nhật lại menu option + draw(Graphic g): vẽ bảng menu nút option game + resetButtons: đưa nút trạng thái ban đầu + keyPressed(KeyEvent e): nhấn giữ phím để bắt đầu chơi game + keyReleased(KeyEvent e): thả phím 3.6 Class Playing: loadNextLevel(): khởi tạo cấp chơi khó cấp cũ loadStartLevel(): khởi tạo cấp độ bắt đầu đối tượng calcLvOffset(): tính tốn cấp độ chơi initClasses(): mở rộng quy mô người chơi update(): cập nhật lại trạng thái checkCloseToBorder(): kiểm tra độ gần với đường biên draw(Graphics g): vẽ toàn phần background, layout, nhân vật, map drawClouds(Graphic g): Vẽ background mây đằng sau khung trò chơi resetAll(): Thực việc reset giá trị boolean, quái vật, người chơi vật phẩm qua setGameOver(), setLevelCompleted(boolean LevelCompleted), setMaxLvlOffset(int lvlOffset):Các setter để thay đổi giá trị boolean hỗ trợ logic việc trị chơi có hồn thành hay thất bại unpauseGame(): Khơng dừng trị chơi Và setter getter khác 3.7 Class LevelManager: Bản đồ phần quan trọng game, nơi để nhân vật: người chơi, quái vật, đối tượng thực hành vi Để tạo quản lí đồ ta cần tạo class LevelManager Lớp quản lí hình ảnh đồ theo Nhóm em tạo mảng chiều, vị trí mảng tương ứng với ô map, phần tử Để tạo hình ảnh ơ, ta thơng qua phương thức: + loadNextLevel(): Nếu cịn đồ hiển thị đồ tiếp theo, khơng cịn hiển thị menu, gamestate chuyển thành MENU + buildAllLevers(): Lưu toàn map tất chơi vào mảng BufferedImage + importOutsideSprites(): phương thức lấy hình ảnh địa hình bên ngồi từ ảnh outside chia thành 48 ô (4x12) + draw(Graphics g, int lvlOffset): vẽ hình ảnh đồ + update(): cập nhật đồ + getCurrentlLevel(): lấy Level + getAmountOfLevels(): số lượng level 3.8 Class GameObject: Đây lớp cha quan trọng lớp liên quan đến object như: container(thùng, hộp), potion(thuốc máu sát thương), spike kế thừa Trong lớp này, phương thức getter, setter nhóm em xây dựng thuộc tính liên quan đến tọa độ object, biến lưu hoạt ảnh, biến đếm, …Một số phương thức quan trọng như: + updateAnimationTick() : cập nhật hoạt ảnh objects: box, barrel, potion + reset(): thiết lập lại trạng thái active, doAnimation object + drawHitbox(Grapics g, int xLvOffset): vẽ Hitbox object Một số kĩ thuật hướng đối tượng sử dụng + Tính đóng gói: Hầu hết thuộc tính class khai báo với giới hạn truy cập private, đồng thời có getter, setter tương ứng + Tính kế thừa: Được thể rõ qua việc class Player, Enemy kế thừa từ class Entity, class Crabby kế thừa từ Enemy + Tính đa hình: Được thể qua việc lớp kế thừa từ lớp cha, phương thức lớp lại có xử lý khác + Tính trừu tượng: Thể qua số class kế thừa từ interface định nghĩa sẵn Java Runnable, KeyListener III XÂY DỰNG CHƯƠNG TRÌNH MINH HỌA Kết chương trình minh họa ● Kết đạt được: - Sau thời gian làm việc nhóm phát triển game, nhóm xây dựng chương trình đóng gói thành game 2D đơn giản ● ● Thông tin Game: - Tên game: Game PIRATE - Số dòng code: … - Số class: 34 - Số package: Các chức chính: - Tạo đồ, thể nhân vật với hình ảnh kỹ giao diện hình - Tạo lại đồ phần mềm GIMP - Chức Quit - Xác định va chạm vào vật tĩnh động Giao diện game ❖ Giao diện menu: Bao gồm nút bấm : PLAY ( bắt đầu chơi game), OPTIONS QUIT( thoát game) ❖ Giao diện ❖ Giao diện ❖ Giao diện ❖ Giao diện ❖ Giao diện thua game Kết luận Sau hoàn thành tập lớn, chúng em nhận thấy q trình thực đề tài cịn tồn số ưu điểm nhược điểm sau: ▪ Ưu điểm: Hoàn thành, đáp ứng đủ yêu cầu đề tài giao cho, xây dựng nhiều tính ưu hóa, nâng cao ngồi u cầu giúp nâng cao trải nghiệm người chơi, trò chơi chạy ổn định, khơng xuất lỗi q lớn, lối chơi trị chơi hấp dẫn, dễ nâng cấp, giao diện ổn, trực quan ▪ Nhược điểm: Chưa cải tiến nhiều, số lượng nhân vật cịn ít, đồ cịn đơn giản Mặt khác, thời gian bị hạn chế nên code chưa tối ưu, xuất nhiều lỗi nhỏ ▪ Sau hoàn thành tập lớn này, chúng em học nhiều điều phát triển phần mềm tư lập trình hướng đối tượng Vì sản phẩm nên thành viên hăng hái học hỏi ▪ Nhóm em cố gắng hoàn thiện phát triển game tương lai Nhóm khắc phục nhược điểm cải tiến thêm để game sinh động hấp dẫn người chơi IV KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Trong trình thực tập lớn này, chúng em học nhiều thứ Đầu tiên, chúng em vận dụng, làm quen với kiến thức học môn lập trình hướng đối tượng Theo sau, chúng em biết thêm kiến thức ngôn ngữ lập trình java Đặc biệt, chúng em rèn luyện tư duy, tìm hiểu sâu lập trình hướng đối tượng, nâng cao khả tự học tự tìm tịi kiến thức Chúng em biết cách làm để làm việc nhóm hiệu Một vài hướng phát triển tương lai: - Thêm nhiều objects cho game - Tạo thêm nhiều hình ảnh nhân vật để người chơi lựa chọn nhân vật - Một nhân vật có nhiều mạng có nhiều cơng cụ chiến đấu - Tạo thêm đồ sinh động hơn, chân thật, hấp dẫn - Thêm nhiều dạng kẻ thù với nhiều skill khác - Có thể chơi theo team - Sửa chữa lỗi cịn sót lại game V TÀI LIỆU THAM KHẢO 1, Slide giảng mơn lâp trình hướng đối tượng thầy Nguyễn Hoàng Anh Youtube Kaarin Gaming Link youtube: https://www.youtube.com/@KaarinGaming/playlists ... thực tập lớn này, chúng em học nhiều thứ Đầu tiên, chúng em vận dụng, làm quen với kiến thức học mơn lập trình hướng đối tượng Theo sau, chúng em biết thêm kiến thức ngơn ngữ lập trình java Đặc... ❖ Giao diện ❖ Giao diện ❖ Giao diện ❖ Giao diện ❖ Giao diện thua game Kết luận Sau hoàn thành tập lớn, chúng em nhận thấy trình thực đề tài tồn số ưu điểm nhược điểm sau: ▪ Ưu điểm: Hoàn thành,... giản Mặt khác, thời gian bị hạn chế nên code chưa tối ưu, cịn xuất nhiều lỗi nhỏ ▪ Sau hồn thành tập lớn này, chúng em học nhiều điều phát triển phần mềm tư lập trình hướng đối tượng Vì sản phẩm