Code sau dùng để khai báo các thuộc tính vào trong BTL như :- Toạ độ làn đường - Toạ độ xe - Giá trị di chuyển - Số lượng chướng ngại vật - Mảng ảnh cho chướng ngại vật - Mảng toạ độ cho
Trang 1TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN
TIỂU LUẬN MÔN: LẬP TRÌNH JAVA
Sinh viên thực hiện
: Nguyễn Cao Trung
Nguyễn Gia Phúc
Lưu Đình Hưng
Giảng viên hướng dẫn : 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 : 2021-2026
Trang 2TÀI LIỆU MÔ TẢ BÀI TẬP LỚN
1 LẬP TRÌNH GAME ĐUA XE
- Ứng dụng/Phần mềm: JAVA
- Bài tập lớn này sẽ code một game đua xe vượt chướng ngại vật 2d, một game đã mở đầu cho tuổi thơ của các người lớn thủa đầu những năm
công nghệ mới phát triển Người chơi sẽ điều khiển 1 nhân vật 2d lái xe
để tránh các chướng ngại vật và đạt kỷ lục sau mỗi lần chơi
STT Họ và tên Mã SV
Nội dung thực hiện
Ghi chú
Phân tích chức năng, yêu cầu ứng dụng, giải pháp thực thi
Lập trình, thực thi
Viết tài liệu
Trang 3- Biểu đồ tổng quát chương chình:
Game StreetBoiRunner của chúng em gồm 2 folder chính là src và image Folder src là folder chứa những Package dùng để thực thi viết code, xây dựng
dùng trong ứng dụng Game
Sau đây là package các class cụ thể có trong chương trình:
Đầu tiên, đến với Class GamePlay
Các code sau sử dụng để thêm các thư viện vào java để có thể tạo các sự kiện.w
Trang 4Code sau dùng để khai báo các thuộc tính vào trong BTL như :
- Toạ độ làn đường
- Toạ độ xe
- Giá trị di chuyển
- Số lượng chướng ngại vật
- Mảng ảnh cho chướng ngại vật
- Mảng toạ độ cho chướng ngại vật
- Từ khóa protected được sử dụng để chỉ định mức độ truy cập của một thành phần (biến, phương thức hoặc lớp con) trong một lớp Khi một thành phần được khai báo là protected, nó có thể được truy cập bởi các phương thức trong cùng một lớp, các lớp con của lớp đó và các lớp trong cùng một gói
Trang 5- 2 dòng code trên sử dụng để kiểm tra kết thúc và event/sự kiện nút.
- Boolean là một kiểu dữ liệu nguyên thủy dùng để lưu trữ giá trị true hoặc false Nó thường được sử dụng trong các câu lệnh điều kiện và vòng lặp
để kiểm tra một điều kiện nào đó có đúng hay không
- Từ khóa public được sử dụng để chỉ định mức độ truy cập của một thành phần (biến, phương thức hoặc lớp con) trong một lớp Khi một thành phần được khai báo là public, nó có thể được truy cập từ bất kỳ đâu, bao gồm cả các lớp và các gói khác nhau
- Dòng code trên sử dụng để Khởi tạo các toạ độ của làn đường
- Các dòng code trên được sử dụng để tạo các sự kiện cho BTL
Với Code keyReleased/thả phím thì nhân vật sẽ dừng lại
Với code keyPressed/ấn phím nhân vật sẽ di chuyển
Trang 6- Các code trên đc sử dụng để đặt các giá trị cho thuộc tính:
Toạ độ xe là x:45 và y:225
Set mặc định của các nút là chưa bấm -> Giá trị di chuyển =0
Tạo một mảng mới cho giá trị x của xe chướng ngại có 20 phần tử
Tạo một mảng mới cho giá trị y của xe chướng ngại là 20 phần tử
Tạo một mảng mới cho ảnh của xe chướng ngại vật là 20 phần tử
Tạo một mảng mới cho tốc độ của xe chướng ngại là 20 phần tử
Trang 7- Graphics2D obj = (Graphics2D) ở đay thực hiện một thao tác ép kiểu (type casting) từ một đối tượng thuộc lớp Graphics sang một đối tượng thuộc lớp Graphics2D Điều này cho phép bạn sử dụng các phương thức
và thuộc tính của lớp Graphics2D để vẽ đồ họa nâng cao
Trong code trên
- Code obj setRenderingHint dùng để khử răng cưa giúp cho ảnh chèn vào nét hơn và không bị vỡ hình
- Có 3 Obj.drawImage một cái “image/st_road.png” dùng để vẽ đường,
“image/car-self.png” dùng để vẽ xe và “image/boom.png” dùng để vẽ vụ
nổ trong phần xảy ra nếu va chạm (if(isFinished) )
- Nếu số lượng xe chướng ngại vật >0 thì sẽ tăng dần xe chướng ngại vật lên
- Và sử dụng try catch để bắt lỗi
Các code sau sẽ hiển thị điểm trên Frame của game với số điểm sẽ đặt ở
vị trí x:325;y:25 và Kỷ lục sẽ đặt ở vị trí x:400; y:25 – vị trí trên cùng been phải Frame
Trang 8- Khai báo phương Thức Road
Trong đó nếu xe chướng ngại chạy hết frame mà ko bị va chạm với nhân vật thì sẽ đặt lại xe chướng ngại
Car_x+= speedX và car_y += speedY được dùng để cập nhật vị trí hiện tại của nhân vật
Hai code trên được sử dụng để giữ xe ở trong phạm vi Frame ko cho
đi quá
Trang 9 Hai code trên sẽ giữ xe để xe không đi vượt quá làn đường cho phép như dưới đây
Code trên được sử dụng để khiến cho xe chướng ngại vật di chuyển từphải sang trái
Trang 10- Code trên sẽ duyệt hết index trướng ngại vật và nếu index=1 thì có nghĩa
là chướng ngại vật đã rời khỏi vị chí
- Code trên là việc số điểm
Với số lượng chướng ngại vật là c, số điểm sẽ tăng lên mỗi khi nhân vật vượt qua chướng ngại vật mà không va chạm
Nếu số điểm cao hơn kỷ lục thì kỉ lục sẽ bằng số điểm và sẽ cập nhật
kỉ lục mới với
- Tiếp theo là kiểm tra va chạm
Trong code trên chúng ta khai báo diff=0 để so sánh khoảng các xe và chướng ngại vật dưới dòng code diff=car_y – ly[i];
Trang 11 Dưới dòng so sánh khoảng cách dòng if trên chỉ nếu va chạm thì in lên command là vị trí xa và vị trí xe va chạm
Sau đó kết thúc game
Sau khi kết thúc game sẽ có hai trường hợp:
- Trường hợp thứ nhất sẽ là việc phá vỡ được kỷ lục khi đấy trên panel kết thúc game sẽ hiện dòng chữ sau
- Trường hợp thứ hai sẽ là việc thua nhưng không phá vỡ đc kỉ lục Khi đáy trên panel kết thúc game sẽ hiện dòng chữ sau
Trang 12Tiếp theo trên Panel kết thúc game sẽ có 2 lựa trọn chơi lại và thoát như hai hình đạt kỉ lục trên.
- Với lựa chọn chơi lại, chúng ta sẽ đặt lại toàn bộ giá trị của thuộc tính
- Còn với lựa chọn thoát thì chúng ta sẽ tắt game luôn
Sau khi kết thúc game và chọn chơi lại, chúng ta sẽ đặt lại toàn bộ giá trị củathuộc tính về ban đầu như vị trí xe, chướng ngại vật, điểm, và giá trị di chuyển
Trang 13Đây là các event/sự kiện để di chuyển nhân vật.
Với isRight = true là việc ấn nút mũi tên phải, nhân vật sẽ di chuyển về phía bên phải 1 đơn vị (speedY=1)
Còn với isLeft=true thì nhân vật sẽ di chuyển về phía bên trái 1 đơn vị
Còn với event/sự kiện khiến cho xe dừng lại như trên thì
isLeft = false đồng nghĩa với việc ta không ấn mũi tên bên trái thì xe sẽ không di chuyển về bên trái và bên phải cũng tương tự vậy
- Trong Class OpponentCar
Code trên vẽ lại vị chí mới của phương thức road với hiệu ứng chạy liên tục giúp game thêm mượt không bị cứng nhắc
Sử dụng try và catch để bắt lỗi
Trang 14Nếu ít hơn 4 xe chướng ngại vật và quá 200mili trên giây
Đầu tiên ta sẽ tạo ảnh của xe chương ngại vật và toạ đọ của nó
Sau đó ta tạo ngẫu nhiên toạ độ của xe chướng ngại vật với các case sau
Nếu không có xe nào thì sẽ tạo chướng ngại vật ở toạ độ x=250 chạy từ phải sang trái
Nếu có 1 xe thì sẽ tạo chướng ngại vật ở toạ độ x=300 chạy từ trái sang phải
Nếu có 2 xe thì sẽ tạo chướng ngại vật ở toạ độ x=165 chạy từ trái sang phải
Và với các trường hợp còn lại thì sẽ tạo ỏ toạ độ x=130 chạy từ trái sang phải
Trang 15Sau đó sẽ set vị trí của xe chướng ngại vật và tạo ngẫu nhiên tốc độ của chướng ngại vật rồi sau đó them xe chướng ngại vật vào frame.
- Tiếp theo đến với class MainGame
Trang 16Trong Class này chúng em sẽ tạo Container để chứa class Gameplay và opponentCar để hiển thị game trên màn hình bằng các dùng thư viện javax.swing.Jframe.
- Cuối cùng là file StartGame
Trong file StartGame, chúng em sẽ tạo 1 Jlabel để chứa ảnh nền trong code sau
Sau đó chúng em sẽ khởi tại các button và gán các sự kiện để làm menu của game:
Với 2 button là Chơi và Thoát và rồi đặt vị trí cho hai button đấy với
vị trí và kích thước như sau
Cuối cùng là add hai button trên vào JLabel
- Sau khi hoàn thành việc add các button vào Label, chúng em sẽ add Label đấy vào Frame của game
Trang 17- Sau đó add các thông só như:
Title sẽ để tên là MENU
Dài rộng 500px
Tắt khi thoát
Đặt ra giữa màn hình
Không để thay đổi kích thước(phóng to, thu nhỏ)
- Cuối cùng chúng em sẽ tạo một thread mới để chạy phương thức startGame() và gọi repaint () trong phương thức run
- Khi ở bên giao diện, nếu chúng ta ấn vào startButton(nút “Chơi”) thì game sẽ bắt đầu chạy còn nếu ấn exitButton(nút “Thoát”) thì sẽ tắt chương trình
- Sau đó chúng ta sẽ sử dụng hàm Main để chạy chương trình
Trang 184 Các API được sử dụng trong BTL
1 Sử gói java.awt.*, chứa các lớp để tạo giao diện người dùng đồ hoạ (GUI) và sử lý sự kiện cho các ứng dụn Java
- Sự kiện của gói java.awt mà BTL có sử dụng đó là sử dụng
Trang 195 Demo Ứng dụng
Giao diện MENU khi mở game
Trang 20Giao diện khi chơi
Trang 21Ấn nút mũi tên trái để đi về bên trái và bên phải cũng như vậy
Trang 22Sau khi vượt qua chướng ngại vật sẽ tăng thêm 1 điểm và nếu hơn điểm kỷ lục thì điểm kỷ lục lúc này cũng sẽ bằng số điểm đạt được hiện tại
Trang 23Sau khi thua sẽ hiện Panel kết thúc lên màn hình kết thúc
6 Kết luận
Sau khi hoàn thành BTL, chúng em đã học được các sử dụng các thư viện đểtạo Container và cách sử lý các sử kiện sao cho phần mềm có thể hoạt động được và hoạt động chơn chu