@@ -64,9 +64,9 @@ if(g.map[y,x]=='.') if(g.map[y+1,x]=='*'||g.map[y+1,x-1]=='*'||g.map[y+1,x+1]=='*' ||g.map[y,x+1]=='*'||g.map[y,x-1]=='*') tgt ~= new Pos(y,x); - cand ~= search(g, ro, tgt, death); + cand ~= search(g, ro, tgt, death, true); } if(cand.empty) cand ~= tuple('W',int.max); @@ -109,12 +109,14 @@ return c; } - Tuple!(char,int)[] search(in Game g, in Pos s, in Pos[] gs, string death) + Tuple!(char,int)[] search(in Game g, in Pos s, in Pos[] gs, string death, bool danger_ok=false) { bool danger(int y, int x) { + if(g.map[y,x] == ' ' || g.map[y,x] == 'R') + return false; if(g.map[y+1,x] == '*') return true; if(g.map[y+1,x-1]=='*' && (g.map[y,x-1]=='\\'||g.map[y,x-1]=='*') && (g.map[y+1,x]==' '||g.map[y+1,x]=='R')) return true; @@ -225,7 +227,7 @@ q = q2; } return []; } - return tryA() ~ tryB() ~ tryC(); + return (danger_ok ? [] : tryA()) ~ tryB() ~ tryC(); } }