'ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» 'º þ CAPSULE.BAS --- Programmed by QP7 º 'º þ Version 1.01 º 'º þ The object is to collect the green capsules, jumping on the blue º 'º ledges, and avoiding the red barriers. º 'ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ' Sub declarations 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ DECLARE SUB place (object AS ANY, c AS INTEGER, char AS STRING) 'ÍÍÍÍÍÍÍÍÍ ' Setup 'ÍÍÍÍÍÍÍÍÍ start: CLEAR RANDOMIZE TIMER SCREEN 1: SCREEN 12 WIDTH 80, 60 TYPE pointType x AS INTEGER y AS INTEGER by AS INTEGER END TYPE DIM player AS pointType DIM a(1 TO 12) AS STRING FOR x% = 1 TO 80 LOCATE 56, x% COLOR 1 PRINT CHR$(219) NEXT x% jump% = 0 player.x = 80 player.y = 55 place player, 12, "Û" 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ' Load Blockades 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ' Capsule: Green DIM capsule(0 TO 20) AS pointType DIM got(1 TO 20) AS pointType COLOR 2 FOR i% = 1 TO 20 x% = INT(RND * 78 + 1) y% = INT(RND * 44 + 12) ok% = 1 FOR ii% = 1 TO i% - 1 IF capsule(ii%).x = x% AND capsule(ii%).y = y% THEN ok% = 0 i% = i% - 1 END IF NEXT ii% IF ok% = 1 THEN capsule(i%).x = x% capsule(i%).y = y% LOCATE y%, x% PRINT CHR$(219) END IF NEXT i% ' Energy: red DIM energy(1 TO 200) AS pointType COLOR 4 FOR i% = 1 TO 200 x% = INT(RND * 78 + 1) y% = INT(RND * 44 + 12) ok% = 1 FOR ii% = 1 TO 20 IF x% = capsule(ii%).x AND y% = capsule(ii%).y THEN ok% = 0 NEXT ii% IF ok% = 1 THEN energy(i%).x = x% energy(i%).y = y% LOCATE energy(i%).y, energy(i%).x PRINT CHR$(219) END IF NEXT i% 'Barrier: Blue DIM barrier(1 TO 250) AS pointType COLOR 1 FOR i% = 1 TO 250 x% = INT(RND * 78 + 1) y% = INT(RND * 44 + 12) ok% = 1 FOR ii% = 1 TO 200 IF x% = energy(ii%).x AND y% = energy(ii%).y THEN ok% = 0 i% = i% - 1 END IF NEXT ii% FOR ii% = 1 TO 20 IF x% = capsule(ii%).x AND y% = capsule(ii%).y THEN ok% = 0 i% = i% - 1 END IF NEXT ii% IF ok% = 1 THEN barrier(i%).y = y% barrier(i%).x = x% LOCATE y%, x% PRINT CHR$(219) END IF NEXT i% 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ' Main game loop 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ DO COLOR 14 LOCATE 1, 1: PRINT "You have"; caps%; "capsules out of 15" 'Keyboard input SELECT CASE INKEY$ CASE CHR$(0) + CHR$(72) 'Jump (UP) FOR i% = 1 TO 250 IF player.y + 1 = barrier(i%).y AND barrier(i%).x = player.x AND jump% = -1 THEN jump% = 2 id% = i% END IF NEXT i% IF jump% = 0 THEN jump% = 1 CASE CHR$(0) + CHR$(80) jump% = -1 CASE CHR$(0) + CHR$(75) place player, 0, "Û" IF player.x > 1 THEN ok% = 1 FOR i% = 1 TO 250 IF player.x - 1 = barrier(i%).x AND player.y = barrier(i%).y THEN ok% = 0 END IF NEXT i% IF ok% = 1 THEN player.x = player.x - 1 'Move left (LEFT) place player, 12, "Û" ELSE place player, 12, "Û" END IF CASE CHR$(0) + CHR$(77) place player, 0, "Û" IF player.x + 1 <= 80 THEN ok% = 1 FOR i% = 1 TO 250 IF player.x + 1 = barrier(i%).x AND player.y = barrier(i%).y THEN ok% = 0 END IF NEXT i% IF ok% = 1 THEN player.x = player.x + 1 'Move right (RIGHT) place player, 12, "Û" ELSE place player, 12, "Û" END IF END SELECT GOSUB test 'Jump handling SELECT CASE jump% CASE 1 'Assending FOR i! = 1 TO 300: NEXT i! IF player.y > 45 THEN ok% = 1 FOR i% = 1 TO 250 IF player.y - 1 = barrier(i%).y AND player.x = barrier(i%).x THEN ok% = 0 END IF NEXT i% IF ok% = 0 THEN jump% = -1 ELSE place player, 0, "Û" player.y = player.y - 1 place player, 12, "Û" END IF ELSE 'Descending jump% = -1 END IF CASE -1 FOR i! = 1 TO 1000: NEXT i! IF player.y < 55 THEN ok% = 1 FOR i% = 1 TO 250 IF player.y + 1 = barrier(i%).y AND player.x = barrier(i%).x THEN ok% = 0 NEXT i% IF ok% = 1 THEN place player, 0, "Û" player.y = player.y + 1 place player, 12, "Û" jump% = -1 END IF ELSE jump% = 0 END IF CASE 2 'Assending... on block FOR i! = 1 TO 300: NEXT i! IF player.y > barrier(id%).y - 10 THEN ok% = 1 FOR i% = 1 TO 250 IF player.y - 1 = barrier(i%).y AND player.x = barrier(i%).x THEN ok% = 0 END IF NEXT i% IF ok% = 0 THEN jump% = -1 ELSE place player, 0, "Û" player.y = player.y - 1 place player, 12, "Û" END IF ELSE 'Descending jump% = -1 END IF END SELECT GOSUB test LOOP dead: FOR i% = 1 TO 1000 LOCATE player.y, player.x COLOR INT(RND * 15 + 1) PRINT CHR$(INT(RND * 100 + 100)) NEXT i% FOR c% = 63 TO 0 STEP -1 PALETTE 1, c% * 256 ^ 2 NEXT c% FOR c% = 63 TO 0 STEP -1 PALETTE 4, c% NEXT c% FOR c% = 63 TO 0 STEP -1 PALETTE 2, c% * 256 NEXT c% CLS COLOR 4 a(1) = "ÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛ" a(2) = "ÛÛ ÛÛ ÛÛ ÛÛ Û ÛÛ ÛÛ " a(3) = "ÛÛ ÛÛÛÛ ÛÛÛÛÛÛÛÛ ÛÛ Û ÛÛ ÛÛÛÛÛÛ " a(4) = "ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ " a(5) = "ÛÛÛÛÛÛÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛÛÛÛÛÛÛÛ" a(6) = "" a(7) = "" a(8) = "ÛÛÛÛÛÛÛÛ ÛÛ ÛÛ ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛ " a(9) = "ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ" a(10) = "ÛÛ ÛÛ ÛÛ ÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛÛÛ " a(11) = "ÛÛ ÛÛ ÛÛÛÛ ÛÛ ÛÛ ÛÛ" a(12) = "ÛÛÛÛÛÛÛÛ ÛÛ ÛÛÛÛÛÛÛÛÛ ÛÛ ÛÛ" FOR i% = 1 TO 12 LOCATE i% + 5, 41 - LEN(a(i%)) / 2 PRINT a(i%) NEXT i% FOR c% = 0 TO 63 PALETTE 4, c% NEXT c% COLOR 12 text$ = "Press to end or to replay" LOCATE 57, 41 - LEN(text$) / 2 PRINT text$ DO SELECT CASE INKEY$ CASE CHR$(13): i% = 1: EXIT DO CASE CHR$(27): i% = 2: EXIT DO END SELECT LOOP SELECT CASE i% CASE 1: GOTO start CASE 2: END END SELECT win: FOR c% = 63 TO 0 STEP -1 PALETTE 1, c% * 256 ^ 2 NEXT c% FOR c% = 63 TO 0 STEP -1 PALETTE 4, c% NEXT c% FOR c% = 63 TO 0 STEP -1 PALETTE 2, c% * 256 NEXT c% CLS COLOR 2 a(1) = "ÛÛ ÛÛ ÛÛÛÛÛÛÛÛ ÛÛ ÛÛ" a(2) = "ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ" a(3) = " ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ" a(4) = " ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ" a(5) = " ÛÛ ÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛ" a(6) = "" a(7) = "" a(8) = "ÛÛ ÛÛ ÛÛÛÛÛÛÛÛ ÛÛ ÛÛ" a(9) = "ÛÛ Û ÛÛ ÛÛ ÛÛÛÛ ÛÛ" a(10) = "ÛÛ Û ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ" a(11) = "ÛÛ Û ÛÛ ÛÛ ÛÛ ÛÛÛÛ" a(12) = "ÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛ ÛÛ ÛÛ" FOR i% = 1 TO 12 LOCATE i% + 5, 41 - LEN(a(i%)) / 2 PRINT a(i%) NEXT i% FOR c% = 0 TO 63 PALETTE 2, c% NEXT c% COLOR 12 text$ = "Press to end" LOCATE 57, 41 - LEN(text$) / 2 PRINT text$ DO: LOOP UNTIL INKEY$ = CHR$(13) END test: FOR i% = 1 TO 200 IF player.x = energy(i%).x AND player.y = energy(i%).y THEN GOTO dead NEXT i% FOR i% = 1 TO 20 IF player.x = capsule(i%).x AND player.y = capsule(i%).y THEN ok% = 1 FOR ii% = 1 TO 20 IF player.x = got(ii%).x AND player.y = got(ii%).y THEN ok% = 0 NEXT ii% IF ok% = 1 THEN caps% = caps% + 1 IF caps% >= 15 THEN GOTO win got(caps%).x = capsule(i%).x got(caps%).y = capsule(i%).y END IF END IF NEXT i% RETURN SUB place (object AS pointType, c AS INTEGER, char AS STRING) LOCATE object.y, object.x COLOR c PRINT char END SUB