#5 Space Rocks: Game Manager


Trong phần này, mình sẽ hướng dẫn các bạn cách làm Game Manager có tác dụng quản lí các sự kiện trong game như tính điểm, tạo sinh thiên thạch, thắng thua,...

À, trong bài trước mình quên nói về wrap đối với obj_rock khi nằm ngoài Room.

Mở Step của obj_rock obj_rock_small, thêm vào move_wrap(true, true, 100).

1. Tạo thiên thạch ngẫu nhiên

Chúng ta không thể nào chỉ tạo ra các thiên thạch bằng cách kéo thả obj_rock vào Room như trước được, bởi vì số lượng thiên thạch sẽ có hạn. Chúng ta cần một object mới có chức năng đó.

Hãy tạo một obj_game_manager trong thư mục Objects. Thêm sự kiện Create Step. Đặt số lượng thiên thạch lớn nhất có thể có trong Room là max_Rocks = 20 count = 0 trong Create.

Mở Step lên và nhập vào đoạn code bên dưới:


Note:
  • choose(value1, value2, ...) sẽ chọn ngẫu nhiên một Value. Value có thể là Integer, String, hay Object, v.v
Giải thích: đặt vị trí x = -100 y = -100 để các thiên thạch được sinh ra ở ngoài Room rồi bay vào, do đặt size của move_wrap 100 nên sẽ không bị dịch chuyển ngay. Bạn có thể thay đổi các giá trị để xem sự khác biệt.

Tiếp đó mở Create của obj_rock lên, thêm vào dòng lệnh sau:

Đồng thời giảm count xuống nếu obj_rock bị phá huỷ.

Sau đó kéo thả obj_game_manager vào Room và chạy thử (nhớ xoá các obj_rock có sẵn trong Room ở phần trước đi nhé) . 

Các obj_rock obj_rock_small có hướng đều giống nhau nhìn không được sinh động lắm, hãy mở Create thêm vào image_angle = random_range(0, 359) Step thêm vào image_angle += 0.5.

Vậy là xong phần tạo thiên thạch, chuyển sang phần kế nào.

2. Mạng (Lives) và điểm

Thêm vào Create của obj_game_manager hai biến là lives = 3 score = 0.

Mở sang Destroy của obj_player lên và thêm vào đoạn code sau:

Để hiển thị số điểm và lượt chơi còn lại, hãy thêm vào obj_game_manager sự kiện Draw GUI.


Trong đó, thêm vào đoạn code sau:


Mở Destroy của obj_rock viết vào score += 100 50 đối với obj_rock_small.

Mở game lên và chạy thử. 

Ồ, chúng ta có một lỗi là khi phi thuyền hồi sinh thì nếu có thiên thạch ngay tại vị trí đó sẽ làm phi thuyền bị nổ một lần nữa. Để khắc phục hãy thêm cho phi thuyền có thời gian "vô địch" khi mới hồi sinh.

Mở Create của obj_player, thêm vào image_alpha = 0.5alarm[0] = 300.

Thêm sự kiện Alarm 0 vào obj_player với nội dung là image_alpha = 1.


Tiếp đó, sửa code trong Collision đối với obj_rock obj_rock_small thành:


Note:
  • image_alpha là mức độ trong suốt của object, có giá trị từ 0 đến 1.
  • Alarm 0 là sự kiện xảy ra khi đồng hồ đếm ngược alarm[0] kết thúc.
  • alarm[0] là đồng hồ đếm ngược thứ 0.
Giải thíchkhi image_alpha khác 1 nghĩa là còn trong trạng thái "vô địch", alarm[0] = 300 sẽ đặt thời gian đếm ngược là 5s. Khi hết 5s thì sự kiện Alarm 0 sẽ thực hiện, image_alpha = 1, tức mất đi trạng thái "vô địch".
    

3. Thua cuộc

Khi lives bằng 0 thì hiện lên dòng chứ "LOSE" và thể hiện số điểm cuối cùng.
Mở obj_game_manager lên sửa code trong Draw GUI lại thành:


Note:
  • "\n" có nghĩa là newline, ngắt xuống dòng.
Để chơi lại khi nhấn phím "Enter" thì vào Step của obj_game_manager vào thêm vào đoạn code:


Thêm nội dung thông báo bên dưới:



Vậy là xong, hẹn gặp lại bạn trong bài đăng kế.
Trần Gia Huy

Mình tên là Huy. Mình hiện là sinh viên và có sở thích làm game. Mình muốn chia sẻ những gì mình biết cho mọi người để cải thiện bản thân mình hơn.

Đăng nhận xét

Mới hơn Cũ hơn