X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=wumpus.c;h=857bce2df15bfc267b90165cf3581be85931bf2b;hb=be4ce66566dac1204dd742db5a93c50c40fb96cc;hp=f4dfe50fca6d90f60971f9e02c58fad8a001d066;hpb=c98e7d5b4f051d562c58e89dcc4622467e66f123;p=wumpus.git diff --git a/wumpus.c b/wumpus.c index f4dfe50..857bce2 100644 --- a/wumpus.c +++ b/wumpus.c @@ -230,16 +230,20 @@ void check_hazards() /* 635 PRINT "BATS NEARBY!" */ /* 640 NEXT K */ /* 645 NEXT J */ - for (k = 0; k < 3; k++) + for (j = WUMPUS; j < LOCS; j++) { - int room = cave[loc[YOU]][k]; - - if (room == loc[WUMPUS]) - (void) puts("I SMELL A WUMPUS!"); - else if (room == loc[PIT1] || room == loc[PIT2]) - (void) puts("I FEEL A DRAFT"); - else if (room == loc[BATS1] || room == loc[BATS2]) - (void) puts("BATS NEARBY!"); + for (k = 0; k < 3; k++) + { + if (cave[loc[YOU]][k] != loc[j]) + continue; + + if (j == WUMPUS) + (void) puts("I SMELL A WUMPUS!"); + else if (j == PIT1 || j == PIT2) + (void) puts("I FEEL A DRAFT"); + else if (j == BATS1 || j == BATS2) + (void) puts("BATS NEARBY!"); + } } /* 650 PRINT "YOU ARE IN ROOM "L(1) */ @@ -334,6 +338,11 @@ badrange: { int k1; +#ifdef DEBUG + (void) printf("Location is %d, looking for tunnel to room %d\n", + scratchloc+1, path[k]+1); +#endif + /* 810 FOR K1=1 TO 3 */ for (k1 = 0; k1 < 3; k1++) { @@ -351,13 +360,16 @@ badrange: */ scratchloc = path[k]; +#ifdef DEBUG + (void) printf("Found tunnel to room %d\n", scratchloc+1); +#endif + /* this simulates logic at 895 in the BASIC code */ check_shot(); if (finished != NOT) return; goto nextpath; } - /* 820 NEXT K1 */ } @@ -365,8 +377,15 @@ badrange: /* 830 L=S(L,FNB(1)) */ scratchloc = cave[scratchloc][FNB()]; +#ifdef DEBUG + (void) printf("No tunnel for room %d, new location is %d\n", + path[k]+1, scratchloc+1); +#endif + /* 835 GOTO 900 */ check_shot(); + if (finished != NOT) + return; /* 840 NEXT K */ nextpath: ; @@ -431,6 +450,10 @@ void move_wumpus() if (k < 3) loc[WUMPUS] = cave[loc[WUMPUS]][k]; +#ifdef DEBUG + (void) printf("Wumpus location is now room %d\n", loc[WUMPUS]+1); +#endif + /* 955 IF L(2)<>L THEN 970 */ if (loc[WUMPUS] != loc[YOU]) return; @@ -498,8 +521,11 @@ goodmove: /* 1080 RETURN */ (void) puts("... OOPS! BUMPED A WUMPUS!"); move_wumpus(); + if (finished < 0) + return; + /* Fall through since Wumpus could have been in a pit or bat room */ } - else if (scratchloc == loc[PIT1] || scratchloc == loc[PIT2]) + if (scratchloc == loc[PIT1] || scratchloc == loc[PIT2]) { /* 1085 REM *** PIT *** */ /* 1090 IF L=L(3) THEN 1100 */ @@ -509,8 +535,9 @@ goodmove: /* 1110 RETURN */ (void) puts("YYYYIIIIEEEE . . . FELL IN PIT"); finished = LOSE; + return; } - else if (scratchloc == loc[BATS1] || scratchloc == loc[BATS2]) + if (scratchloc == loc[BATS1] || scratchloc == loc[BATS2]) { /* 1115 REM *** BATS *** */ /* 1120 IF L=L(5) THEN 1130 */