Punktestand erfassen und gewinnen
Dies ist der 7. von 11 Schritten des Tutorials zum Erstellen eines Breakout-Spiels mit reinem JavaScript. In diesem Artikel fügen wir unserem Spiel ein Punktesystem hinzu. Ein Punktestand kann das Spiel interessanter machen: Sie können versuchen, Ihren eigenen Highscore oder den Ihrer Freunde zu übertreffen. Außerdem fügen wir eine Gewinnbedingung hinzu: Sie gewinnen, wenn Sie alle Steine zerstören.
Punktestand im Spiel anzeigen
Fügen Sie direkt nach let lastTimestamp eine neue Variable hinzu, um den Punktestand zu speichern:
let score = 0;
Fügen Sie eine drawScore()-Funktion hinzu, um den aktuellen Punktestand auf dem Canvas darzustellen:
function drawScore() {
ctx.font = "18px Arial";
ctx.fillStyle = "#0095dd";
ctx.textBaseline = "top";
ctx.textAlign = "left";
ctx.fillText(`Points: ${score}`, 5, 5);
}
Die Methode ctx.fillText() erhält den darzustellenden Text sowie die x- und y-Koordinaten, an denen er gezeichnet werden soll. In unserem Fall ist der Text für den Punktestand blau, 18 Pixel groß und verwendet die Schriftart Arial. Wenn Sie textBaseline auf "top" setzen, wird der obere Rand des Textes an der angegebenen y-Koordinate positioniert.
Rufen Sie drawScore() innerhalb von update() auf, nachdem die Steine gezeichnet wurden:
function update(timestamp) {
// ...
for (const brick of bricks) {
brick.draw();
}
drawScore();
requestAnimationFrame(update);
}
Punktestand aktualisieren, wenn Steine zerstört werden
Wir erhöhen den Punktestand jedes Mal, wenn der Ball einen Stein trifft. Fügen Sie score += 10; zur bestehenden onCollide()-Methode des Steins hinzu, nachdem der Stein aus den beiden Arrays entfernt wurde:
class Brick extends GameObject {
// ...
onCollide() {
bricks.splice(bricks.indexOf(this), 1);
colliders.splice(colliders.indexOf(this), 1);
score += 10;
}
}
Das ist vorerst alles: Laden Sie Ihre index.html neu und prüfen Sie, ob der Punktestand bei jedem Treffer eines Steins aktualisiert wird.
Wie gewinnt man?
Fügen Sie den folgenden Code in Ihre update()-Funktion ein, nach dem Aufruf von drawScore():
if (bricks.length === 0) {
alert("You won the game, congratulations!");
location.reload();
return;
}
Wenn keine Steine mehr übrig sind, zeigen wir die Gewinnmeldung an. Sobald der Dialog geschlossen wird, startet das Spiel neu.
Aktualisieren Sie außerdem die while-Bedingung in moveBall(), damit sich der Ball nicht mehr bewegt, sobald der letzte Stein zerstört wurde:
function moveBall(dt) {
while (dt > 0 && bricks.length > 0) {
// ... existing movement and collision code ...
}
}
Dadurch wird verhindert, dass der Ball in der verbleibenden Zeit des Frames das Spielfeld verlässt, obwohl bereits gewonnen wurde.
Vergleichen Sie Ihren Code
So sollte Ihr bisheriger Code aussehen. Das Beispiel wird direkt ausgeführt. Um den Quellcode anzusehen, klicken Sie auf die Schaltfläche „Play“.
Nächste Schritte
Sowohl das Verlieren als auch das Gewinnen sind implementiert. Damit ist der Kern unseres Spiels fertig. Als Nächstes fügen wir noch etwas hinzu: Statt eines einzigen erhält der Spieler drei Leben.