Diff
Not logged in

Differences From Artifact [a41fda48c5fe0806]:

To Artifact [accda2201a6a857e]:


288 } 288 } 289 289 290 return c; 290 return c; 291 } 291 } 292 292 293 Tuple!(char,int)[] search(in Game g, in Pos s, in Pos[] gs, string death 293 Tuple!(char,int)[] search(in Game g, in Pos s, in Pos[] gs, string death 294 { 294 { > 295 bool very_danger(int y, int x) > 296 { > 297 if(g.map[y,x] == ' ' || g.map[y,x] == 'R') > 298 return false; > 299 if(is_rocky(g.map[y+1,x])) > 300 return true; > 301 return false; > 302 } 295 bool danger(int y, int x) 303 bool danger(int y, int x) 296 { 304 { 297 if(g.map[y,x] == ' ' || g.map[y,x] == 'R') 305 if(g.map[y,x] == ' ' || g.map[y,x] == 'R') 298 return false; 306 return false; 299 if(is_rocky(g.map[y+1,x])) 307 if(is_rocky(g.map[y+1,x])) 300 return true; 308 return true; 301 if(is_rocky(g.map[y+1,x-1]) && (g.map[y,x-1]=='\\'||is_r 309 if(is_rocky(g.map[y+1,x-1]) && (g.map[y,x-1]=='\\'||is_r ................................................................................................................................................................................ 311 return false; 319 return false; 312 } 320 } 313 321 314 // avoid directly below '*' 322 // avoid directly below '*' 315 Tuple!(char,int)[] tryA() { 323 Tuple!(char,int)[] tryA() { 316 const(Pos)[] q; 324 const(Pos)[] q; 317 foreach(p; gs) 325 foreach(p; gs) 318 if(!danger(p.y,p.x)) | 326 if(!very_danger(p.y,p.x)) 319 q ~= p; 327 q ~= p; 320 bool[][] v = new bool[][](g.map.H+2, g.map.W+2); 328 bool[][] v = new bool[][](g.map.H+2, g.map.W+2); 321 foreach(p; q) v[p.y][p.x]=true; 329 foreach(p; q) v[p.y][p.x]=true; 322 bool first_step = true; 330 bool first_step = true; 323 for(int step=1; q.length; ++step) { 331 for(int step=1; q.length; ++step) { 324 Pos[] q2; 332 Pos[] q2; 325 foreach(p; q) { 333 foreach(p; q) {