النقاط والفوز
جزء من قسم المشاريع في رحلة Godot على Coddy. الدرس 20 من 36.
تساوي الصخرة الكبيرة 20 نقطة، والصغيرة 50 نقطة. تعرف _on_rock_broken حجم الصخرة، لذا تضيف النقاط وتحدّث $HUD/Score.
تفوز عندما لا تبقى أي صخور. ابدأ العدّ من 4. أنقص واحدًا مقابل كل صخرة مكسورة، وأضف اثنين عندما تنقسم صخرة كبيرة:
if rock.size == 2:
rocks_left += 2
rocks_left -= 1
if rocks_left == 0:
$HUD/Message.text = "You win!"
get_tree().paused = trueاحتسب الصخرتين الجديدتين هنا، وليس في spawn_rock. تُنفَّذ spawn_rock في نهاية الإطار، لذا سيصل العدّ إلى الصفر قبل ظهور آخر صخرتين صغيرتين.
الصخور والرصاص والسفينة قابلة للإيقاف المؤقت. أما Main فدائم.
التحدي
صعباجمع النقاط من الصخور واربح عندما تختفي.
- في
main.gd، أضفvar score = 0وأظهرScore: 0. - الصخرة الكبيرة المكسورة تضيف 20 نقطة، والصغيرة 50 نقطة. أظهر النتيجة.
- أضف
var rocks_left = 4. أنقص واحدًا مع كل صخرة مكسورة، وأضف اثنين عندما تنقسم صخرة كبيرة. عند وصول العدد إلى 0، أظهرYou win!وأوقف اللعبة مؤقتًا.
اضغط «العب» وأزل الصخور: ستظهر You win! ثم اضغط «تحقق».
جرّب بنفسك
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)
جميع دروس المشاريع
تدرّب بنفسك: Playground لـ Godot