digimaus

Guess The Number (COBOL BBS Door)

Apr 9th, 2026 (edited)
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
COBOL 4.56 KB | Source Code | 0 0
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. GUESSDOOR.
  3. AUTHOR. SEAN DENNIS.
  4. DATE-WRITTEN. 2026-04-05.
  5.  
  6. *> This is written in free-format for GNUCobol.
  7. *> To compile this, use GNUCobol with this command line:
  8. *> cobc -x -free guess.cob
  9. *>
  10. *> Written by Sean Dennis with assistance from Microsoft Copilot.
  11. *> Released under the MIT License.
  12. *> (C) 2026 Sean Dennis
  13.  
  14. ENVIRONMENT DIVISION.
  15. INPUT-OUTPUT SECTION.
  16. FILE-CONTROL.
  17.     SELECT DOORFILE ASSIGN TO "DOOR.SYS"
  18.         ORGANIZATION IS LINE SEQUENTIAL
  19.         FILE STATUS IS DOORFILE-STATUS.
  20.  
  21. DATA DIVISION.
  22. FILE SECTION.
  23. FD DOORFILE.
  24. 01 DOOR-LINE PIC X(255).
  25.  
  26. WORKING-STORAGE SECTION.
  27. 01 DOORFILE-STATUS PIC XX.
  28. 01 LINECTR         PIC 9(3) VALUE 0.
  29. 01 LOCAL-MODE      PIC X VALUE "N".
  30.  
  31. 01 DS-COMPORT          PIC X(20).
  32. 01 DS-BAUDRATE         PIC X(20).
  33. 01 DS-PARITY           PIC X(20).
  34. 01 DS-NODE             PIC X(20).
  35. 01 DS-DTE              PIC X(20).
  36. 01 DS-USERNAME         PIC X(40).
  37. 01 DS-CITYSTATE        PIC X(40).
  38. 01 DS-SECURITY         PIC X(10).
  39. 01 DS-REMAIN-SECS      PIC X(10).
  40. 01 DS-REMAIN-MINS      PIC X(10).
  41. 01 DS-GRAPHICS         PIC X(10).
  42. 01 DS-BIRTHDATE        PIC X(20).
  43. 01 DS-ALIAS            PIC X(40).
  44.  
  45. 01 CLR-RESET   PIC X(4) VALUE X"1B5B306D".
  46. 01 CLR-GREEN   PIC X(5) VALUE X"1B5B33326D".
  47. 01 CLR-RED     PIC X(5) VALUE X"1B5B33316D".
  48. 01 CLR-YELLOW  PIC X(5) VALUE X"1B5B33336D".
  49. 01 CLR-CYAN    PIC X(5) VALUE X"1B5B33366D".
  50.  
  51. 01 SECRET-NUMBER      PIC 9(3).
  52. 01 USER-GUESS         PIC 9(3).
  53. 01 GUESS-COUNT        PIC 9 VALUE 0.
  54. 01 MAX-GUESSES        PIC 9 VALUE 6.
  55. 01 SECRET-DISPLAY     PIC ZZ9.
  56.  
  57. 01 START-TIME         PIC 9(6).
  58. 01 CURRENT-TIME       PIC 9(6).
  59. 01 ELAPSED            PIC 9(6).
  60. 01 TIME-LEFT          PIC 9(3) VALUE 10.
  61. 01 TIME-LEFT2         PIC ZZ9.
  62.  
  63. 01 TEMP-NUM           PIC 9(6).
  64.  
  65. PROCEDURE DIVISION.
  66. MAIN-LOGIC.
  67.     OPEN INPUT DOORFILE
  68.  
  69.     IF DOORFILE-STATUS NOT = "00"
  70.         MOVE "Y" TO LOCAL-MODE
  71.     ELSE
  72.         PERFORM UNTIL LINECTR >= 36
  73.             READ DOORFILE INTO DOOR-LINE
  74.                 AT END EXIT PERFORM
  75.             END-READ
  76.  
  77.             ADD 1 TO LINECTR
  78.  
  79.             EVALUATE LINECTR
  80.                 WHEN 1  MOVE DOOR-LINE TO DS-COMPORT
  81.                 WHEN 2  MOVE DOOR-LINE TO DS-BAUDRATE
  82.                 WHEN 3  MOVE DOOR-LINE TO DS-PARITY
  83.                 WHEN 4  MOVE DOOR-LINE TO DS-NODE
  84.                 WHEN 5  MOVE DOOR-LINE TO DS-DTE
  85.                 WHEN 10 MOVE DOOR-LINE TO DS-USERNAME
  86.                 WHEN 11 MOVE DOOR-LINE TO DS-CITYSTATE
  87.                 WHEN 15 MOVE DOOR-LINE TO DS-SECURITY
  88.                 WHEN 18 MOVE DOOR-LINE TO DS-REMAIN-SECS
  89.                 WHEN 19 MOVE DOOR-LINE TO DS-REMAIN-MINS
  90.                 WHEN 20 MOVE DOOR-LINE TO DS-GRAPHICS
  91.                 WHEN 32 MOVE DOOR-LINE TO DS-BIRTHDATE
  92.                 WHEN 36 MOVE DOOR-LINE TO DS-ALIAS
  93.             END-EVALUATE
  94.         END-PERFORM
  95.  
  96.         CLOSE DOORFILE
  97.     END-IF
  98.  
  99.     DISPLAY X"1B""[2J" X"1B""[H".
  100.  
  101.     IF LOCAL-MODE = "Y"
  102.         DISPLAY "Running in LOCAL MODE (no DOOR.SYS found)."
  103.     ELSE
  104.         DISPLAY "Welcome, " DS-USERNAME
  105.         MOVE DS-REMAIN-MINS TO TIME-LEFT
  106.     END-IF
  107.  
  108.     ACCEPT TEMP-NUM FROM TIME
  109.     COMPUTE SECRET-NUMBER = FUNCTION RANDOM(TEMP-NUM) * 100 + 1
  110.  
  111.     DISPLAY CLR-CYAN "Welcome to Guess the Number!" CLR-RESET
  112.     DISPLAY SPACE
  113.     DISPLAY "I'm thinking of a number between 1 and 100."
  114.     DISPLAY SPACE
  115.     DISPLAY "You have " MAX-GUESSES " guesses."
  116.     DISPLAY SPACE
  117.     MOVE TIME-LEFT TO TIME-LEFT2
  118.     DISPLAY "Time left in door: " TIME-LEFT2 " minutes."
  119.  
  120.     ACCEPT START-TIME FROM TIME
  121.  
  122.     PERFORM UNTIL GUESS-COUNT = MAX-GUESSES OR TIME-LEFT = 0
  123.         ACCEPT CURRENT-TIME FROM TIME
  124.         COMPUTE ELAPSED = CURRENT-TIME - START-TIME
  125.  
  126.         IF ELAPSED >= 60
  127.             SUBTRACT 1 FROM TIME-LEFT
  128.             MOVE CURRENT-TIME TO START-TIME
  129.             IF TIME-LEFT = 0
  130.                 DISPLAY CLR-RED "Time's up!" CLR-RESET
  131.                 STOP RUN
  132.             END-IF
  133.         END-IF
  134.  
  135.         ADD 1 TO GUESS-COUNT
  136.         DISPLAY "Guess " GUESS-COUNT ": "
  137.         ACCEPT USER-GUESS
  138.  
  139.         IF USER-GUESS = SECRET-NUMBER
  140.             DISPLAY CLR-GREEN "Correct! You win!" CLR-RESET
  141.             STOP RUN
  142.         END-IF
  143.  
  144.         IF USER-GUESS < SECRET-NUMBER
  145.             DISPLAY CLR-YELLOW "Too low!" CLR-RESET
  146.         ELSE
  147.             DISPLAY CLR-YELLOW "Too high!" CLR-RESET
  148.         END-IF
  149.     END-PERFORM
  150.  
  151.     DISPLAY CLR-RED "Sorry, you're out of guesses." CLR-RESET
  152.     MOVE SECRET-NUMBER TO SECRET-DISPLAY
  153.     DISPLAY "The number was: " SECRET-DISPLAY
  154.  
  155.     STOP RUN.
  156.  
Advertisement
Add Comment
Please, Sign In to add comment