implement undo functionality

master
Peter Babič 3 years ago
parent 43c5eb4b33
commit c7c3bf7d82
Signed by: peter.babic
GPG Key ID: 4BB075BC1884BA40
  1. 28
      src/Triangle.svelte

@ -62,7 +62,7 @@
let circles = [] let circles = []
let circleColors = [] let circleColors = []
let steps = 0 let moveStack = []
let gameover let gameover
let victory let victory
let maxSteps let maxSteps
@ -83,7 +83,7 @@
const restart = () => { const restart = () => {
circles = [] circles = []
circleColors = [] circleColors = []
steps = 0 moveStack = []
gameover = false gameover = false
victory = false victory = false
@ -112,6 +112,16 @@
// printSolutions(1) // 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 getColor = i => colors[i % colors.length]
const getDestColor = _ => circleColors[circles.indexOf(C_PICK)] const getDestColor = _ => circleColors[circles.indexOf(C_PICK)]
@ -191,10 +201,11 @@
if (circles[curr] == C_DEST) { if (circles[curr] == C_DEST) {
jumpOver(circles, prev, curr) jumpOver(circles, prev, curr)
clearDests() clearDests()
const destColor = circleColors[curr]
circleColors[curr] = circleColors[prev] circleColors[curr] = circleColors[prev]
steps++ moveStack.push([curr, prev, destColor])
if (steps == maxSteps) { if (moveStack.length == maxSteps) {
victory = true victory = true
return return
@ -427,21 +438,20 @@
display: none; display: none;
} }
.restart { .restart,
.undo {
display: inline; display: inline;
cursor: pointer; cursor: pointer;
} }
.gameover { .gameover,
display: inline;
}
.victory { .victory {
display: inline; display: inline;
} }
</style> </style>
<span class="restart" on:click={restart}>RESTART GAME</span> <span class="restart" on:click={restart}>RESTART GAME</span>
<span class="undo" on:click={undo}> | UNDO</span>
<span data-cy="gameover" class:gameover> | GAME OVER</span> <span data-cy="gameover" class:gameover> | GAME OVER</span>
<span data-cy="victory" class:victory> | VICTORY</span> <span data-cy="victory" class:victory> | VICTORY</span>

Loading…
Cancel
Save