Differences From Artifact [f6cab5c23c5cba1e]:
- File
src/main.d
- 2012-07-15 13:27:45 - part of checkin [3014ab5a8a] on branch trunk - Clean up. (user: kinaba) [annotate]
To Artifact [51a9d789eb377d34]:
- File
src/main.d
- 2012-07-16 06:32:03 - part of checkin [1b261bd13b] on branch trunk - Run Wind and Forest both and take better. (user: kinaba) [annotate]
7 class CUI(Solver) : GameObserver 7 class CUI(Solver) : GameObserver
8 { 8 {
9 this(in Game g) { solver = new Solver(g); } 9 this(in Game g) { solver = new Solver(g); }
10 Solver solver; 10 Solver solver;
11 bool fin; 11 bool fin;
12 override void on_game_changed(char c, in Game g, bool finished) { fin = 12 override void on_game_changed(char c, in Game g, bool finished) { fin =
13 } 13 }
> 14
> 15 class ForSafety : GameObserver
> 16 {
> 17 this(in Game g)
> 18 {
> 19 if(g.map.W*g.map.H <= 1000)
> 20 {
> 21 try {
> 22 score_log ~= g.score;
> 23 auto fast_solver = new FastSolver(g);
> 24 foreach(_; 0..g.map.W*g.map.H) {
> 25 char c = fast_solver.single_step();
> 26 if(c=='A') break;
> 27 const(Game) gg = fast_solver.current_gam
> 28 log ~= c;
> 29 score_log ~= gg.score;
> 30 if(gg.cleared || gg.dead) break;
> 31 }
> 32 } catch {
> 33 log = null;
> 34 score_log = null;
> 35 }
> 36 }
> 37 }
> 38 override void on_game_changed(char c, in Game g, bool finished) {}
> 39 string log;
> 40 long[] score_log;
> 41 }
14 42
15 void main() 43 void main()
16 { 44 {
17 auto d = new Driver(stdin); 45 auto d = new Driver(stdin);
18 d.addObserver!(GuardedOutput)(); | 46 auto o = d.addObserver!(GuardedOutput)();
19 auto c = d.addObserver!(CUI!MainSolver)(); 47 auto c = d.addObserver!(CUI!MainSolver)();
> 48 auto f = d.addObserver!(ForSafety)();
> 49 o.safety_data(f.log, f.score_log);
20 while(!c.fin) 50 while(!c.fin)
21 d.command(c.solver.single_step()); 51 d.command(c.solver.single_step());
22 } 52 }