Skip to content

Instantly share code, notes, and snippets.

@cwoolum
Created April 20, 2018 17:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cwoolum/f99e74882684a1d4e39bf4a143560cf8 to your computer and use it in GitHub Desktop.
Save cwoolum/f99e74882684a1d4e39bf4a143560cf8 to your computer and use it in GitHub Desktop.
Frogger in BASIC
1000 REM Frogger
1020 REM ------------------------
1030 CLS
1040 PRINT "=== Frogger ==="
1050 PRINT "UP: W"
1070 PRINT "LEFT: A"
1080 PRINT "RIGHT: S"
1081 LET I = 960
1082 LET X = 24
1090 ARRAY C1
1100 LET P = 0
1110 LET Q = 0
1121 LET C1[P + Q *25] = "green"
1130 LET P = P+1
1140 IF P <= 24 THEN GOTO 1121
1150 LET Q = Q+1
1160 LET P = 0
1170 IF Q <= 1 THEN GOTO 1121
1181 LET C1[P + Q *25] = "black"
1190 LET P = P+1
1200 IF P <= 24 THEN GOTO 1181
1210 LET Q = Q+1
1220 LET P = 0
1230 IF Q <= 10 THEN GOTO 1181
1241 LET C1[P + Q *25] = "green"
1250 LET P = P+1
1260 IF P <= 24 THEN GOTO 1241
1270 LET P = 0
1280 LET Q = Q+1
1290 IF Q <= 12 THEN GOTO 1241
1301 LET C1[P + Q *25] = "blue"
1310 LET P = P+1
1320 IF P <= 24 THEN GOTO 1301
1330 LET P = 0
1340 LET Q = Q+1
1350 IF Q <= 22 THEN GOTO 1301
1361 LET C1[P + Q *25] = "green"
1370 LET P = P+1
1380 IF P <= 24 THEN GOTO 1361
1390 LET P = 0
1400 LET Q = Q+1
1410 IF Q <= 24 THEN GOTO 1361
1420 FOR P = 2 TO 5
1421 LET C1[P + 14 *25] = "brown"
1423 NEXT P
1424 FOR P = 10 TO 13
1425 LET C1[P + 14 *25] = "brown"
1426 NEXT P
1427 FOR P = 18 TO 21
1428 LET C1[P + 14 *25] = "brown"
1429 NEXT P
1430 FOR P = 0 TO 3
1431 LET C1[P + 17 *25] = "brown"
1433 NEXT P
1434 FOR P = 11 TO 14
1435 LET C1[P + 17 *25] = "brown"
1436 NEXT P
1437 FOR P = 20 TO 23
1438 LET C1[P + 17 *25] = "brown"
1439 NEXT P
1447 FOR P = 4 TO 6
1448 LET C1[P + 20 *25] = "brown"
1449 NEXT P
1450 LET C1[4 + 23 *25] = "purple"
1451 LET C1[5 + 23 *25] = "purple"
1452 LET C1[4 + 24 *25] = "purple"
1453 LET C1[5 + 24 *25] = "purple"
1454 LET C1[11 + 23 *25] = "purple"
1455 LET C1[12 + 23 *25] = "purple"
1456 LET C1[11 + 24 *25] = "purple"
1457 LET C1[12 + 24 *25] = "purple"
1458 LET C1[18 + 23 *25] = "purple"
1459 LET C1[19 + 23 *25] = "purple"
1460 LET C1[18 + 24 *25] = "purple"
1461 LET C1[19 + 24 *25] = "purple"
1500 LET P = 0
1510 LET Q = 0
1520 PLOT P,Q, C1[P + Q *25]
1530 LET P = P+1
1540 IF P <= 24 THEN GOTO 1520
1550 LET Q = Q+1
1560 LET P = 0
1570 IF Q <= 24 THEN GOTO 1520
2000 REM The array G holds one entry for each pixel
2010 REM (X, Y) maps to G[X + Y*25]
2020 REM A non-zero value in G means either the snake occupies the pixel or there is a dot on the pixel
2030 REM A dot is encoded by the value 5
2040 REM If the snake occupies the pixel, the value in G indicates the directionof the snakes motion
2050 REM 1=up, 2=down, 3=left, 4=right
2060 REM The Subroutines 9100, 9200, 9300, 9400 can be selected by adding 100 * D + 9000, where D is one of the directions 1, 2, 3, or 4
2070 ARRAY G
2080 REM === Initialize ===
2090 LET P = 12
2100 LET Q = 0
2120 PLOT P, Q, "lightgreen"
2121 PLOT P+1, Q, "lightgreen"
2170 LET G[20 + 20*25] = 5
2300 REM === Keyboard input ===
2310 LET C = UPPERCASE(GETCHAR())
2320 IF C = "W" THEN LET D = 1
2340 IF C = "A" THEN LET D = 3
2350 IF C = "S" THEN LET D = 4
2500 REM === Move the snake ===
2510 IF D <> 0 THEN GOSUB 6600
3020 LET F = F + 1
3030 CLT
3040 PRINT "=== Snake and Dots ==="
3050 PRINT "Score: " + F
3060 LET G[P + Q *25] = D
3070 PLOT P, Q, "lightgreen"
3070 PLOT P+1, Q, "lightgreen"
3120 GOSUB 4000
3140 GOTO 2300
4000 LET Y = 3
4001 LET Y1 = Y + 3
4002 LET Y2 = Y1 + 3
4410 REM FOR I1 = 960 TO 0 STEP -1
4412 LET X1 = X + 1
4414 IF I % 40 = 0 THEN GOSUB 4500
4416 PLOT 0, Y, "black"
4417 plot 0, Y1, "black"
4418 plot 0, y2, "black"
4419 IF I = 0 THEN LET I = 960 ELSE LET I = I - 1
4420 IF X = 0 THEN LET X = 24 ELSE LET X = X-1
4421 RETURN
4500 PRINT "X is " + X
4501 PRINT "X1 is " + X1
4505 PLOT X, Y, "red"
4510 PLOT X1, Y, "black"
4525 PLOT X, Y1, "red"
4530 PLOT X1, Y1, "black"
4525 PLOT X, Y2, "red"
4530 PLOT X1, Y2, "black"
4535 LET X = X - 1
4550 RETURN
6600 REM Move Frog
6610 GOSUB 9000 + 100*D
6611 LET R = P
6612 LET S = Q
6620 LET P = P + U
6630 LET Q = Q + V
6670 PLOT P, Q, "lightgreen"
6680 PLOT P+1, Q, "lightgreen"
6720 PLOT R, S, C1[R + S *25]
6730 PLOT R+1, S, C1[R + S *25]
6740 IF Q > 10 THEN GOTO 7000
6770 LET D = 0
6780 RETURN
7000 REM === Game Over ===
7010 CLT
7010 PRINT "====== Frogger ======"
7020 PRINT " You Win!!"
7090 PRINT "====================="
7100 END
9000 REM Subroutines mapping the direction number in D (1, 2, 3, or 4) to a vector (U, V)
9100 LET U = 0
9110 LET V = 1
9120 RETURN
9200 LET U = 0
9210 LET V = -1
9220 RETURN
9300 LET U = -1
9310 LET V = 0
9320 RETURN
9400 LET U = 1
9410 LET V = 0
9420 RETURN
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment