Tic Tac Toe implemented in COBOL
at main 5.4 kB view raw
1 IDENTIFICATION DIVISION. 2 PROGRAM-ID. tictactoe. 3 AUTHOR. Trey Bastian. 4 5 DATA DIVISION. 6 WORKING-STORAGE SECTION. 7 01 Player. 8 02 Player1. 9 03 Turn PIC 9 value 1. 10 02 Player2. 11 03 Turn PIC 9 VALUE ZEROS. 12 02 PlayerMove PIC 99 VALUE ZEROS. 13 88 ValidInput VALUE 1 THRU 9. 14 02 Won PIC 9 VALUE ZERO. 15 88 Player1Win VALUE 1. 16 88 Player2Win VALUE 2. 17 88 Stalemate VALUE 3. 18 19 01 Board OCCURS 9 TIMES. 20 02 State PIC X VALUE "N". 21 02 Score PIC 9 VALUE ZEROS. 22 23 01 TMP PIC 99 VALUE 0. 24 01 TMP2 PIC 99 VALUE 0. 25 01 TMP3 PIC 99 VALUE 0. 26 01 TMP4 PIC 99 VALUE 0. 27 01 BoardHasBlanks PIC 9 VALUE 0. 28 29 PROCEDURE DIVISION. 30 31 Intro SECTION. 32 DISPLAY "Welcome to Trey's Dev Shed Tic Tac Toe Extravaganza!". 33 34 Setup SECTION. 35 MOVE 2 TO Score OF Board(1). 36 MOVE 7 TO Score OF Board(2). 37 MOVE 6 TO Score OF Board(3). 38 MOVE 9 TO Score OF Board(4). 39 MOVE 5 TO Score OF Board(5). 40 MOVE 1 TO Score OF Board(6). 41 Move 4 TO Score OF Board(7). 42 MOVE 3 TO Score OF Board(8). 43 MOVE 8 TO Score OF Board(9). 44 45 Game SECTION. 46 PERFORM UNTIL Player1Win OR Player2Win OR Stalemate 47 48 PERFORM VARYING TMP FROM 1 BY 1 UNTIL TMP > 3 49 DISPLAY "----------------" 50 DISPLAY "|" WITH NO ADVANCING 51 PERFORM VARYING TMP2 FROM 1 BY 1 UNTIL TMP2 > 3 52 53 COMPUTE TMP3 = (TMP * 3) + TMP2 - 3 54 55 IF State OF Board(TMP3) = "N" THEN 56 DISPLAY " " TMP3 " |" WITH NO ADVANCING 57 ELSE 58 DISPLAY " " State OF Board(TMP3) " |" 59 WITH NO ADVANCING 60 END-IF 61 END-PERFORM 62 DISPLAY SPACE 63 END-PERFORM 64 DISPLAY "---------------" 65 66 PERFORM UNTIL ValidInput 67 IF Turn OF Player1 = 1 THEN 68 DISPLAY "Player 1 " WITH NO ADVANCING 69 ELSE 70 DISPLAY "Player 2 " WITH NO ADVANCING 71 END-IF 72 73 DISPLAY "make your move [1-9]: " WITH NO ADVANCING 74 ACCEPT PlayerMove 75 76 IF ValidInput THEN 77 78 IF State OF Board(PlayerMove) EQUAL "N" 79 EVALUATE 1 80 WHEN Turn OF Player1 81 Move "X" TO State OF Board(PlayerMove) 82 83 MOVE 0 TO Turn OF Player1 84 MOVE 1 TO Turn OF PLayer2 85 86 WHEN Turn OF Player2 87 MOVE "O" TO State OF Board(PlayerMove) 88 89 MOVE 1 TO Turn OF Player1 90 MOVE 0 TO Turn OF Player2 91 END-EVALUATE 92 ELSE 93 MOVE 0 TO PlayerMove 94 DISPLAY "Invalid Move, Please Try Again" 95 ELSE 96 DISPLAY "Invalid Move, Please Try Again" 97 END-IF 98 END-PERFORM 99 MOVE 0 TO PlayerMove 100 101 * Check Winners 102 MOVE 0 TO BoardHasBlanks 103 PERFORM VARYING TMP FROM 1 BY 1 UNTIL TMP = 9 OR 104 Player1Win OR Player2Win 105 IF State of Board(TMP) = "N" THEN 106 MOVE 1 TO BoardHasBlanks 107 END-IF 108 PERFORM VARYING TMP2 FROM 1 BY 1 UNTIL TMP2 = 9 OR 109 Player1Win OR Player2Win 110 PERFORM VARYING TMP3 FROM 1 BY 1 UNTIL TMP3 = 9 OR 111 Player1Win OR Player2Win 112 113 IF TMP NOT EQUAL TMP2 AND TMP NOT EQUAL TMP3 AND 114 TMP2 NOT EQUAL TMP3 THEN 115 116 ADD Score OF Board(TMP) TO Score OF Board(TMP2) 117 GIVING TMP4 118 ADD Score OF Board(TMP3) To TMP4 119 IF TMP4 = 15 THEN 120 EVALUATE 0 121 WHEN Turn OF Player1 122 IF State OF Board(TMP) EQUAL "X" AND State 123 OF Board(TMP2) EQUAL "X" 124 AND STATE OF BOARD(TMP3) EQUAL "X" THEN 125 SET Player1Win TO TRUE 126 END-IF 127 WHEN Turn OF Player2 128 IF State OF Board(TMP) EQUAL "O" AND State 129 OF Board(TMP2) EQUAL "O" AND STATE 130 OF BOARD(TMP3) EQUAL "O" THEN 131 SET Player2Win TO TRUE 132 END-IF 133 END-EVALUATE 134 END-IF 135 END-IF 136 END-PERFORM 137 END-PERFORM 138 END-PERFORM 139 140 IF BoardHasBlanks = 0 THEN 141 Set Stalemate to TRUE 142 END-IF 143 144 145 END-PERFORM. 146 Outro SECTION. 147 EVALUATE TRUE 148 WHEN Player1Win DISPLAY "CONGRATS PLAYER 1 Has Won!" 149 WHEN Player2Win DISPLAY "CONGRATS PLAYER 2 Has Won!" 150 WHEN Stalemate DISPLAY "No one won!" 151 END-EVALUATE 152 STOP RUN.