-
Notifications
You must be signed in to change notification settings - Fork 8
/
AppleII.txt
172 lines (157 loc) · 5.63 KB
/
AppleII.txt
1
100 REM BASIC Week 3: Under the Sea 110 REM http://reddit.com/r/RetroBattlestations 120 REM written by FozzTexx 130 REM Apple II version by digarok 200 REM Clear screen and setup variablesrem 210 ? CHR$(4)"PR #3" : HOME 210 home 220 COLS = PEEK(33):ROWS = 24:REM Columns and Rows of screen 230 GOSUB 2010:TU$ = SP$:TW = SC:TH = SR 240 TE$ = SE$:GOSUB 2010:TD$ = SP$ 250 FOR EE = 1 TO 3:GOSUB 2010:EN$(EE) = SP$ 260 ER$(EE) = SE$:EW(EE) = SC:NEXT EE 270 GOSUB 2010:GV$ = SP$:GW = SC:GH = SR 280 AM = 10:WV$ = "-_." 290 TY = 18:SF = 4:GOSUB 4100:PT = -10:GOSUB 4510 300 REM Play game 310 X = 1:Y = SF:GOSUB 1010 320 FOR I = 1 TO COLS:PRINT MID$(WV$, INT(RND(1) * 3) + 1, 1);:NEXT I 330 GOSUB 5140:GOSUB 6660:GOSUB 6140 340 LY = TY 350 FOR TX = 1 TO COLS - TW 360 IF LY <> TY THEN GOSUB 3510 370 GOSUB 5010:GOSUB 6510:GOSUB 6010 380 SP$ = TU$:X = TX:Y = TY:GOSUB 1510 390 LY = TY:GOSUB 2510 400 IF KE$ = "A" OR KE$ = "a" THEN D = -1:GOSUB 3010 410 IF KE$ = "Z" OR KE$ = "z" THEN D = 1: GOSUB 3010 420 IF KE$ = "Q" OR KE$ = "q" THEN END 430 IF TY = SF + 1 THEN GOTO 450 440 IF TX = (COLS / 4) OR TX = (COLS / 4) * 3 THEN GOSUB 4010 450 IF TY = SF + 1 AND AIR < AM THEN GOSUB 4100 460 NEXT TX 470 X = TX:SP$ = TE$:GOSUB 1510 480 GOTO 310 1000 REM Position cursor at X,Y1010 VTAB 1:PRINT:HTAB X : VTAB Y1020 RETURN1500 REM Draw sprite in SP$ at X,Y1510 IF Y < 1 OR Y > ROWS OR X < 1 OR X > COLS THEN RETURN 1520 REM Set the left margin to the X position1530 VTAB Y - 1:HTAB X:POKE 32,X - 1:PRINT:PRINT SP$;1540 POKE 32,01550 RETURN2000 REM Load a sprite from DATA into SP$2010 SP$ = "":SE$ = "":SR = 0:SC = 02020 READ T$,S$:IF LEN(SP$) > 0 THEN SP$ = SP$ + CHR$(13)2030 SP$ = SP$ + S$:SR = SR + 1:IF LEN(S$) > SC THEN SC = LEN(S$)2040 BL$ = "":FOR I = 1 TO LEN(S$):BL$ = BL$ + " ":NEXT I2050 IF LEN(SE$) > 0 THEN SE$ = SE$ + CHR$(13)2060 SE$ = SE$ + BL$2070 IF T$ <> "SE" THEN GOTO 20202080 RETURN2500 REM Read the keyboard2510 KE$ = "" : IF PEEK(49152) > 127 THEN GET KE$2520 RETURN3000 REM Player wants to move turtle up or down3010 TY = TY + D3020 IF TY <= SF THEN TY = SF + 13030 IF TY > ROWS - TH + 1 THEN TY = ROWS - TH + 13040 RETURN3500 REM Turtle moved up or down, erase from previous line3510 Y = LY:IF LY > TY THEN Y = Y + TH - 13520 X = TX:SP$ = TE$:GOSUB 15103530 RETURN4000 REM Show remaining air4010 AIR = AIR - 1:IF AIR < 0 THEN AIR = 04020 IF AIR > AM THEN AIR = AM4030 X = COLS - 7 - AM:Y = 2:GOSUB 10104040 PRINT "Air: |";4050 FOR I = 1 TO AIR:PRINT "#";:NEXT I4060 IF AIR < AM THEN FOR I = AIR + 1 TO AM:PRINT " ";:NEXT I4070 PRINT "|";4080 IF AIR = 0 THEN GOTO 41104090 RETURN4100 AIR = AM:GOTO 40304110 FOR I = TY to SF + 1 STEP -14120 X = TX:Y = I:SP$ = TD$:GOSUB 15104130 Y = Y + 1:SP$ = TE$:GOSUB 15104140 NEXT I4150 X = (COLS - GW) / 2:Y = (ROWS - GH) / 24160 SP$ = GV$:GOSUB 15104170 X = 1:Y = ROWS - 2:GOSUB 10104180 END4500 REM Display score4510 PT = PT + 10:OX = X:OY = Y4520 X = 3:Y = 2:GOSUB 1010:PRINT "Score: ";PT;4540 X = OX:Y = OY:RETURN5000 REM Take care of bubbles (NB = NumBubbles, BX/Y = BX/BY)5010 FOR BB = 1 to NB5020 IF INT(BY(BB)) <= SF THEN GOTO 51205030 NY = BY(BB) - (ROWS / COLS)5040 X = BX(BB):Y = INT(BY(BB))5050 GOSUB 5510:IF Hit = 0 THEN GOTO 50805060 AIR = AIR + 2:IF Bubble$(BB) = "O" THEN AIR = AIR + 15070 GOSUB 4010:NY = ROWS + COLS5080 IF INT(NY) = Y THEN GOTO 51105090 SP$ = " ":GOSUB 1510:SP$ = Bubble$(BB):Y = INT(NY)5100 IF Y > SF THEN GOSUB 15105110 BY(BB) = NY5120 NEXT BB5130 RETURN5140 NB = INT(RND(1) * 3) + 1:FOR BB = 1 to NB5150 BX(BB) = INT(RND(1) * COLS) + 1:BY(BB) = ROWS - INT(RND(1) * 3)5160 Bubble$(BB) = CHR$(79 + INT(RND(1) * 2) * 32)5170 NEXT BB:RETURN5500 REM Hit detection5510 Hit = 05520 IF X < TX + TW - 2 THEN RETURN5530 IF X > TX + TW + 1 THEN RETURN5540 IF Y < TY - 1 THEN RETURN5550 IF Y > TY + 1 THEN RETURN5560 Hit = 1:RETURN6000 REM Take care of enemies (NE = NumEnemies, EnemyX/Y/Hit = EX/EY/EH,)6010 FOR EE = 1 to NE6020 IF INT(EY(EE)) <= SF THEN GOTO 61206030 NX = EX(EE) + XV(EE):NY = EY(EE) + YV(EE)6040 X = INT(EX(EE)):Y = INT(EY(EE))6050 IF EH(EE) = 1 THEN GOTO 60706060 GOSUB 5510:IF Hit = 1 THEN GOSUB 4010:EH(EE) = 16070 IF INT(NX) = X AND INT(NY) = Y THEN GOTO 61106080 SP$ = ER$(EC(EE)):GOSUB 15106090 SP$ = EN$(EC(EE)):X = INT(NX):Y = INT(NY)6100 IF Y > SF THEN GOSUB 15106110 EX(EE) = NX:EY(EE) = NY6120 NEXT EE6130 RETURN6140 FOR EE = 1 TO NE:SP$ = ER$(EC(EE))6150 X = INT(EX(EE)):Y = INT(EY(EE)):GOSUB 1510:NEXT EE6160 NE = INT(RND(1) * 3) + 1:FOR EE = 1 to NE6170 EX(EE)=INT(RND(1)*COLS)+1:EY(EE)=ROWS-INT(RND(1)*(ROWS - SF))6180 XV(EE) = RND(1):YV(EE) = RND(1) * ((ROWS - SF) / COLS)6190 EC(EE) = INT(RND(1) * 3) + 1:EH(EE) = 06200 IF EX(EE) > COLS / 2 THEN XV(EE) = - XV(EE)6210 IF EY(EE) > ROWS / 2 THEN YV(EE) = - YV(EE)6220 NEXT EE:RETURN6500 REM Take care of food (NF = NumFood, FoodX/Y = FX/FY)6510 FOR FF = 1 to NF6520 X = FX(FF):Y = INT(FY(FF)):GOSUB 55106530 IF Hit = 1 THEN GOSUB 4510:SP$ = " ":GOSUB 1510:FY(FF) = ROWS + COLS6640 NEXT FF6650 RETURN6660 SP$=" ":FOR FF=1 TO NF:X = FX(FF):Y = FY(FF):GOSUB 1510:NEXT FF6670 NF = INT(RND(1) * 3) + 1:FOR FF = 1 to NF6680 FX(FF)=INT(RND(1) * COLS) + 1:FY(FF)=ROWS - INT(RND(1) * (ROWS - SF))6690 FD$(FF) = CHR$(120 + INT(RND(1) * 2))6700 X = FX(FF):Y = FY(FF):SP$ = FD$(FF):GOSUB 15106710 NEXT FF:RETURN9000 DATA SP," _-%#%#}o"9010 DATA SE," )"9020 DATA SE," -OOOO}x"9030 DATA SE,"^;;^"9040 DATA SE,"<><"9050 DATA SE,"$"9060 DATA SP," _ _ __ _ __ _"9070 DATA SP,"/ \ / \ |\ /| | / \ | | | | \"9080 DATA SP,"| _ |_| | \/ | |-- * | | \ / |-- |_/"9090 DATA SE,"\_/ | | | | |__ \_/ V |__ | \"