Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IDENTIFICATION DIVISION.
- PROGRAM-ID. GUESSDOOR.
- AUTHOR. SEAN DENNIS.
- DATE-WRITTEN. 2026-04-05.
- *> This is written in free-format for GNUCobol.
- *> To compile this, use GNUCobol with this command line:
- *> cobc -x -free guess.cob
- *>
- *> Written by Sean Dennis with assistance from Microsoft Copilot.
- *> Released under the MIT License.
- *> (C) 2026 Sean Dennis
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- FILE-CONTROL.
- SELECT DOORFILE ASSIGN TO "DOOR.SYS"
- ORGANIZATION IS LINE SEQUENTIAL
- FILE STATUS IS DOORFILE-STATUS.
- DATA DIVISION.
- FILE SECTION.
- FD DOORFILE.
- 01 DOOR-LINE PIC X(255).
- WORKING-STORAGE SECTION.
- 01 DOORFILE-STATUS PIC XX.
- 01 LINECTR PIC 9(3) VALUE 0.
- 01 LOCAL-MODE PIC X VALUE "N".
- 01 DS-COMPORT PIC X(20).
- 01 DS-BAUDRATE PIC X(20).
- 01 DS-PARITY PIC X(20).
- 01 DS-NODE PIC X(20).
- 01 DS-DTE PIC X(20).
- 01 DS-USERNAME PIC X(40).
- 01 DS-CITYSTATE PIC X(40).
- 01 DS-SECURITY PIC X(10).
- 01 DS-REMAIN-SECS PIC X(10).
- 01 DS-REMAIN-MINS PIC X(10).
- 01 DS-GRAPHICS PIC X(10).
- 01 DS-BIRTHDATE PIC X(20).
- 01 DS-ALIAS PIC X(40).
- 01 CLR-RESET PIC X(4) VALUE X"1B5B306D".
- 01 CLR-GREEN PIC X(5) VALUE X"1B5B33326D".
- 01 CLR-RED PIC X(5) VALUE X"1B5B33316D".
- 01 CLR-YELLOW PIC X(5) VALUE X"1B5B33336D".
- 01 CLR-CYAN PIC X(5) VALUE X"1B5B33366D".
- 01 SECRET-NUMBER PIC 9(3).
- 01 USER-GUESS PIC 9(3).
- 01 GUESS-COUNT PIC 9 VALUE 0.
- 01 MAX-GUESSES PIC 9 VALUE 6.
- 01 SECRET-DISPLAY PIC ZZ9.
- 01 START-TIME PIC 9(6).
- 01 CURRENT-TIME PIC 9(6).
- 01 ELAPSED PIC 9(6).
- 01 TIME-LEFT PIC 9(3) VALUE 10.
- 01 TIME-LEFT2 PIC ZZ9.
- 01 TEMP-NUM PIC 9(6).
- PROCEDURE DIVISION.
- MAIN-LOGIC.
- OPEN INPUT DOORFILE
- IF DOORFILE-STATUS NOT = "00"
- MOVE "Y" TO LOCAL-MODE
- ELSE
- PERFORM UNTIL LINECTR >= 36
- READ DOORFILE INTO DOOR-LINE
- AT END EXIT PERFORM
- END-READ
- ADD 1 TO LINECTR
- EVALUATE LINECTR
- WHEN 1 MOVE DOOR-LINE TO DS-COMPORT
- WHEN 2 MOVE DOOR-LINE TO DS-BAUDRATE
- WHEN 3 MOVE DOOR-LINE TO DS-PARITY
- WHEN 4 MOVE DOOR-LINE TO DS-NODE
- WHEN 5 MOVE DOOR-LINE TO DS-DTE
- WHEN 10 MOVE DOOR-LINE TO DS-USERNAME
- WHEN 11 MOVE DOOR-LINE TO DS-CITYSTATE
- WHEN 15 MOVE DOOR-LINE TO DS-SECURITY
- WHEN 18 MOVE DOOR-LINE TO DS-REMAIN-SECS
- WHEN 19 MOVE DOOR-LINE TO DS-REMAIN-MINS
- WHEN 20 MOVE DOOR-LINE TO DS-GRAPHICS
- WHEN 32 MOVE DOOR-LINE TO DS-BIRTHDATE
- WHEN 36 MOVE DOOR-LINE TO DS-ALIAS
- END-EVALUATE
- END-PERFORM
- CLOSE DOORFILE
- END-IF
- DISPLAY X"1B""[2J" X"1B""[H".
- IF LOCAL-MODE = "Y"
- DISPLAY "Running in LOCAL MODE (no DOOR.SYS found)."
- ELSE
- DISPLAY "Welcome, " DS-USERNAME
- MOVE DS-REMAIN-MINS TO TIME-LEFT
- END-IF
- ACCEPT TEMP-NUM FROM TIME
- COMPUTE SECRET-NUMBER = FUNCTION RANDOM(TEMP-NUM) * 100 + 1
- DISPLAY CLR-CYAN "Welcome to Guess the Number!" CLR-RESET
- DISPLAY SPACE
- DISPLAY "I'm thinking of a number between 1 and 100."
- DISPLAY SPACE
- DISPLAY "You have " MAX-GUESSES " guesses."
- DISPLAY SPACE
- MOVE TIME-LEFT TO TIME-LEFT2
- DISPLAY "Time left in door: " TIME-LEFT2 " minutes."
- ACCEPT START-TIME FROM TIME
- PERFORM UNTIL GUESS-COUNT = MAX-GUESSES OR TIME-LEFT = 0
- ACCEPT CURRENT-TIME FROM TIME
- COMPUTE ELAPSED = CURRENT-TIME - START-TIME
- IF ELAPSED >= 60
- SUBTRACT 1 FROM TIME-LEFT
- MOVE CURRENT-TIME TO START-TIME
- IF TIME-LEFT = 0
- DISPLAY CLR-RED "Time's up!" CLR-RESET
- STOP RUN
- END-IF
- END-IF
- ADD 1 TO GUESS-COUNT
- DISPLAY "Guess " GUESS-COUNT ": "
- ACCEPT USER-GUESS
- IF USER-GUESS = SECRET-NUMBER
- DISPLAY CLR-GREEN "Correct! You win!" CLR-RESET
- STOP RUN
- END-IF
- IF USER-GUESS < SECRET-NUMBER
- DISPLAY CLR-YELLOW "Too low!" CLR-RESET
- ELSE
- DISPLAY CLR-YELLOW "Too high!" CLR-RESET
- END-IF
- END-PERFORM
- DISPLAY CLR-RED "Sorry, you're out of guesses." CLR-RESET
- MOVE SECRET-NUMBER TO SECRET-DISPLAY
- DISPLAY "The number was: " SECRET-DISPLAY
- STOP RUN.
Advertisement
Add Comment
Please, Sign In to add comment