Heed other hazards when bumping the Wumpus
[wumpus.git] / wumpus.c
index 0bb6315bccfb3f4360ea3c828d679f51d2888401..857bce2df15bfc267b90165cf3581be85931bf2b 100644 (file)
--- 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)                                        */
@@ -517,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                                     */
@@ -528,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                                     */