import realtime
import solver
import mnit::tileset
+import app::data_store
+import md5
intrude import grid
intrude import level
var textx: Int
redef fun draw(ctx) do
- var x = self.x
if self.toggleable then
var w
if self.toggled or not self.enabled then w = 6 else w = 7
fun measureText(str: String, height: Int): Int
do
var font = app.game.font
- return str.length * (app.game.font.width + app.game.font.hspace)
+ return str.length * (font.width + font.hspace.to_i)
end
# displays a debug rectangle
# Update all game entities.
fun step do
if solver != null and not solver_pause then
- for i in [0..solver_steps[ do
- if solver.step then
- solver_pause = true
- break
- end
- end
- solver.dump
- if solver.is_over then solver = null
+ if solver.run_steps(solver_steps) != null then solver_pause = true
+ print solver.to_s
+ if not solver.is_running then solver = null
end
for g in entities do
g.update
end
# Current solver, if any
- var solver: nullable Solver = null
+ var solver: nullable BacktrackSolver[Grid, Action] = null
# Is the solver paused?
var solver_pause = false
edit_grid(grid)
else if kc == "s" then
if solver == null then
- solver = new Solver(grid)
+ solver = (new FriendzProblem(grid)).solve
solver_pause = false
else
solver_pause = not solver_pause
#solver.step
else if kc == "d" then
if solver == null then
- solver = new Solver(grid)
+ solver = (new FriendzProblem(grid)).solve
solver_pause = true
else
- solver.step
+ solver.run_steps(1)
end
else if kc == "+" then
solver_steps += 100
end
end
end
+
+ redef fun load_levels
+ do
+ super
+
+ for level in levels do
+ var score = app.data_store["s{level.str.md5}"]
+ if score isa Int then
+ level.score = score
+ end
+ end
+ end
end
# The spash title image
return "unknown"
end
end
+
+redef class Level
+ redef fun save
+ do
+ app.data_store["s{str.md5}"] = if score > 0 then score else null
+ end
+end