GIỚI THIỆU TỔNG QUAN 2.Mục tiêu trò chơi Người chơi sẽ cố gắng đạt được điểm số cao nhất bằng cách giúp con chim vượt qua càng nhiều cặp ống càng tốt.. Pipe Đối tượng ống là chướng ngạ
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA AN TOÀN THÔNG TIN
-
-BÁO CÁO BÀI TẬP LỚN
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
- Đoàn Ngọc Dũng – B22DCAT047 (Nhóm trưởng)
- Đậu Nguyễn Lâm Hoàng – B22DCCN331
- Nguyễn Hồng Giáp – B22DCAT103
- Trần Đức Hiệp – B22DCAT114
Hà Nội 2024
Trang 2LỜI MỞ ĐẦU
Thực hiện nhiệm vụ của Thầy về yêu cầu xây dựng ứng dụng (desktopapp, web,…) bằng java Nhóm 09 chúng em đã quyết định xây dựng game TheFlappy Bird
Được sự tận tình giúp đỡ hướng dẫn của Thầy cùng với nỗ lực trong họctập, tìm tòi học hỏi, chúng em đã hoàn thành báo cáo Bài tập lớn của mình
Báo cáo này gồm 5 phần chính:
- Phần I: Giới thiệu tổng quan.
- Phần II: Các thư viện được sử dụng.
- Phần III: Các Class trong chương trình.
- Phần IV: Các hàm trong chương trình.
Trong quá trình thực hiện báo cáo, tuy đã cố gắng nhưng chúng em vẫncòn những hạn chế về thời gian tìm hiểu, kiến thức cũng như là kinh nghiệm vàvẫn còn nhiều sai sót.Chúng em rất mong được nhận những ý kiến đóng góp vànhận xét của Thầy để chúng em có thể hoàn thiện hơn
Trang 3LỜI CẢM ƠN
Đầu tiên, chúng em xin gửi lời cảm ơn sâu sắc đến Học viện Công nghệBưu chính Viễn thông đã đưa bộ môn Lập trình hướng đối tượng vào chươngtrình giảng dạy
Đặc biệt, chúng em xin bày tỏ long biết ơn sâu sắc đến Giảng viên bộmôn, thầy Ngô Tiến Đức Cảm ơn thầy đã tận tình dạy dỗ và truyền đạt nhữngkiến thức vô cùng quý báu Trong thời gian tham gia lớp học của thầy, chúng emcảm thấy vô cùng may mắn vì đã tiếp cận được nhiều kiến thức bổ ích, đượcthầy tận tình chỉ bảo, giúp đỡ !
Bộ môn Lập trình hướng đối tượng là một môn học vô cùng quan trọng và
bổ ích Tuy nhiên, những kiến thức và kỹ năng về môn học này chúng em vẫncòn hạn chế Do đó báo cáo Bài tập lớn khó tránh khỏi những sai sót Kínhmong thầy xem xét và góp ý giúp báo cáo của chúng em được hoàn thiện hơn !
Một lần nữa chúng em xin chân thành cảm ơn !
Hà Nội, ngày 7 tháng 11 năm 2024
Trang 4LỜI MỞ ĐẦU 2
LỜI CẢM ƠN 3
I GIỚI THIỆU TỔNG QUAN 5
1 Giới thiệu 5
2 Mục tiêu trò chơi 5
3 Lối chơi và cách điều khiển 5
4 Tính năng đặc biệt 5
II CÁC THƯ VIỆN ĐƯỢC SỬ DỤNG 6
1.Xây dựng cửa sổ trò chơi 6
2.Xây dựng tính năng trò chơi 6
III CÁC CLASS CỦA CHƯƠNG TRÌNH……… 6
1.Bird……….7
2.Pipe……….7
3.Item……….7
4.Flappybird……… 8
IV CÁC HÀM CỦA CHƯỜNG TRÌNH 1 actionPerformed……….9
2 keyPressed……….9
3 playsoundbg… ……… 15
4 playsoundpaimon ……… 15
5 Flappybird…….……… 16
6 collision………17
7 placePipies… ……….17
8 paintComponent……… 18
9 draw……….……… …….18
10.move……….……… ………20
Trang 5I GIỚI THIỆU TỔNG QUAN
2.Mục tiêu trò chơi
Người chơi sẽ cố gắng đạt được điểm số cao nhất bằng cách giúp con chim
vượt qua càng nhiều cặp ống càng tốt Mỗi cặp ống mà con chim bay qua thành công sẽ cộng thêm một điểm vào tổng điểm Trò chơi sẽ kết thúc khi con chim chạm vào ống cản trở hoặc chạm đất
3 Lối chơi và cách điều khiển
Điều khiển: Người chơi sử dụng một nút duy nhất để điều khiển chim bay
lên Khi người chơi nhấn phím SPACE, con chim sẽ nhảy lên một khoảng ngắn Nếu không nhấn, chim sẽ bị kéo xuống dưới do trọng lực
Cách chơi: Người chơi cần phải nhấn phím với tần suất và thời điểm phù
hợp để giúp con chim giữ độ cao, tránh va vào các ống cản trở Sự liên tục của các cặp ống và khoảng cách hẹp giữa chúng tạo ra mức độ khó cao, đòi hỏi người chơi có phản xạ nhanh và khả năng điều khiển khéo léo
4 Tính năng đặc biệt
Hiệu ứng âm thanh sống động: Khi chim bay qua mỗi cặp ống, một âm thanh vui tai phát ra, và khi gặp sự cố như va chạm, âm thanh kết thúc cũng được phát ra Điều này tăng thêm tính hấp dẫn và giúp người chơi nhận biết trạng thái của trò chơi mà không cần nhìn vào màn hình
Chế độ ‘Undead Mode’: Đây là một tính năng đặc biệt giúp người chơi
không bị mất mạng ngay cả khi va chạm với ống cản trở Chế độ này giúp trò chơi trở nên thú vị hơn
Các vật phẩm ngẫu nhiên: Trong quá trình chơi, người chơi sẽ bắt gặp một
số vật phẩm xuất hiện trên đường đi Mỗi vật phẩm sẽ có một hiệu ứng nhất định, chẳng hạn như:
Vật phẩm cộng điểm: Giúp người chơi tăng thêm 10 điểm và tốc độ di
chuyển khi thu thập
Vật phẩm trừ điểm: Tạo thêm thử thách bằng cách giảm 10 điểm của
người chơi khi va vào
Vật phẩm bật chế độ undead: Giúp người chơi kích hoạt chế độ undead
trong một thời gian ngắn (đủ điều kiện kích hoạt khi thu thập đủ 2 Item2)
Hình nền thay đổi: Dựa vào điểm số, hình nền trò chơi sẽ tự động thay đổi
để tạo cảm giác mới mẻ cho người chơi Điều này không chỉ giúp trò chơi bớt
Trang 6nhàm chán mà còn mang lại cảm giác tiến bộ khi điểm số của người chơi ngày càng tăng cao Hình nền sẽ thay đổi lần lượt ở các mốc 45, 85, 135 và 175.
II CÁC THƯ VIỆN ĐƯỢC SỬ DỤNG.
1 Xây dựng cửa sổ trò chơi
-javax.swing.*: Thư viện này đã được sử dụng để xây dựng giao diện của trò chơi Trong các lớp thuộc Swing, JFrame là thành phần chính để tạo cửa sổ ứng dụng, JPanel để bố trí và vẽ đồ họa, và JLabel hoặc JButton có thể dùng để hiển thị thông tin hoặc tạo các nút bấm (nếu cần)
2 Xây dựng tính năng trò chơi
- java.awt: Được dùng cho các lớp liên quan đến đồ họa và giao diện ví dụ như
các lớp Graphics và Color, vẽ hình ảnh và màu sắc
- java.awt.event: Thư viện này chứa các lớp và giao diện hỗ trợ xử lý sự kiện
Ví dụ, ActionListener giúp game nhận diện và xử lý các thao tác người chơi, như nhấn phím để điều khiển chú chim
- javax.swing: Phục vụ cho việc tạo giao diện, giúp xây dựng các thành phần
trực quan như cửa sổ game (JFrame), và thiết lập giao diện người dùng
- java.util.ArrayList: Dùng để quản lý danh sách động, chẳng hạn quản lý các
cột xuất hiện ngẫu nhiên hoặc điểm số qua các lần chơi
- java.util.Random: Tạo ra các giá trị ngẫu nhiên, như tọa độ xuất hiện của các
cột
- java.io: Giúp ghi và đọc dữ liệu từ các file.Phổ biến trong việc lưu và tải điểm
số cao hoặc cấu hình
- java.util.logging: Hỗ trợ ghi log, theo dõi các hoạt động trong quá trình chạy
chương trình, có ích trong việc phát hiện lỗi
- javax.sound.sampled: Được dùng để phát âm thanh, tạo các hiệu ứng âm
thanh khi chim bay lên, hoặc khi trò chơi kết thúc
III CÁC CLASS CỦA CHƯƠNG TRÌNH.
1 Bird
Nhân vật chính của trò chơi, được người chơi điều khiển xuyên suốt quá trình chơi
Trang 7Class này định nghĩa một đối tượng cho chim trong trò chơi, chứa các thuộc tínhnhư vị trí, kích thước và hình ảnh.
2 Pipe
Đối tượng ống là chướng ngại vật chính của trò chơi được tạo ra 1 cách ngẫu nhiên theo chu kì, ống trên sẽ được tạo ra trước để lại 1 khoảng trống có kích thước bằng 1/4 màn hình trò chơi và tạo ra ống dưới sau đó
Class này định nghĩa các ống mà chim sẽ bay qua Nó chứa các thuộc tính như
vị trí, kích thước và hình ảnh
3 Item
Các vật phẩm người chơi có thể nhặt trong quá trình chơi Có 3 loại Item bao gồm: Item tăng điểm (kèm theo tăng tốc độ chim), Item giảm điểm (các thao tác của chim bị đảo ngược, chim bay ngược về phía sau, trọng lực bị trừ hết và đảo ngược) và Item sao vàng (đủ điều kiện kích hoạt trạng thái Undead khi thu thập
đủ 2 sao)
Trang 8Class này định nghĩa các vật phẩm mà chim có thể thu thập Nó cũng chứa các thuộc tính như vị trí, kích thước và hình ảnh.
4 Flappybird
Đây là lớp chính, kế thừa từ JPanel và thực hiện hai giao diện ActionListener và KeyListener Trong lớp này có 3 đối tượng bên trong có tác dụng như bộ não của trò chơi, chứa tất cả các hàm xử lý
Trong lớp này có ba lớp bên trong:
Đối tượng Bird: Đại diện cho con chim trong game.
Đối tượng Pipe: Đại diện cho các ống cản.
Đối tượng Item: Đại diện cho các vật phẩm (items) trong trò chơi.
Trang 10+Xử lý khi xảy ra sự kiện bấm phím “SPACE”:
Khi Bird đang trong trạng thái bình thường, nút SPACE sẽ giúp chim di chuyển
1 khoảng 9 đơn vị theo chiều hướng lên trên Còn nếu đang trong trạng thái trọng lực âm do nhặt được Item giảm điểm nút SPACE sẽ giúp chim rơi xuống 9đơn vị
+Xử lý khi xảy ra sự kiện bấm phím Z:
Trang 11
Người chơi sẽ đặt đủ điều kiện kích hoạt trạng thái undead khi nhặt được 2 Item ngôi sao và có thể nhấn nút Z bất kì lúc nào để kích hoạt trạng thái này Khi kíchhoạt người chơi sẽ miễn nhiễm với tất cả ống và tiêu hao toàn bộ thanh năng lượng.
+Xử lý khi xảy ra sự kiện bấm phím N:
Trang 12
Lựa chọn bấm phím N hoặc Y khi bắt đầu trò chơi để kích hoạt âm thanh của tròchơi hoặc không Khi chọn bấm phím N (chọn không tắt âm thanh) tất cả trò chơi sẽ được reset và bắt đầu phát các hiệu ứng âm thành bao gồm nhạc nền và các hiệu ứng âm thanh tương tác.
Trang 13
Trong khi chơi người chơi có thể bấm phím P (Pause) để tạm dùng trò chơi Khi
đó hình nền sẽ được thay đổi và người chơi có thể đưa ra 1 vài lựa chọn mới:
Các phím dưới đây chỉ có thể kích hoạt khi game đang trong trạng thái Pause:+Nếu chọn phím C:
Trang 14Khi bấm phím C trò chơi sẽ không có gì thay đổi và vẫn tiếp tục.+Nếu chọn phím R:
Trò chơi sẽ được reset và người chơi sẽ bắt đầu lại từ đầu
+Nếu chọn phím S:
Trang 15Trò chơi sẽ được chuyển sang trạng thái có âm thanh, nhạc nền và hiệu ứng âm thanh sẽ được kích hoạt.
Trang 16clip = AudioSystem.getClip(); tạo một đối tượng Clip, đại diện cho âm thanh sẽ được phát.
clip.open(ado); mở AudioInputStream (âm thanh) để clip có thể phát lại nội dung từ tệp âm thanh
Trang 17Đảm nhận nhiệm vụ thiết lập môi trường ban đầu cho trò chơi, bao gồm cài đặt các thành phần hình ảnh, âm thanh và bộ đếm thời gian (timers) để quản lý vònglặp của trò chơi Bao gồm:
+Thiết lập các thuộc tính cơ bản của trò chơi
+Tải hình ảnh các thành phần của trò chơi
+Khởi tạo các đối tượng trò chơi
+Thiết lập Timer để tạo ra các ống mới và điều khiển vòng lặp trò chơi
Trang 18Có nhiệm vụ tạo ra ống nước 1 cách random, ống trên sẽ được tạo trước và để lại 1 khoảng trống đúng bằng 1/4 độ dài màn hình và tạo ống dưới tương ứng.-Phương thức paintComponent(Graphics g):
Thuộc lớp Flappybird và được gọi mỗi khi cần vẽ lại giao diện trò chơi Đây là một phương thức quan trọng trong các chương trình giao diện đồ họa, đặc biệt làtrong các trò chơi, vì nó quyết định cách thức hiển thị các đối tượng trên màn hình
-Hàm void draw(Graphics g):
Chịu trách nhiệm vẽ tất cả các thành phần trò chơi trên màn hình dựa trên trạng thái của trò chơi, như trạng thái bắt đầu, tạm dừng, điểm số, hình nền thay đổi theo điểm số, các ống nước, chim, vật phẩm và chế độ game over
+Vẽ màn hình trạng thái chờ:
Trang 19+Vẽ màn hình trạng thái Pause:
+Vẽ hình nền trò chơi khi đạt các mốc điểm mới:
+Vẽ các trạng thái của chim (trạng thái bình thường, bay lên, bay xuống và undead):
+Vẽ ống nước và các Item trong trò chơi:
Trang 20+Vẽ thông báo gameover:
+Hiển thị khi người chơi đạt đủ điều kiện kích hoạt Undead:
Trang 21-Hàm void move():
Đảm nhiệm vai trò quan trọng trong việc điều chỉnh các yếu tố chuyển động của trò chơi, bao gồm chim, ống, và các vật phẩm
+Điều chỉnh vị trí và trọng lực của chim:
+Điều chỉnh và di chuyển các đường ống:
Tính toán tốc độ của ống dựa trên điểm số: ssspeed được tính bằng cách chia
score cho 10 Điểm số càng cao thì ssspeed càng lớn, làm tăng tốc độ di chuyển của các ống
Di chuyển ống: Vị trí x của các ống giảm dần để chúng di chuyển từ phải sang
trái
Cộng điểm khi vượt qua ống: Nếu chim đã bay qua ống mà chưa được tính
điểm, score tăng thêm 0.5 và pipe.passed đánh dấu ống đã được chim vượt qua
Xử lý va chạm: Nếu chim chạm vào ống, trò chơi kết thúc.
+Điều kiện đặt lại tốc độ ống và hẹn giờ:
Trang 22+Điều chỉnh trạng thái energy:
+Di chuyển và cập nhật trạng thái của Item2 (Sao):
+Di chuyển và cập nhật trạng thái của Item1: