Menu
CoddyTech

Score et victoire

Fait partie de la section Projets du Journey Godot de Coddy. Leçon 20 sur 36.

Un gros rocher vaut 20 points et un petit, 50. _on_rock_broken connaît la taille, alors il ajoute les points et met à jour $HUD/Score.

Tu gagnes quand il ne reste plus de rochers. Commence le décompte à 4. Enlève-en un pour chaque rocher brisé et ajoute-en deux quand un gros se divise :

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

Compte ici les deux nouveaux rochers, pas dans spawn_rock. spawn_rock s’exécute à la fin de la frame, donc le décompte atteindrait zéro avant que les deux derniers petits rochers existent.

Les rochers, les balles et le vaisseau sont Pausable. Main est Always.

challenge icon

Défi

Difficile

Marque des points en détruisant les rochers et gagne quand ils ont tous disparu.

  1. Dans main.gd, ajoute var score = 0 et affiche Score: 0.
  2. Un gros rocher détruit rapporte 20 points, un petit 50. Affiche le score.
  3. Ajoute var rocks_left = 4. Retire-en un par rocher détruit et ajoute-en deux quand un gros rocher se divise. À 0, affiche You win! et mets le jeu en pause.

Appuie sur « Jouer » et détruis tous les rochers : le message You win! s'affiche. Puis appuie sur « Vérifier ».

Essayez vous-même

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)

Toutes les leçons de Projets

Entraînez-vous par vous-même : Playground Godot