Refactor of dwarfmove logic.

This commit is contained in:
Eric S. Raymond 2017-06-08 06:25:52 -04:00
parent af453777d4
commit e3f3c86d1d

24
main.c
View file

@ -220,13 +220,19 @@ static bool dwarfmove(void)
if(kk != 0) if(kk != 0)
do { do {
game.newloc=MOD(labs(TRAVEL[kk])/1000,1000); game.newloc=MOD(labs(TRAVEL[kk])/1000,1000);
if(game.newloc > 300 || !INDEEP(game.newloc) || game.newloc == game.odloc[I] || (J > 1 && game.newloc == TK[J-1]) || J >= 20 || game.newloc == game.dloc[I] || /* Have we avoided a dwarf enciounter? */
FORCED(game.newloc) || (I == 6 && CNDBIT(game.newloc,3)) || bool avoided = (game.newloc > 300 ||
labs(TRAVEL[kk])/1000000 == 100) !INDEEP(game.newloc) ||
goto L6014; game.newloc == game.odloc[I] ||
TK[J]=game.newloc; (J > 1 && game.newloc == TK[J-1]) ||
J=J+1; J >= 20 ||
L6014: game.newloc == game.dloc[I] ||
FORCED(game.newloc) ||
(I == 6 && CNDBIT(game.newloc,3)) ||
labs(TRAVEL[kk])/1000000 == 100);
if (!avoided) {
TK[J++] = game.newloc;
}
kk=kk+1; kk=kk+1;
} while } while
(TRAVEL[kk-1] >= 0); (TRAVEL[kk-1] >= 0);
@ -247,7 +253,7 @@ static bool dwarfmove(void)
* (game.prop=0). */ * (game.prop=0). */
if(game.loc == game.chloc || game.prop[CHEST] >= 0) continue; if(game.loc == game.chloc || game.prop[CHEST] >= 0) continue;
K=0; K=0;
for (J=50; J<=MAXTRS; J++) { for (J=MINTRS; J<=MAXTRS; J++) {
/* Pirate won't take pyramid from plover room or dark /* Pirate won't take pyramid from plover room or dark
* room (too easy!). */ * room (too easy!). */
if(J == PYRAM && (game.loc == PLAC[PYRAM] || game.loc == PLAC[EMRALD])) if(J == PYRAM && (game.loc == PLAC[PYRAM] || game.loc == PLAC[EMRALD]))
@ -256,7 +262,7 @@ static bool dwarfmove(void)
goto L6021; goto L6021;
L6020: L6020:
if(HERE(J))K=1; if(HERE(J))K=1;
} /* end loop */ }
if(game.tally == 1 && K == 0 && game.place[CHEST] == 0 && HERE(LAMP) && game.prop[LAMP] == 1) if(game.tally == 1 && K == 0 && game.place[CHEST] == 0 && HERE(LAMP) && game.prop[LAMP] == 1)
goto L6025; goto L6025;
if(game.odloc[PIRATE] != game.dloc[PIRATE] && PCT(20)) if(game.odloc[PIRATE] != game.dloc[PIRATE] && PCT(20))