Differences From Artifact [1928257cf62dcd18]:
- File        
game.d
- 2012-07-14 08:31:35 - part of checkin [a5e6c99b3d] on branch trunk - Guarded. (user: kinaba) [annotate]
 
To Artifact [7c15481493257083]:
- File        
game.d
- 2012-07-14 08:55:55 - part of checkin [69105bf94a] on branch trunk - Stand alone solver. (user: kinaba) [annotate]
 
- File        
src/game.d
- 2012-07-14 09:16:47 - part of checkin [6293256fec] on branch trunk - Preparing for submission... (user: kinaba) [annotate]
 
   95                                                                                        95  
   96          static Map load(string[] raw_data, string[string] params)                     96          static Map load(string[] raw_data, string[string] params)
   97          {                                                                             97          {
   98                  // TODO: choose optimal representation.                               98                  // TODO: choose optimal representation.
   99                  return new Map(raw_data, params);                                     99                  return new Map(raw_data, params);
  100          }                                                                            100          }
  101                                                                                       101  
  102          private {                                                                <
  103                  char[][] data;                                                   |   102          char[][] data;
  104                  Pos robot;                                                       |   103          Pos robot;
  105                  Pos lift;                                                        |   104          Pos lift;
  106                  int waterproof;                                                  |   105          int waterproof;
  107          }                                                                        |   106  
  108          Map clone() { return new Map(this); }                                        107          Map clone() { return new Map(this); }
  109          this(Map m) {                                                                108          this(Map m) {
  110                  foreach(s; m.data)                                                   109                  foreach(s; m.data)
  111                          this.data ~= s.dup;                                          110                          this.data ~= s.dup;
  112                  this.robot = m.robot.clone();                                        111                  this.robot = m.robot.clone();
  113                  this.lift = m.lift.clone();                                          112                  this.lift = m.lift.clone();
  114                  this.waterproof = m.waterproof;                                      113                  this.waterproof = m.waterproof;
................................................................................................................................................................................
  125                          this.data[$-1][r.length..$] = ' ';                           124                          this.data[$-1][r.length..$] = ' ';
  126                  }                                                                    125                  }
  127                                                                                       126  
  128                  for(int y=1; y<=H; ++y)                                              127                  for(int y=1; y<=H; ++y)
  129                  for(int x=1; x<=W; ++x) {                                            128                  for(int x=1; x<=W; ++x) {
  130                          if(this[y,x] == 'R')                                         129                          if(this[y,x] == 'R')
  131                                  this.robot = new Pos(y,x);                           130                                  this.robot = new Pos(y,x);
  132                          if(this[y,x] == 'L')                                     |   131                          if(this[y,x] == 'L' || this[y,x] == 'O')
  133                                  this.lift = new Pos(y,x);                            132                                  this.lift = new Pos(y,x);
  134                  }                                                                    133                  }
  135                                                                                       134  
  136                  this.waterproof = params.get("Waterproof", "5").to!int();            135                  this.waterproof = params.get("Waterproof", "5").to!int();
  137          }                                                                            136          }
  138                                                                                       137  
  139          const @property {                                                            138          const @property {
................................................................................................................................................................................
  164                  data[H-1-y][x] = c;                                                  163                  data[H-1-y][x] = c;
  165          }                                                                            164          }
  166                                                                                       165  
  167          void opIndexAssign(char c, Pos p)                                            166          void opIndexAssign(char c, Pos p)
  168          {                                                                            167          {
  169                  this[p.y, p.x] = c;                                                  168                  this[p.y, p.x] = c;
  170          }                                                                            169          }
                                                                                        >   170  
                                                                                        >   171          Pos[] lambdas() {
                                                                                        >   172                  Pos[] ans;
                                                                                        >   173                  for(int y=1; y<=H; ++y)
                                                                                        >   174                  for(int x=1; x<=W; ++x)
                                                                                        >   175                          if(this[y,x] == '\\')
                                                                                        >   176                                  ans ~= new Pos(y,x);
                                                                                        >   177                  return ans;
                                                                                        >   178          }
  171                                                                                       179  
  172          bool cleared()                                                               180          bool cleared()
  173          {                                                                            181          {
  174                  for(int y=1; y<=H; ++y)                                              182                  for(int y=1; y<=H; ++y)
  175                  for(int x=1; x<=W; ++x)                                              183                  for(int x=1; x<=W; ++x)
  176                          if(this[y,x] == 'L' || this[y,x] == 'O')                     184                          if(this[y,x] == 'L' || this[y,x] == 'O')
  177                                  return false;                                        185                                  return false;