···
8
-
02 Score PIC 99 VALUE ZEROS.
10
-
02 Turn PIC 9 value 1.
12
-
02 Score PIC 99 VALUE ZEROES.
14
-
02 Turn PIC 9 value ZEROS.
9
+
03 Turn PIC 9 value 1.
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.
16
-
01 PlayerMove PIC 9 VALUE ZEROS.
18
-
02 Rows OCCURS 3 TIMES.
19
-
03 Entries OCCURS 3 TIMES.
20
-
04 EntryScore PIC 9 VALUE ZEROS.
21
-
04 State PIC Z Value "_".
19
+
01 Board OCCURS 9 TIMES.
20
+
02 State PIC X VALUE "N".
21
+
02 Score PIC 9 VALUE ZEROS.
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.
23
-
01 InitRowIdx PIC S9 VALUE 1.
24
-
01 AccessRowIdx PIC 9 VALUE 0.
25
-
01 AccessEntryIdx PIC 9 VALUE 0.
26
-
01 InitEntryIdx PIC S9 VALUE 2.
27
-
01 InitScoreValue PIC 99 VALUE 1.
28
-
01 InitDivideResult PIC S99 VALUE ZEROS.
29
-
01 InitDivideRemainder PIC 99 VALUE ZEROS.
30
-
01 IdxRow PIC 9 VALUE 1.
31
-
01 IdxCol PIC 9 VALUE 1.
32
-
01 InitAdd3 PIC 99 VALUE 0.
36
-
DISPLAY "Welcome to Trey's Dev Shed Tic Tac Toe Extravaganza!".
32
+
DISPLAY "Welcome to Trey's Dev Shed Tic Tac Toe Extravaganza!".
39
-
PERFORM VARYING InitScoreValue FROM 1 BY 1 UNTIL
41
-
COMPUTE AccessRowIdx = InitRowIdx + 1
42
-
COMPUTE AccessEntryIdx = InitEntryIdx + 1
43
-
MOVE InitScoreValue TO
44
-
EntryScore(AccessRowIdx AccessEntryIdx)
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).
46
-
DIVIDE InitScoreValue BY 3 GIVING InitDivideResult
47
-
REMAINDER InitDivideRemainder
46
+
PERFORM UNTIL Player1Win OR Player2Win OR Stalemate
49
-
IF InitDivideRemainder = 0 THEN
50
-
COMPUTE InitEntryIdx = InitEntryIdx - 1
52
-
COMPUTE InitRowIdx = InitRowIdx - 1
53
-
COMPUTE InitEntryIdx = InitEntryIdx + 1
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
56
-
COMPUTE InitAdd3 = InitRowIdx + 3
57
-
DIVIDE InitAdd3 BY 3 GIVING InitDivideResult REMAINDER
59
-
COMPUTE InitRowIdx = InitDivideRemainder
53
+
COMPUTE TMP3 = (TMP * 3) + TMP2 - 3
61
-
COMPUTE InitAdd3 = InitEntryIdx + 3
62
-
DIVIDE InitAdd3 BY 3 GIVING InitDivideResult REMAINDER
64
-
COMPUTE InitEntryIdx = InitDivideRemainder
67
-
PERFORM UNTIL Win OF Score OF Player1 OR Win OF Score OF
69
-
PERFORM VARYING IdxRow FROM 1 BY 1 UNTIL IdxRow > 3
70
-
PERFORM VARYING IdxCol FROM 1 BY 1 UNTIL IdxCol > 3
71
-
Display EntryScore(IdxRow, IdxCol)
55
+
IF State OF Board(TMP3) = "N" THEN
56
+
DISPLAY " " TMP3 " |" WITH NO ADVANCING
58
+
DISPLAY " " State OF Board(TMP3) " |"
64
+
DISPLAY "---------------"
66
+
PERFORM UNTIL ValidInput
67
+
IF Turn OF Player1 = 1 THEN
68
+
DISPLAY "Player 1 " WITH NO ADVANCING
70
+
DISPLAY "Player 2 " WITH NO ADVANCING
73
+
DISPLAY "make your move [1-9]: " WITH NO ADVANCING
78
+
IF State OF Board(PlayerMove) EQUAL "N"
80
+
WHEN Turn OF Player1
81
+
Move "X" TO State OF Board(PlayerMove)
83
+
MOVE 0 TO Turn OF Player1
84
+
MOVE 1 TO Turn OF PLayer2
86
+
WHEN Turn OF Player2
87
+
MOVE "O" TO State OF Board(PlayerMove)
89
+
MOVE 1 TO Turn OF Player1
90
+
MOVE 0 TO Turn OF Player2
93
+
MOVE 0 TO PlayerMove
94
+
DISPLAY "Invalid Move, Please Try Again"
96
+
DISPLAY "Invalid Move, Please Try Again"
74
-
SET Win of Score of Player1 TO true
99
+
MOVE 0 TO PlayerMove
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
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
113
+
IF TMP NOT EQUAL TMP2 AND TMP NOT EQUAL TMP3 AND
114
+
TMP2 NOT EQUAL TMP3 THEN
82
-
IF Win OF Score OF Player1 THEN
83
-
DISPLAY "CONGRATS PLAYER 1 Has Won!"
85
-
DISPLAY "CONGRATS PLAYER 2 Has Won!"
116
+
ADD Score OF Board(TMP) TO Score OF Board(TMP2)
118
+
ADD Score OF Board(TMP3) To TMP4
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
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
140
+
IF BoardHasBlanks = 0 THEN
141
+
Set Stalemate to 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!"