TRAFFIC JAM PROCEDURAL (or "Detailed") DESIGN
Note: These algorithms are to be included in the "method" section of
the corresponding Module Header.
PROCEDURE Play_Traffic_Jam
Print Welcome
Call Reset_Board
Call Display_Board
WHILE NOT Is_Win
Call Take_Turn
Call Display_Board
END WHILE
PROCEDURE Take_Turn
REPEAT
Show Prompt
Call Get_Move
UNTIL Is_Valid_Move
Call Update_Board
PROCEDURE Init_Board
Set puzzle array to starting configuration
Set empty position to 6.
PROCEDURE Display_Board
FOR position IN Rocks DO
Convert the marker in Puzzle(pos) to a printable character.
Print the marker character (>, <, or .)
END LOOP;
Put blank line
Put row of dashes
Put row of rock numbers 1 - 11
PROCEDURE Update_Board
Swap markers in the puzzle at The_Move and Empty_Position
Empty_Position becomes The_Move
FUNCTION Is_Win
RETURN (Puzzle = winning configuration)
FUNCTION Is_Valid_Move
IF The_Move out of bounds THEN RETURN FALSE
IF Marker at The_Move is Empty THEN RETURN FALSE
CASE Marker at The_Move
Facing Right :
IF the spot to its right is empty RETURN TRUE
IF the spot to its right has a Left marker
AND the "leapfrog" spot is empty RETURN TRUE
Facing Left :
IF the spot to its left is empty RETURN TRUE
IF the spot to its left has a Right marker
AND the "leapfrog" spot is empty RETURN TRUE
END CASE