Created
April 20, 2018 17:44
-
-
Save cwoolum/f99e74882684a1d4e39bf4a143560cf8 to your computer and use it in GitHub Desktop.
Frogger in BASIC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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