nitlanguage
/
nit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge: lib/github: implements caching to maximize rate limit.
[nit.git]
/
contrib
/
friendz
/
src
/
friendz.nit
diff --git
a/contrib/friendz/src/friendz.nit
b/contrib/friendz/src/friendz.nit
index
e745040
..
2dd8d80
100644
(file)
--- 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 realtime
import solver
import mnit::tileset
+import app::data_store
+import md5
intrude import grid
intrude import level
intrude import grid
intrude import level
@@
-140,7
+142,6
@@
class TextButton
var textx: Int
redef fun draw(ctx) do
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
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
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
end
# displays a debug rectangle
@@
-1081,8
+1082,8
@@
redef class Game
level = null
var i = levels.first
for l in levels do
level = null
var i = levels.first
for l in levels do
- if l.get_state == l.l_open then break
i = l
i = l
+ if l.get_state == l.l_open then break
end
entities.push(new StartButton(self, i))
end
end
entities.push(new StartButton(self, i))
end
@@
-1143,7
+1144,8
@@
redef class Game
end
var ev = lastev
if ev isa Event then
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
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
# 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
for g in entities do
g.update
@@
-1231,7
+1228,7
@@
redef class Game
end
# Current solver, if any
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
# 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
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_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.step
else if kc == "d" then
if solver == null then
- solver = new Solver(grid)
+ solver = (new FriendzProblem(grid)).solve
solver_pause = true
else
solver_pause = true
else
- solver.step
+ solver.run_steps(1)
end
else if kc == "+" then
solver_steps += 100
end
else if kc == "+" then
solver_steps += 100
@@
-1273,6
+1270,18
@@
redef class Game
end
end
end
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
end
# The spash title image
@@
-1640,3
+1649,10
@@
redef class KeyEvent
return "unknown"
end
end
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