Menu
CoddyTech

Punkte und Sieg

Teil des Abschnitts Projekte der Godot-Journey von Coddy. Lektion 17 von 33.

Ein großer Felsbrocken ist 20 Punkte wert und ein kleiner 50. _on_rock_broken kennt die Größe, also addiert die Punkte und aktualisiert $HUD/Score.

Du gewinnst, wenn keine Felsbrocken mehr übrig sind. Beginne die Zählung bei 4. Ziehe für jeden zerbrochenen Felsbrocken eins ab und addiere zwei, wenn ein großer sich teilt:

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

Zähle die zwei neuen Felsbrocken hier und nicht in spawn_rock. spawn_rock wird am Ende des Frames ausgeführt, sodass der Zähler null erreichen würde, bevor die letzten zwei kleinen Felsbrocken existieren.

Die Felsbrocken, Kugeln und das Raumschiff sind pausierbar. Main ist immer aktiv.

challenge icon

Aufgabe

Schwer

In main.gd:

  1. Füge var score = 0 hinzu und zeige zu Beginn Score: 0 an.
  2. Ein zerbrochener großer Felsbrocken erhöht den Punktestand um 20, ein kleiner um 50. Zeige den neuen Punktestand an.
  3. Füge var rocks_left = 4 hinzu und zähle ihn wie gezeigt. Bei null zeige You Win! an und pausiere das Spiel.

Probier es selbst

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)
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Projekte

Übe selbstständig: Godot-Playground