Differences From Artifact [dca756d0b000be21]:
- File
src/solver.d
- 2012-07-14 15:47:12 - part of checkin [68c41bdbe0] on branch trunk - Hori-Susumu kun. (user: kinaba) [annotate]
To Artifact [7cfac19f78d8844c]:
- File
src/solver.d
- 2012-07-14 16:04:29 - part of checkin [0c10424b3c] on branch trunk - Minor fix for danger avoidance. (user: kinaba) [annotate]
61 61 const(Pos)[] tgt;
62 62 for(int y=1; y<=g.map.H; ++y)
63 63 for(int x=1; x<=g.map.W; ++x)
64 64 if(g.map[y,x]=='.')
65 65 if(g.map[y+1,x]=='*'||g.map[y+1,x-1]=='*'||g.map[y+1,x+1]=='*'
66 66 ||g.map[y,x+1]=='*'||g.map[y,x-1]=='*')
67 67 tgt ~= new Pos(y,x);
68 - cand ~= search(g, ro, tgt, death);
68 + cand ~= search(g, ro, tgt, death, true);
69 69 }
70 70
71 71 if(cand.empty)
72 72 cand ~= tuple('W',int.max);
73 73 sort!((Tuple!(char,int) c1, Tuple!(char,int) c2){
74 74 if(c1[1] != c2[1])
75 75 return c1[1] < c2[1];
................................................................................
106 106 if( cnt >= 3 && breath==1 ) {
107 107 forbidden_cell[ro.y][ro.x] = true;
108 108 }
109 109
110 110 return c;
111 111 }
112 112
113 - Tuple!(char,int)[] search(in Game g, in Pos s, in Pos[] gs, string death)
113 + Tuple!(char,int)[] search(in Game g, in Pos s, in Pos[] gs, string death, bool danger_ok=false)
114 114 {
115 115 bool danger(int y, int x)
116 116 {
117 + if(g.map[y,x] == ' ' || g.map[y,x] == 'R')
118 + return false;
117 119 if(g.map[y+1,x] == '*')
118 120 return true;
119 121 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'))
120 122 return true;
121 123 if(g.map[y+1,x+1]=='*' && (g.map[y,x+1]=='*') && (g.map[y+1,x]==' '||g.map[y+1,x]=='R'))
122 124 return true;
123 125 if(g.map[y,x-1]=='*' && (g.map[y-1,x-1]=='\\'||g.map[y-1,x-1]=='*') && (g.map[y-1,x]==' '||g.map[y-1,x]=='R'))
................................................................................
222 224 }
223 225 }
224 226 }
225 227 q = q2;
226 228 }
227 229 return [];
228 230 }
229 - return tryA() ~ tryB() ~ tryC();
231 + return (danger_ok ? [] : tryA()) ~ tryB() ~ tryC();
230 232 }
231 233 }