Menu
CoddyTech

Điểm số và chiến thắng

Thuộc phần Dự án trong hành trình Godot của Coddy. Bài học 20 trên 36.

Một tảng đá lớn đáng giá 20 điểm, còn một tảng nhỏ đáng giá 50 điểm. _on_rock_broken biết kích thước, nên hàm này cộng điểm và cập nhật $HUD/Score.

Bạn thắng khi không còn tảng đá nào. Bắt đầu số đếm từ 4. Trừ đi một cho mỗi tảng đá bị phá vỡ, và cộng thêm hai khi một tảng lớn tách ra:

if rock.size == 2:
	rocks_left += 2
rocks_left -= 1
if rocks_left == 0:
	$HUD/Message.text = "You win!"
	get_tree().paused = true

Đếm hai tảng đá mới ở đây, không phải trong spawn_rock. spawn_rock chạy vào cuối khung hình, nên số đếm sẽ về không trước khi hai tảng đá nhỏ cuối cùng xuất hiện.

Các tảng đá, đạn và tàu đều có thể tạm dừng. Main luôn chạy.

challenge icon

Thử thách

Khó

Ghi điểm khi phá đá và chiến thắng khi phá hết đá.

  1. Trong main.gd, thêm var score = 0 và hiển thị Score: 0.
  2. Phá đá lớn được 20 điểm, đá nhỏ được 50 điểm. Hiển thị điểm số.
  3. Thêm var rocks_left = 4. Mỗi khi phá một hòn đá, giảm đi một; khi đá lớn vỡ, tăng thêm hai. Khi số đá còn lại bằng 0, hiển thị You win! và tạm dừng.

Nhấn Chơi và phá hết đá: thông báo You win! sẽ xuất hiện. Sau đó nhấn Kiểm tra.

Tự làm thử

extends Node2D

const ROCK = preload("res://rock.tscn")

func _ready():
	for i in 4:
		spawn_rock(Vector2(randf_range(0, 640), 0), Vector2(randf_range(-90, 90), randf_range(40, 90)), 2)

func spawn_rock(where, velocity, size):
	var rock = ROCK.instantiate()
	rock.position = where
	rock.velocity = velocity
	rock.size = size
	rock.broken.connect(_on_rock_broken)
	add_child(rock)

func _on_rock_broken(rock):
	if rock.size == 2:
		spawn_rock.call_deferred(rock.position, rock.velocity.rotated(0.8) * 1.5, 1)
		spawn_rock.call_deferred(rock.position, rock.velocity.rotated(-0.8) * 1.5, 1)

Tất cả bài học trong Dự án

Tự luyện tập: Playground Godot