From c7c3bf7d82ca9bf904fcb626846450c8ef2a36dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Babi=C4=8D?= Date: Sun, 10 Jan 2021 22:35:58 +0100 Subject: [PATCH] implement undo functionality --- src/Triangle.svelte | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/Triangle.svelte b/src/Triangle.svelte index 6bd88d8..580d718 100644 --- a/src/Triangle.svelte +++ b/src/Triangle.svelte @@ -62,7 +62,7 @@ let circles = [] let circleColors = [] - let steps = 0 + let moveStack = [] let gameover let victory let maxSteps @@ -83,7 +83,7 @@ const restart = () => { circles = [] circleColors = [] - steps = 0 + moveStack = [] gameover = false victory = false @@ -112,6 +112,16 @@ // printSolutions(1) } + const undo = () => { + if (moveStack.length > 0) { + const [src, dest, color] = moveStack.pop() + circleColors[src] = color + jumpReverse(circles, dest, src) + victory = false + gameover = false + } + } + const getColor = i => colors[i % colors.length] const getDestColor = _ => circleColors[circles.indexOf(C_PICK)] @@ -191,10 +201,11 @@ if (circles[curr] == C_DEST) { jumpOver(circles, prev, curr) clearDests() + const destColor = circleColors[curr] circleColors[curr] = circleColors[prev] - steps++ + moveStack.push([curr, prev, destColor]) - if (steps == maxSteps) { + if (moveStack.length == maxSteps) { victory = true return @@ -427,21 +438,20 @@ display: none; } - .restart { + .restart, + .undo { display: inline; cursor: pointer; } - .gameover { - display: inline; - } - + .gameover, .victory { display: inline; } RESTART GAME + | UNDO | GAME OVER | VICTORY