LỜI NÓI ĐẦUNgôn ngữ lập trình Java từ lâu đã trở thành một công cụ mạnh mẽ và phổ biến trong việc phát triển các ứng dụng đa nền tảng, đặc biệt là trong lĩnh vực lập trình game.. Với khả
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA ĐA PHƯƠNG TIỆN - -
BÁO CÁO BÀI TẬP LỚN MÔN: NGÔN NGỮ LẬP TRÌNH JAVA
Trang 2LỜI NÓI ĐẦU
Ngôn ngữ lập trình Java từ lâu đã trở thành một công cụ mạnh mẽ và phổ biến trong việc phát triển các ứng dụng đa nền tảng, đặc biệt là trong lĩnh vực lập trình game Với khả năng hỗ trợ đồ họa 2D phong phú cùng thư viện đa dạng, Java mang lại nhiều cơ hội để hiện thực hóa các ý tưởng sáng tạo và phát triển các trò chơi hấp dẫn
Trong bài tập lớn này, nhóm 06 chúng em chọn đề tài phát triển Game 2D
nhằm áp dụng các kiến thức đã học về lập trình Java Đề tài không chỉ giúp củng cố
lý thuyết về lập trình hướng đối tượng, quản lý sự kiện, mà còn mở rộng khả năng
xử lý đồ họa, âm thanh và tương tác với người chơi Thông qua dự án, chúng tôi mong muốn tạo ra một sản phẩm hoàn chỉnh, vừa mang tính giải trí, vừa thể hiện khả năng lập trình và tư duy sáng tạo
Bài báo cáo này sẽ trình bày quá trình nghiên cứu, thiết kế, và phát triển game 2D, đồng thời nêu rõ những thách thức gặp phải cùng bài học kinh nghiệm rút ra từ
dự án Chúng tôi hy vọng rằng sản phẩm này không chỉ đáp ứng yêu cầu của bài tậplớn, mà còn là tiền đề cho các dự án lập trình sau này
Lời cuối cùng, nhóm chúng em xin gửi lời cảm ơn chân thành đến thầy Vũ HữuTiến - người đã tận tình hướng dẫn, giảng dạy và truyền đạt những kiến thức quý báutrong suốt học phần Ngôn ngữ lập trình Java Chính sự nhiệt huyết và hỗ trợ của thầy
đã giúp chúng em hoàn thành bài tập lớn này một cách tốt nhất Xin chúc thầy nhiềuthành công và hạnh phúc trong cuộc sống!
Trang 3MỤC LỤC
LỜI NÓI ĐẦU 1
MỤC LỤC 2
CHƯƠNG I: GIỚI THIỆU 3
1 Đặt vấn đề 3
1.1 Lý do chọn đề tài 3
1.2 Giới thiệu game 4
2 Nội dung liên quan 5
2.1 Khảo sát 5
2.2 Công cụ, phần mềm hỗ trợ phát triển sản phẩm 5
3 Kết luận chương 6
CHƯƠNG II: MÔ TẢ SẢN PHẨM 7
1 Các Module chính 9
CHƯƠNG III: KẾT QUẢ VÀ ĐÁNH GIÁ 12
1 Hình ảnh sản phẩm 12
2 Đánh giá sản phẩm 15
TÀI LIỆU THAM KHẢO 16
PHÂN CÔNG CÔNG VIỆC 16
Trang 4CHƯƠNG I: GIỚI THIỆU
1 Đặt vấn đề
1.1 Lý do chọn đề tài
Game Tetris là một trong những trò chơi kinh điển và được yêu thích trên toàn cầu, không chỉ bởi tính giải trí mà còn vì những yếu tố về thiết kế gameplay đơn giản nhưng đầy thử thách Lý do nhóm chúng em chọn làm game Tetris cho bài tập lớn môn Ngôn ngữ lập trình Java là bởi các yếu tố sau:
Tetris là một trong những trò chơi lâu đời nhất và nổi tiếng nhất trong lịch sử game Được phát triển vào những năm 1980, Tetris đã chứng tỏ được sự bền vững và khả năng gây nghiện của nó Chính sự đơn giản nhưng cuốn hút của Tetris đã làm cho trò chơi này trở thành một biểu tượng văn hóa trong ngành công nghiệp game Do đó, việc làm một phiên bản Tetris giúp chúng em khám phá lại sự hấp dẫn của trò chơi này và áp dụng những kỹ thuật lập trình hiện đại để tái tạo nó
Tetris yêu cầu người chơi phải suy nghĩ nhanh và lên chiến lược cho từng di chuyển, giúp rèn luyện khả năng giải quyết vấn đề và lập kế hoạch Điều này tương tự với quá trình lập trình, nơi tôi phải giải quyết những vấn đề về cấu trúc dữ liệu, xử lý sự kiện, và tối ưu hóa hiệu suất Vì vậy, làm game Tetris làmột cách tuyệt vời để áp dụng những lý thuyết về lập trình vào thực tế
Mặc dù thiết kế của Tetris rất đơn giản, nhưng lối chơi lại đầy thử thách và có chiều sâu Việc tạo ra các khối hình với các hình dạng khác nhau và cho phépngười chơi xoay, di chuyển chúng sao cho phù hợp với không gian, đòi hỏi một sự cân nhắc kỹ lưỡng trong việc triển khai thuật toán và cấu trúc dữ liệu Chọn Tetris là một cơ hội để chúng em thử thách khả năng lập trình của mình, đồng thời hiểu rõ hơn về những yếu tố cần thiết trong việc phát triển một trò chơi hoàn chỉnh
Cuối cùng, Java là một ngôn ngữ lập trình mạnh mẽ và phổ biến trong việc pháttriển phần mềm, đặc biệt là game Việc lựa chọn Tetris làm đề tài giúp chúng
em áp dụng và nâng cao kỹ năng lập trình Java, đồng thời giúp tôi hiểu rõ hơn về cách các game 2D được xây dựng và cách thức quản lý các đối tượng,
sự kiện, và giao diện trong game
Trang 51.2 Giới thiệu game
Sản phẩm: Tetris
Thể loại: Game xếp hình (Puzzle)
Lối chơi:
o Trò chơi bao gồm các khối hình (gọi là Tetromino) với nhiều dạng khác nhau (I, O,
T, S, Z, L, J) Các khối này sẽ rơi từ trên xuống theo thời gian
o Nhiệm vụ của người chơi là di chuyển và xoay các khối hình sao cho chúng xếp đầymột hàng ngang Khi một hàng được lấp đầy, nó sẽ biến mất, và người chơi ghi được điểm
o Nếu các khối hình chồng lên đến đỉnh màn hình, trò chơi kết thúc
Trang 6o Trò chơi sẽ ngày càng khó hơn với tốc độ rơi của khối hình tăng dần theo thời gian, thử thách khả năng phản xạ và tư duy của người chơi.
o Điểm số được tính dựa trên số hàng xóa được cùng lúc và thời gian chơi
Trò chơi mang tính giải trí cao, phù hợp với nhiều lứa tuổi, và giúp cải thiện kỹ năng tư duy logic cũng như khả năng xử lý nhanh nhạy
2 Nội dung liên quan
Tetris là một trò chơi kinh điển được yêu thích qua nhiều thế hệ, với lối chơi đơn giản nhưng cuốn hút Nhận thấy tiềm năng phát triển và khả năng sáng tạo, chúng em quyết định thực hiện phiên bản Tetris này, bổ sung giao diện
đồ họa hiện đại để tăng tính hấp dẫn
Khảo sát trải nghiệm người dùng:
o Gameplay: Lối chơi đơn giản, chỉ cần thao tác với các phím mũi tên trên bàn phím
để di chuyển và xoay khối, dễ làm quen nhưng khó để thuần thục
o Màu sắc: Bố cục màu sắc rõ ràng, các khối hình với màu sắc đa dạng giúp dễ nhận
diện và phân biệt, tạo cảm giác hài hòa và bắt mắt
o Hình ảnh: Thiết kế giao diện đơn giản nhưng hiện đại, các khối gạch vuông vức và
hiệu ứng rơi mượt mà mang lại cảm giác dễ chịu khi chơi
Từ khảo sát trên, nhóm em đã xác định rõ các điểm mạnh và yếu tố hấp dẫn của game Tetris, từ đó xây dựng một phiên bản hoàn thiện hơn và phù hợp với thị hiếu người chơi hiện nay
Trang 72.2 Công cụ, phần mềm hỗ trợ phát triển sản phẩm
Để phát triển game Tetris, nhóm đã sử dụng các công cụ và phần mềm sau:
Ngôn ngữ lập trình Java: Java được lựa chọn vì tính phổ biến, dễ học và khả
năng hỗ trợ tốt trong việc xây dựng các ứng dụng đồ họa 2D thông qua thư viện Java Swing
IDE (Integrated Development Environment): Sử dụng IntelliJ IDEA để viết,
biên dịch và kiểm tra mã nguồn Các IDE này hỗ trợ nhiều tính năng như gợi
ý mã, kiểm tra lỗi, và tích hợp công cụ quản lý dự án giúp việc phát triển nhanh chóng và hiệu quả hơn
Thư viện đồ họa: Sử dụng Java Swing và AWT để vẽ giao diện, xử lý các
thành phần đồ họa trong trò chơi, như khối gạch và màn hình
Phần mềm quản lý phiên bản: Sử dụng Git và GitHub để quản lý mã nguồn,
đảm bảo việc hợp tác giữa các thành viên trong nhóm diễn ra trôi chảy và tránh xung đột mã
Công cụ kiểm thử: Dựa vào các công cụ kiểm thử tích hợp trong Java IDE
(JUnit) để kiểm tra logic của trò chơi, đảm bảo các tính năng hoạt động đúng như mong đợi
Các công cụ và phần mềm trên đã hỗ trợ nhóm em rất nhiều trong việc phát triển, thử nghiệm và hoàn thiện trò chơi, giúp sản phẩm trở nên ổn định và đáp ứng yêu cầu đề ra
3 Kết luận chương
Từ những kiến thức và hiểu biết đã trình bày, nhóm em đã triển khai phát triển một trò chơi Tetris 2D với các tính năng cơ bản như điều khiển khối gạch, sắp xếp khối để xóa hàng, và tăng dần độ khó Những công cụ, phần mềm, và phươngpháp được lựa chọn đã hỗ trợ hiệu quả trong việc hoàn thiện sản phẩm, đảm bảo đáp ứng đúng yêu cầu và mang lại trải nghiệm thú vị cho người chơi
Trang 8CHƯƠNG II: MÔ TẢ SẢN PHẨM
Trang 9o Hàm khởi tạo GamePanel: Thiết lập các thuộc tính ban đầu của bảng điều khiển:
Đặt kích thước, màu nền, và bố cục
Thêm bộ lắng nghe phím (KeyHandler)
Tạo đối tượng PlayManager để quản lý logic trò chơi
Gọi phương thức createStartButton để tạo nút bắt đầu trò chơi
Tải hình nền
o Phương thức createStartButton tạo nút bắt đầu:
Tạo đối tượng JButton với font chữ, màu sắc, và kích thước xác định
Thêm hành động lắng nghe để gọi phương thức startGame khi nút được nhấn
Thêm nút vào bảng điều khiển
Trang 10o Phương thức startGame,launchGame:
Ẩn nút bắt đầu và gọi phương thức launchGame để khởi động trò chơi
Tạo và bắt đầu chủ đề trò chơi
o Phương thức run thực hiện vòng lặp trò chơi:
Tính toán thời gian để đảm bảo tốc độ khung hình ổn định
Gọi phương thức update để cập nhật trạng thái trò chơi và repaint để vẽ lại bảngđiều khiển theo chu kỳ
Trang 11o Phương thức update cập nhật trạng thái trò chơi:
Kiểm tra nếu trò chơi không bị tạm dừng và không kết thúc, cập nhật trạng thái trò chơi thông qua đối tượng PlayManager
Nếu trò chơi kết thúc và phím Enter được nhấn, khởi động lại trò chơi
o Phương thức paintComponent vẽ bảng điều khiển trò chơi:
Vẽ hình nền nếu có
Vẽ màu nền cho khu vực chơi
Gọi phương thức draw của đối tượng PlayManager để vẽ các thành phần trò chơi
Lớp PlayManager là lớp quản lý chính của trò chơi Tetris, xử lý logic và quản lý trạng thái trò chơi
Trang 12o Khai báo các biến và hàm khởi tạo:
width và height: Kích thước của khu vực chơi
left_x, right_x, top_y, bottom_y: Tọa độ biên giới của khu vực chơi
currentMino, nextMino: Các khối Tetris hiện tại và tiếp theo
Mino_Start_x, Mino_Start_y: Tọa độ bắt đầu của khối Tetris
NextMino_x, NextMino_y: Tọa độ của khối Tetris tiếp theo
staticBlocks: Danh sách các khối Tetris đã dừng lại
gameOver: Trạng thái kết thúc trò chơi
dropInterval: Khoảng thời gian giữa các lần thả khối
level, lines, score: Cấp độ, số dòng đã xóa và điểm số của trò chơi
scoreManager: Quản lý điểm số cao nhất
Trang 13o Hàm khởi tạo PlayManager: Thiết lập các thuộc tính ban đầu của trò chơi:
Khởi tạo đối tượng ScoreManager
Thiết lập tọa độ biên giới của khu vực chơi
Thiết lập tọa độ bắt đầu của khối Tetris và khối Tetris tiếp theo
Lấy khối Tetris hiện tại và khối Tetris tiếp theo
Tải điểm số cao nhất từ file
o Phương thức resetGame đặt lại trạng thái trò chơi:
Trang 14o Phương thức pickMino chọn ngẫu nhiên một khối Tetris từ các hình dạng có sẵn.
o Phương thức update cập nhật trạng thái trò chơi:
Nếu phím Enter được nhấn, đặt lại trò chơi
Nếu khối Tetris hiện tại không còn hoạt động, thêm các khối của nó vào danh sách các khối đã dừng lại và kiểm tra xem trò chơi có kết thúc không
Trang 15Chuyển đổi khối Tetris hiện tại sang khối Tetris tiếp theo và tạo khối Tetris mới.
Kiểm tra và xóa các dòng đầy
Nếu khối Tetris hiện tại vẫn còn hoạt động, cập nhật trạng thái của nó
Trang 16o Phương thức checkDelete kiểm tra và xóa các dòng đầy:
Duyệt qua tất cả các tọa độ trong khu vực chơi
Trang 17Kiểm tra xem có đủ số lượng khối trong một dòng không.
Nếu có, xóa các khối đó và đẩy các khối phía trên xuống
Trang 18Các khối tĩnh, khối đang rơi, và trạng thái game (thua/tạm dừng).
Lớp ScoreManager quản lý việc lưu và tải điểm cao nhất (best score) trong trò chơi, với các chức năng chính liên quan đến việc đọc/ghi dữ liệu từ file
o Phương thức loadBestScore đọc điểm cao nhất từ file best_score.txt
o Phương thức loadBestScore lưu điểm cao nhất mới vào file nếu điểm hiện tại vượt qua điểm cao nhất trước đó
o Phương thức loadBestScore trả về giá trị của điểm cao nhất hiện tại (bestScore)
b, Input
Lớp KeyHandler triển khai giao diện KeyListener để xử lý các sự kiện từ bàn phím Lớp này sẽ cập nhật các biến trạng thái tương ứng khi các phím được nhấn hoặc thả
Trang 19o Phương Thức keyTyped được gọi khi một ký tự được gõ Tuy nhiên, hiện tại nókhông làm gì cả.
o Phương Thức keyPressed được gọi khi một phím được nhấn
o Phương Thức keyReleased được gọi khi một phím được thả
Trang 20c, Component
Lớp Block đại diện cho một ô vuông trong trò chơi Tetris Nó có các thuộc tính
về vị trí, kích thước, màu sắc và phương thức để vẽ ô vuông đó
o Khai báo các biến: tọa độ khối, kích thước, màu sắc
o Hàm khởi tạo Block: tạo một đối tượng Block với màu sắc c
o Phương thức draw vẽ khối trên màn hình với các hiệu ứng viền
Trang 22o Phương thức create tạo khối b[] và tempB[] với màu sắc cho trước.
o Phương thức updateXY cập nhật vị trí và trạng thái xoay của khối nếu không có
va chạm
Trang 23o Phương thức update:
Cập nhật trạng thái và vị trí của khối theo các phím nhấn:
Phím lên: Xoay khối.
Phím xuống: Rơi nhanh hơn.
Trang 24 Phím trái/phải: Di chuyển ngang.
Tự động rơi: Sau mỗi chu kỳ đếm autoDropCounter
Kiểm tra va chạm và kích hoạt trạng thái deactivating nếu khối chạm đáy
Trang 25o Phương thức deactivating bộ đếm để vô hiệu hóa khối sau khi chạm đáy.
o Phương thức checkMovementCollision kiểm tra va chạm với các cạnh khung, khối tĩnh
Trang 26o Phương thức checkRotationCollision kiểm tra va chạm trong quá trình xoay khối.
o Phương thức checkStaticBlockCollision xác định va chạm giữa khối hiện tại và các khối tĩnh
o Phương thức draw vẽ khối trên màn hình
Các lớp Shape_Bar, Shape_L1, Shape_L2, Shape_Square, Shape_T, Shape_Z1, Shape_Z2 mở rộng từ lớp mino và đại diện cho các hình khối trong trò chơi
Trang 27CHƯƠNG III: KẾT QUẢ VÀ ĐÁNH GIÁ
1 Hình ảnh sản phẩm
Trang 28o Âm thanh khi xóa dòng hoặc thua game giúp tăng sự hấp dẫn Tuy nhiên, cần
bổ sung nhạc nền để giữ chân người chơi lâu hơn
Hiệu năng:
o Game chạy ổn định với mức hiệu năng cao, không gặp tình trạng giật lag
o Tính năng lưu và tải điểm số hoạt động tốt, mang lại trải nghiệm liền mạch
Hạn chế:
o Thiếu các chế độ chơi đa dạng (ví dụ: chế độ thách đấu, multiplayer)
o Chưa có bảng xếp hạng trực tuyến hoặc yếu tố cạnh tranh để tăng sức hút
Trang 29TÀI LIỆU THAM KHẢO PHÂN CÔNG CÔNG VIỆC