Skip to content

Commit 2df9074

Browse files
authored
Create Pong.cbl
Signed-off-by: Dillon Depeel <dillondepeel@hotmail.com>
1 parent d5cdc33 commit 2df9074

File tree

1 file changed

+220
-0
lines changed

1 file changed

+220
-0
lines changed

Pong.cbl

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
*================================================================*
2+
IDENTIFICATION DIVISION.
3+
*================================================================*
4+
* Compile with param: cobc -xjd game.cbl -lraylib
5+
PROGRAM-ID. PONG0001.
6+
7+
AUTHOR. RODRIGO DORNELLES.
8+
INSTALLATION. PSYWAVE GAMES.
9+
10+
DATE-WRITTEN. 31/01/2021.
11+
DATE-COMPILED. 31/01/2021.
12+
*================================================================*
13+
ENVIRONMENT DIVISION.
14+
*================================================================*
15+
CONFIGURATION SECTION.
16+
REPOSITORY.
17+
FUNCTION ALL INTRINSIC.
18+
*================================================================*
19+
DATA DIVISION.
20+
*================================================================*
21+
WORKING-STORAGE SECTION.
22+
*----------------------------------------------------------------*
23+
* GAME-VARIABLES
24+
*----------------------------------------------------------------*
25+
* R: RETURN
26+
* W: WINDOW
27+
* K: KEY
28+
* C: COLOR
29+
30+
01 R-CODE USAGE BINARY-LONG.
31+
01 R-KEY-UP PIC 9.
32+
01 R-KEY-DOWN PIC 9.
33+
01 R-KEY-ENTER PIC 9.
34+
35+
01 K-UP PIC 9(8) VALUE 265.
36+
01 K-DOWN PIC 9(9) VALUE 264.
37+
01 K-ESC PIC 9(8) VALUE 256.
38+
01 K-ENTER PIC 9(8) VALUE 257.
39+
78 K-PRESSED VALUE 7.
40+
41+
78 W-WIDTH VALUE 800.
42+
78 W-HEIGHT VALUE 450.
43+
78 W-NAME VALUE "PONG COBOL GAME".
44+
78 W-GAMEOVER VALUE "GAMEOVER! PRESS ENTER TO RESTART".
45+
01 W-FINISHED PIC 9 VALUE ZERO.
46+
47+
01 C-WHITE.
48+
02 R PIC S9(3) VALUE 245 BINARY.
49+
02 G PIC S9(3) VALUE 245 BINARY.
50+
02 B PIC S9(3) VALUE 245 BINARY.
51+
02 A PIC S9(3) VALUE 255 BINARY.
52+
53+
78 C-BLACK VALUE 0.
54+
*----------------------------------------------------------------*
55+
* PLAYER-VARIABLES
56+
*----------------------------------------------------------------*
57+
* P: PLAYER
58+
78 P-WIDTH VALUE 16.
59+
78 P-HEIGHT VALUE 80.
60+
78 P-POSX VALUE 0.
61+
78 P-SPEED VALUE 16.
62+
77 P-POSY PIC 999V99.
63+
*----------------------------------------------------------------*
64+
* BALL-VARIABLES
65+
*----------------------------------------------------------------*
66+
* B: BALL
67+
78 B-SIZE VALUE 16.
68+
77 B-POSX PIC 9(3)V9.
69+
77 B-POSY PIC 9(3)V9.
70+
77 B-HSPEED PIC S9(2)V9.
71+
77 B-VSPEED PIC S9(2)V9.
72+
*================================================================*
73+
PROCEDURE DIVISION.
74+
*================================================================*
75+
MAIN-PROCEDURE.
76+
PERFORM INIT-WINDOW.
77+
PERFORM GAME-INIT.
78+
PERFORM GAME-LOOP.
79+
PERFORM CLOSE-WINDOW.
80+
GOBACK.
81+
*----------------------------------------------------------------*
82+
INIT-WINDOW SECTION.
83+
CALL "InitWindow" USING
84+
BY VALUE W-WIDTH W-HEIGHT
85+
BY REFERENCE W-NAME RETURNING R-CODE
86+
ON EXCEPTION
87+
DISPLAY "exception error: raylib not found"
88+
UPON SYSERR
89+
END-DISPLAY
90+
END-CALL
91+
CALL "SetTargetFPS" USING BY VALUE 30
92+
RETURNING OMITTED
93+
END-CALL.
94+
*----------------------------------------------------------------*
95+
GAME-INIT SECTION.
96+
MOVE 0 TO W-FINISHED
97+
MOVE -5.0 TO B-HSPEED
98+
MOVE 780 TO B-POSX
99+
MOVE 225 TO B-POSY
100+
PERFORM BALL-RANDOM.
101+
*----------------------------------------------------------------*
102+
GAME-LOOP SECTION.
103+
PERFORM UNTIL K-ESC = 1
104+
CALL "WindowShouldClose"
105+
RETURNING K-ESC
106+
END-CALL
107+
108+
IF R-KEY-ENTER = K-PRESSED THEN
109+
PERFORM GAME-INIT
110+
END-IF
111+
112+
PERFORM GAME-INPUT
113+
PERFORM PLAYER-MOVE
114+
PERFORM BALL-COLISION
115+
PERFORM BALL-MOVE
116+
PERFORM GAME-DRAW
117+
118+
END-PERFORM.
119+
*----------------------------------------------------------------*
120+
GAME-INPUT SECTION.
121+
CALL "IsKeyDown" USING
122+
BY VALUE K-UP
123+
RETURNING R-KEY-UP
124+
END-CALL
125+
126+
CALL "IsKeyDown" USING
127+
BY VALUE K-DOWN
128+
RETURNING R-KEY-DOWN
129+
END-CALL
130+
131+
CALL "IsKeyDown" USING
132+
BY VALUE K-ENTER
133+
RETURNING R-KEY-ENTER
134+
END-CALL.
135+
*----------------------------------------------------------------*
136+
GAME-DRAW SECTION.
137+
CALL STATIC "BeginDrawing"
138+
RETURNING OMITTED
139+
END-CALL
140+
141+
CALL "ClearBackground" USING BY VALUE C-BLACK
142+
RETURNING OMITTED
143+
END-CALL
144+
145+
IF W-FINISHED <> 0 THEN
146+
CALL static "DrawText" USING
147+
BY REFERENCE W-GAMEOVER
148+
BY VALUE 32 200 32
149+
BY CONTENT C-WHITE
150+
END-CALL
151+
ELSE
152+
PERFORM PLAYER-DRAW
153+
PERFORM BALL-DRAW
154+
END-IF
155+
156+
CALL STATIC "EndDrawing"
157+
RETURNING OMITTED
158+
END-CALL.
159+
*----------------------------------------------------------------*
160+
PLAYER-MOVE SECTION.
161+
IF R-KEY-DOWN = K-PRESSED
162+
AND SUM(P-POSY, P-HEIGHT, 1) < W-HEIGHT THEN
163+
ADD P-SPEED TO P-POSY
164+
ELSE
165+
IF R-KEY-UP = K-PRESSED AND P-POSY > 1 THEN
166+
SUBTRACT P-SPEED FROM P-POSY
167+
END-IF.
168+
*----------------------------------------------------------------*
169+
PLAYER-DRAW SECTION.
170+
CALL static "DrawRectangle" USING
171+
BY VALUE P-POSX P-POSY
172+
BY VALUE P-WIDTH P-HEIGHT
173+
BY CONTENT C-WHITE
174+
END-CALL.
175+
*----------------------------------------------------------------*
176+
BALL-RANDOM SECTION.
177+
PERFORM WITH TEST AFTER UNTIL ABS (B-VSPEED) > 4
178+
CALL "GetRandomValue" USING
179+
BY VALUE -7
180+
BY VALUE 7
181+
RETURNING B-VSPEED
182+
END-CALL
183+
END-PERFORM.
184+
*----------------------------------------------------------------*
185+
BALL-MOVE SECTION.
186+
ADD B-HSPEED TO B-POSX
187+
ADD B-VSPEED TO B-POSY.
188+
*----------------------------------------------------------------*
189+
BALL-COLISION SECTION.
190+
IF B-POSY <= B-SIZE/2
191+
OR B-POSY >= W-HEIGHT - B-SIZE/2 THEN
192+
MULTIPLY -1 BY B-VSPEED
193+
END-IF
194+
IF B-POSX >= W-WIDTH - B-SIZE/2 THEN
195+
MULTIPLY -1 BY B-HSPEED
196+
PERFORM BALL-RANDOM
197+
END-IF
198+
IF B-POSX <= P-WIDTH THEN
199+
IF B-POSY > P-POSY
200+
AND B-POSY < P-POSY + P-HEIGHT THEN
201+
MULTIPLY -1.2 BY B-HSPEED
202+
PERFORM BALL-RANDOM
203+
PERFORM BALL-RANDOM
204+
PERFORM BALL-RANDOM
205+
ELSE
206+
MOVE 1 TO W-FINISHED
207+
END-IF
208+
END-IF.
209+
*----------------------------------------------------------------*
210+
BALL-DRAW SECTION.
211+
CALL static "DrawRectangle" USING
212+
BY VALUE B-POSX B-POSY B-SIZE B-SIZE
213+
BY CONTENT C-WHITE
214+
END-CALL.
215+
216+
*----------------------------------------------------------------*
217+
CLOSE-WINDOW SECTION.
218+
CALL "CloseWindow"
219+
RETURNING OMITTED
220+
END-CALL.

0 commit comments

Comments
 (0)