X-Git-Url: http://nitlanguage.org diff --git a/contrib/friendz/src/friendz.nit b/contrib/friendz/src/friendz.nit index e745040..2dd8d80 100644 --- a/contrib/friendz/src/friendz.nit +++ b/contrib/friendz/src/friendz.nit @@ -17,6 +17,8 @@ import mnit import realtime import solver import mnit::tileset +import app::data_store +import md5 intrude import grid intrude import level @@ -140,7 +142,6 @@ class TextButton 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 @@ -834,7 +835,7 @@ redef class Display 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 @@ -1081,8 +1082,8 @@ redef class Game level = null var i = levels.first for l in levels do - if l.get_state == l.l_open then break i = l + if l.get_state == l.l_open then break end entities.push(new StartButton(self, i)) end @@ -1143,7 +1144,8 @@ redef class Game end var ev = lastev if ev isa Event then - display.blit(img[4,0],ev.offset_x-42,ev.offset_y-6) + # Cursor, kept for debugging + #display.blit(img[4,0],ev.offset_x-42,ev.offset_y-6) end dirty_all = false end @@ -1151,14 +1153,9 @@ redef class Game # 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 @@ -1231,7 +1228,7 @@ redef class Game 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 @@ -1247,7 +1244,7 @@ redef class Game 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 @@ -1255,10 +1252,10 @@ redef class Game #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 @@ -1273,6 +1270,18 @@ redef class Game 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 @@ -1640,3 +1649,10 @@ redef class KeyEvent 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