Differences From Artifact [57f6f73657cc3655]:
- File        
src/solver.d
- 2012-07-15 07:02:32 - part of checkin [8acc8e6c78] on branch trunk - Prioritize distant lambda. (user: kinaba) [annotate]
 
 
To Artifact [393baf841678f948]:
- File        
src/solver.d
- 2012-07-15 07:11:41 - part of checkin [e8aa141dbe] on branch trunk - Make manual GUI operation faster for Solver2 by delaying plan making. (user: kinaba) [annotate]
 - 2012-07-15 12:14:10 - part of checkin [e02668367d] on branch trunk - Revert redesign in the trunk. (user: kinaba) [annotate]
 
 
   301    301     return (danger_ok ? [] : tryA()) ~ tryB() ~ tryC();
   302    302    }
   303    303   }
   304    304   
   305    305   class Solver_2(Solver)
   306    306   {
   307    307    string plan;
          308  + bool plan_broken = true;
   308    309   
   309    310    Game g;
   310    311    this(in Game g)
   311    312    {
   312    313     this.g = g.clone();
   313    314     make_plan(g);
   314    315    }
................................................................................
   325    326     }
   326    327     while(log.length>0 && log[$-1]=='W')
   327    328      log.length--;
   328    329     return tuple(s, log);
   329    330    }
   330    331   
   331    332    void make_plan(in Game g) {
          333  +  plan_broken = false;
   332    334     Tuple!(Solver,string) x = run_sub_solver(g);
   333    335     plan = x[1];
   334    336     if(x[0].g.cleared)
   335    337      return;
   336    338     modify_plan(g, x[0].g.score);
   337    339    }
   338    340   
................................................................................
   360    362     Game gg = g.clone();
   361    363     foreach(cc;c)gg.command(cc);
   362    364     Tuple!(Solver, string) x = run_sub_solver(gg);
   363    365     return tuple(x[1], x[0].g.score);
   364    366    }
   365    367   
   366    368    char single_step() {
          369  +  if(plan_broken)
          370  +   make_plan(g);
   367    371     if(plan.empty)
   368    372      return 'A';
   369    373     char c = plan[0];
   370    374     plan = plan[1..$];
   371    375     g.command(c);
   372    376     return c;
   373    377    }
   374    378   
   375    379    void force(char c) {
   376    380     g.command(c);
   377         -  make_plan(g);
          381  +  if(plan.length==0 || plan[0]!=c) {
          382  +   plan = "";
          383  +   plan_broken = true;
          384  +  }
          385  +  else
          386  +   plan = plan[1..$];
   378    387    }
   379    388   }
   380    389   
   381    390   alias Solver_2!(Solver_1) MainSolver;
   382    391   //alias Solver_1 MainSolver;