summaryrefslogtreecommitdiff
path: root/tictactoe.cbl
blob: b796111a6bd491257254d356ddd73c23acab97cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
       IDENTIFICATION DIVISION.
       PROGRAM-ID. tictactoe.
       AUTHOR. Trey Bastian.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 Player1.
           02 Score PIC 99 VALUE ZEROS.
             88 Win VALUE 15.
           02 Turn PIC 9 value 1.
       01 Player2.
           02 Score PIC 99 VALUE ZEROES.
             88 Win VALUE 15.
           02 Turn PIC 9 value ZEROS.

       01 PlayerMove PIC 9 VALUE ZEROS.
       01 Board.
         02 Rows OCCURS 3 TIMES.
           03 Entries OCCURS 3 TIMES.
             04 EntryScore PIC 9 VALUE ZEROS.
             04 State PIC Z Value "_".

       01 InitRowIdx PIC S9 VALUE 1.
       01 AccessRowIdx PIC 9 VALUE 0.
       01 AccessEntryIdx PIC 9  VALUE 0.
       01 InitEntryIdx PIC S9 VALUE 2.
       01 InitScoreValue PIC 99 VALUE 1.
       01 InitDivideResult PIC S99 VALUE ZEROS. 
       01 InitDivideRemainder PIC 99 VALUE ZEROS.
       01 IdxRow PIC 9 VALUE 1.
       01 IdxCol PIC 9 VALUE 1.
       01 InitAdd3 PIC 99 VALUE 0.
       PROCEDURE DIVISION.

       Intro SECTION.
       DISPLAY "Welcome to Trey's Dev Shed Tic Tac Toe Extravaganza!".

       Setup SECTION.
              PERFORM VARYING InitScoreValue FROM 1 BY 1 UNTIL
                InitScoreValue > 9 
                COMPUTE AccessRowIdx = InitRowIdx + 1
                COMPUTE AccessEntryIdx = InitEntryIdx + 1
                MOVE InitScoreValue TO 
                   EntryScore(AccessRowIdx AccessEntryIdx)                

                DIVIDE InitScoreValue BY 3 GIVING InitDivideResult
                REMAINDER InitDivideRemainder 

                IF InitDivideRemainder = 0 THEN
                  COMPUTE InitEntryIdx = InitEntryIdx - 1
                ELSE
                   COMPUTE InitRowIdx = InitRowIdx - 1
                   COMPUTE InitEntryIdx = InitEntryIdx + 1
                END-IF

                COMPUTE InitAdd3 = InitRowIdx + 3
                DIVIDE InitAdd3 BY 3 GIVING InitDivideResult REMAINDER
                InitDivideRemainder 
                COMPUTE InitRowIdx = InitDivideRemainder

                COMPUTE InitAdd3 = InitEntryIdx + 3
                DIVIDE InitAdd3 BY 3 GIVING InitDivideResult REMAINDER
                InitDivideRemainder
                COMPUTE InitEntryIdx = InitDivideRemainder
              END-PERFORM.
       Game SECTION.
           PERFORM UNTIL Win OF Score OF Player1 OR Win OF Score OF
             Player2
             PERFORM VARYING IdxRow FROM 1 BY 1 UNTIL IdxRow > 3
               PERFORM VARYING IdxCol FROM 1 BY 1 UNTIL IdxCol > 3
                 Display EntryScore(IdxRow, IdxCol)
               END-PERFORM
             END-PERFORM
             SET Win of Score of Player1 TO true
      * Accept Input
      * Validate Input
      * Make Move
      * Add Score
           END-PERFORM.

       Outro SECTION.
           IF Win OF Score OF Player1 THEN
               DISPLAY "CONGRATS PLAYER 1 Has Won!"
             ELSE
               DISPLAY "CONGRATS PLAYER 2 Has Won!"
            END-IF
        STOP RUN.