Differences From Artifact [6849c1cc0eb810a9]:
- File
src/game.d
- 2012-07-16 10:02:57 - part of checkin [b96971b0b6] on branch trunk - refactoring. (user: kinaba) [annotate]
To Artifact [18f8bb38825744d0]:
- File
src/game.d
- 2012-07-16 10:08:05 - part of checkin [03b7073abc] on branch trunk - refactor. (user: kinaba) [annotate]
315 bool use_razor(bool hige_day) 315 bool use_razor(bool hige_day)
316 { 316 {
317 if(collected_razor > 0) 317 if(collected_razor > 0)
318 { 318 {
319 collected_razor--; 319 collected_razor--;
320 for(int dy=-1; dy<=+1; ++dy) 320 for(int dy=-1; dy<=+1; ++dy)
321 for(int dx=-1; dx<=+1; ++dx) 321 for(int dx=-1; dx<=+1; ++dx)
322 if(this[robot.y+dy,robot.x+dx] == 'W') { | 322 if(this[robot.y+dy,robot.x+dx] == 'W')
323 emptified(new Pos(robot.y+dy,robot.x+dx) | 323 emptify(new Pos(robot.y+dy,robot.x+dx));
324 this[robot.y+dy,robot.x+dx] = ' '; <
325 } <
326 } 324 }
327 return update(hige_day); 325 return update(hige_day);
328 } 326 }
329 327
330 // Register a position that may become empty in the last turn. 328 // Register a position that may become empty in the last turn.
331 void emptified(Pos p) | 329 void emptify(Pos p)
332 { 330 {
> 331 this[p] = ' ';
333 for(int dy=0; dy<=+1; ++dy) 332 for(int dy=0; dy<=+1; ++dy)
334 for(int dx=-1; dx<=+1; ++dx) 333 for(int dx=-1; dx<=+1; ++dx)
335 may_update ~= new Pos(p.y+dy, p.x+dx); 334 may_update ~= new Pos(p.y+dy, p.x+dx);
336 } 335 }
337 336
338 bool move(int dy, int dx, bool hige_day, in Trampoline tr) 337 bool move(int dy, int dx, bool hige_day, in Trampoline tr)
339 { 338 {
................................................................................................................................................................................
342 341
343 if( '\\' == this[next] ) collected_lambda++; 342 if( '\\' == this[next] ) collected_lambda++;
344 if( '!' == this[next] ) collected_razor++; 343 if( '!' == this[next] ) collected_razor++;
345 if( 'O' == this[next] ) cleared = true; 344 if( 'O' == this[next] ) cleared = true;
346 345
347 if( is_spacy(this[next]) ) 346 if( is_spacy(this[next]) )
348 { 347 {
349 emptified(robot); | 348 emptify(robot);
350 this[y,x] = ' '; <
351 this[next] = 'R'; <
352 robot = next; 349 robot = next;
> 350 this[next] = 'R';
353 } 351 }
354 else if(dy==0 && is_rocky(this[next]) && ' '==this[y+dy*2,x+dx*2 352 else if(dy==0 && is_rocky(this[next]) && ' '==this[y+dy*2,x+dx*2
355 { 353 {
356 char rock = this[next]; 354 char rock = this[next];
357 emptified(robot); | 355 emptify(robot);
358 this[y,x] = ' '; | 356 robot = next;
359 this[next] = 'R'; 357 this[next] = 'R';
360 this[y+dy*2,x+dx*2] = rock; 358 this[y+dy*2,x+dx*2] = rock;
361 robot = next; <
362 may_update ~= new Pos(y+dy*2,x+dx*2); 359 may_update ~= new Pos(y+dy*2,x+dx*2);
363 } 360 }
364 else if(is_trampoline_source(this[next])) 361 else if(is_trampoline_source(this[next]))
365 { 362 {
366 emptified(robot); | 363 emptify(robot);
367 this[y,x] = ' '; <
368 Pos tp = tr.target_pos(this[next]); 364 Pos tp = tr.target_pos(this[next]);
369 foreach(p; tr.source_pos(this[tp])) 365 foreach(p; tr.source_pos(this[tp]))
370 { <
371 emptified(p); | 366 emptify(p);
372 this[p] = ' '; <
373 } <
374 this[tp] = 'R'; 367 this[tp] = 'R';
375 robot = tp; 368 robot = tp;
376 } 369 }
377 return update(hige_day); 370 return update(hige_day);
378 } 371 }
379 372
380 bool update(bool hige_day) 373 bool update(bool hige_day)
................................................................................................................................................................................
386 scope(exit) { 379 scope(exit) {
387 may_update.length = 0; 380 may_update.length = 0;
388 foreach(wr; write_buffer) { 381 foreach(wr; write_buffer) {
389 this[wr[0],wr[1]] = wr[2]; 382 this[wr[0],wr[1]] = wr[2];
390 if(is_rocky(wr[2])) 383 if(is_rocky(wr[2]))
391 may_update ~= new Pos(wr[0],wr[1]); 384 may_update ~= new Pos(wr[0],wr[1]);
392 if(wr[2]==' ') 385 if(wr[2]==' ')
393 emptified(new Pos(wr[0], wr[1])); | 386 emptify(new Pos(wr[0], wr[1]));
394 } 387 }
395 } 388 }
396 389
397 if(collected_lambda == total_lambda) 390 if(collected_lambda == total_lambda)
398 if(this[lift]=='L') 391 if(this[lift]=='L')
399 this[lift] = 'O'; 392 this[lift] = 'O';
400 393