'=========================================================================== ' Subject: KUBIK III (WITH 2 LEVELS) Date: 01-27-98 (15:23) ' Author: Andrey Berezansky Code: QB, QBasic, PDS ' Origin: brznsky@cs.bgu.ac.il Packet: GAMES.ABC '=========================================================================== ' This is a demo of KUBIK 3 with only 2 levels and a couple of bugs . ' Programmer BEREZANSKY ANDREY email - nikol@cs.bgu.ac.il ' If you have ANYTHING to say to me (like "The game is cool") - email me ! ' Controls - arrow keys. ' The game contains 2 levels . ' COMPILE IT FOR SPEED. DEFINT A-Z DECLARE SUB update () DECLARE SUB delay () DECLARE SUB start () DECLARE SUB win () DECLARE SUB winwin () DECLARE SUB level () DECLARE SUB lose () DECLARE SUB up () DECLARE SUB right () DECLARE SUB left () DECLARE SUB down () RANDOMIZE TIMER SCREEN 9 CALL start DIM SHARED loss(640, 10): life = 3 1 x = 20: y = 160: dlina = 7: shirina = 10: press = 6 CLS lev = lev + 1 LOCATE 25, 1: PRINT "LEVEL_"; lev LOCATE 25, 15: PRINT "LIVES_"; life CALL level CALL right 10 IF press = 2 THEN CALL down IF press = 4 THEN CALL left IF press = 8 THEN CALL up IF press = 6 THEN CALL right IF press = 0 THEN 100 IF endd = 1 THEN 110 IF press = 9 THEN 1 GOTO 10 100 IF life <> 0 THEN lev = lev - 1 GOTO 1 END IF 110 LOCATE 11, 21: PRINT " DO YOU WANT TO PLAY ANOTHER GAME ? (y/n) " aa = 0: andr = 0 DO WHILE aa = 0 SELECT CASE INKEY$ CASE "y" life = 3: lev = 0: aa = 1: xx = 0: yy = 0: count = 0: endd = 0: GOTO 1 CASE "n" aa = 1 END SELECT LOOP SUB delay SHARED press, dellay IF press = 2 OR press = 8 THEN FOR mm = 1 TO 4000: NEXT END IF END SUB SUB down SHARED dlina, x, y, press DO WHILE exitt = 0 y = y + 1 '********** border ************************************ IF y > 329 THEN CALL lose: exitt = 1: press = 0: GOTO 20 END IF '****************************************************** CALL update '****************************************************** FOR m = 0 TO 9 FOR mm = 1 TO 9 STEP 2 IF y >= loss(x + m, mm) AND y <= loss(x + m, mm + 1) THEN CALL lose: exitt = 1: press = 0: GOTO 20 END IF NEXT mm NEXT m '****************************************************** LINE (x, y)-(x + 9, y), 11: LINE (x, y - dlina)-(x + 9, y - dlina), 0 CALL delay SELECT CASE INKEY$ CASE CHR$(0) + CHR$(77) x = x + 9: y = y - 6: press = 6: exitt = 1 CASE CHR$(0) + CHR$(75) y = y - 6: press = 4: exitt = 1 END SELECT 20 LOOP END SUB SUB left SHARED shirina, x, y, press DO WHILE exitt = 0 x = x - 1 '********** border ************************************ IF x < 2 THEN CALL lose: exitt = 1: press = 0: GOTO 30 END IF '****************************************************** CALL update '****************************************************** FOR mm = 1 TO 9 STEP 2 FOR yy = 0 TO 6 IF y + yy >= loss(x, mm) AND y + yy <= loss(x, mm + 1) THEN CALL lose: exitt = 1: press = 0: GOTO 30 END IF NEXT yy NEXT mm FOR m = 0 TO 9 FOR mm = 1 TO 9 STEP 2 FOR tt = 0 TO 6 IF y + tt >= loss(x + m, mm) AND y + tt <= loss(x + m, mm + 1) THEN CALL lose: exitt = 1: press = 0: GOTO 30 END IF NEXT tt NEXT mm NEXT m '****************************************************** LINE (x, y)-(x, y + 6), 11: LINE (x + shirina, y)-(x + shirina, y + 6), 0 CALL delay SELECT CASE INKEY$ CASE CHR$(0) + CHR$(72) press = 8: exitt = 1 CASE CHR$(0) + CHR$(80) y = y + 6: press = 2: exitt = 1 END SELECT 30 LOOP END SUB SUB level SHARED lev '-------- preparing -------- LINE (1, 1)-(630, 330), 4, B FOR ii = 1 TO 630 FOR m = 1 TO 10 loss(ii, m) = 0 NEXT m NEXT '--------------------------- IF lev = 1 THEN 1001 IF lev = 2 THEN 1002 IF lev = 3 THEN 1003 1001 loss(300, 1) = 1: loss(300, 2) = 159: loss(300, 3) = 175: loss(300, 4) = 330 LINE (300, 1)-(300, 330), 4: LINE (300, 160)-(300, 174), 14 loss(630, 1) = 1: loss(630, 2) = 159: loss(630, 3) = 175: loss(630, 4) = 330 LINE (630, 1)-(630, 330), 4: LINE (630, 160)-(630, 174), 14 GOTO 10000 1002 loss(200, 1) = 1: loss(200, 2) = 100: loss(200, 3) = 150: loss(200, 4) = 330 loss(400, 1) = 1: loss(400, 2) = 100: loss(400, 3) = 150: loss(400, 4) = 330 FOR i = 201 TO 399 loss(i, 1) = 100: loss(i, 2) = 100: loss(i, 3) = 150: loss(i, 4) = 150 NEXT LINE (200, 1)-(400, 100), 4, B: LINE (200, 150)-(400, 330), 4, B PAINT (210, 2), 1, 4: PAINT (210, 300), 1, 4 LINE (630, 2)-(630, 329), 14 GOTO 10000 1003 LINE (630, 2)-(630, 329), 14 LOCATE 3, 22: PRINT "THIS IS A DEMO OF MY NEXT KUBIK GAME !" LOCATE 5, 20: PRINT "feel free to email (nikol@cs.bgu.ac.il) me " 10000 END SUB SUB lose SHARED life SOUND 100, 2 life = life - 1 LOCATE 11, 22: PRINT " YOU LOSE !!! YOU HAVE "; life; "LIVES LEFT ! " DO WHILE INKEY$ = "": LOOP END SUB SUB right SHARED shirina, x, y, press DO WHILE exitt = 0 x = x + 1 '********** border ************************************ IF x > 639 THEN CALL win: exitt = 1: press = 9: GOTO 40 END IF '****************************************************** CALL update '****************************************************** FOR mm = 1 TO 9 STEP 2 FOR yy = 0 TO 6 IF y + yy >= loss(x, mm) AND y + yy <= loss(x, mm + 1) THEN CALL lose: exitt = 1: press = 0: GOTO 40 END IF NEXT yy NEXT mm FOR m = 0 TO 9 FOR mm = 1 TO 9 STEP 2 FOR tt = 0 TO 6 IF y + tt >= loss(x - m, mm) AND y + tt <= loss(x - m, mm + 1) THEN CALL lose: exitt = 1: press = 0: GOTO 40 END IF NEXT tt NEXT mm NEXT m '****************************************************** LINE (x, y)-(x, y + 6), 11: LINE (x - shirina, y)-(x - shirina, y + 6), 0 CALL delay SELECT CASE INKEY$ CASE CHR$(0) + CHR$(72) x = x - 9: press = 8: exitt = 1 CASE CHR$(0) + CHR$(80) press = 2: x = x - 9: y = y + 6: exitt = 1 END SELECT 40 LOOP END SUB SUB start COLOR 8, 8 LOCATE 4, 33: PRINT "KUBIK III" LOCATE 8, 24: PRINT "Programmed by " LOCATE 9, 24: PRINT " Berezansky Andrey" LOCATE 12, 27: PRINT "email(nikol@cs.bgu.ac.il)" LOCATE 24, 27: PRINT "PRESS ANY KEY TO CONTINUE"; DO WHILE INKEY$ = "" ii = mm FOR i = 21 TO 57 ii = ii + 1: COLOR ii: IF ii = 7 THEN ii = 1 LOCATE 2, i: PRINT CHR$(205) NEXT ii = ii + 1: IF ii = 7 THEN ii = 1 COLOR ii: LOCATE 2, 58: PRINT CHR$(187) FOR i = 3 TO 14 ii = ii + 1: COLOR ii: IF ii = 7 THEN ii = 1 LOCATE i, 58: PRINT CHR$(186) NEXT ii = ii + 1: IF ii = 7 THEN ii = 1 COLOR ii: LOCATE 15, 58: PRINT CHR$(188) FOR i = 57 TO 21 STEP -1 ii = ii + 1: COLOR ii: IF ii = 7 THEN ii = 1 LOCATE 15, i: PRINT CHR$(205) NEXT ii = ii + 1: IF ii = 7 THEN ii = 1 COLOR ii: LOCATE 15, 20: PRINT CHR$(200) FOR i = 14 TO 3 STEP -1 ii = ii + 1: COLOR ii: IF ii = 7 THEN ii = 1 LOCATE i, 20: PRINT CHR$(186) NEXT ii = ii + 1: IF ii = 7 THEN ii = 1 COLOR ii: LOCATE 2, 20: PRINT CHR$(201) FOR iii = 1 TO 20000: NEXT mm = mm + 1: IF mm = 7 THEN mm = 1 LOOP COLOR 15, 0 END SUB SUB up SHARED dlina, x, y, press DO WHILE exitt = 0 y = y - 1 '********* border ************************************* IF y < 2 THEN CALL lose: exitt = 1: press = 0: GOTO 60 END IF '****************************************************** CALL update '****************************************************** FOR m = 0 TO 9 FOR mm = 1 TO 9 STEP 2 IF y >= loss(x + m, mm) AND y <= loss(x + m, mm + 1) THEN CALL lose: exitt = 1: press = 0: GOTO 60 END IF NEXT mm NEXT m '****************************************************** LINE (x, y)-(x + 9, y), 11: LINE (x, y + dlina)-(x + 9, y + dlina), 0 CALL delay SELECT CASE INKEY$ CASE CHR$(0) + CHR$(77) x = x + 9: press = 6: exitt = 1 CASE CHR$(0) + CHR$(75) press = 4: exitt = 1 END SELECT 60 LOOP END SUB SUB update SHARED lev, xx, count, yy IF lev = 1 THEN 10010 IF lev = 2 THEN 10020 IF lev = 3 THEN 20000 10010 '--------------------------------------------- IF count = 1 THEN yy = yy + 5 ELSE yy = yy - 5 IF (yy + 1600) / 10 < 3 THEN count = 1 IF (yy + 1600) / 10 > 313 THEN count = 0 loss(300, 1) = 1: loss(300, 2) = (yy + 1590) / 10 loss(300, 3) = (yy + 1750) / 10: loss(300, 4) = 330 LINE (300, 1)-(300, 330), 4: LINE (300, (yy + 1600) / 10)-(300, (yy + 1740) / 10), 14 '--------------------------------------------- GOTO 20000 10020 '--------------------------------------------- IF count = 0 THEN yy = yy + 1 ELSE yy = yy - 1 IF yy > 49 THEN count = 1 IF yy < 1 THEN count = 0 loss(200, 1) = 1: loss(200, 2) = yy + 100 loss(240, 1) = 100: loss(240, 2) = yy + 100 loss(360, 1) = 100: loss(360, 2) = yy + 100 loss(400, 1) = 1: loss(400, 2) = yy + 100 FOR i = 201 TO 239 loss(i, 1) = yy + 100: loss(i, 2) = yy + 100 loss(i + 160, 1) = yy + 100: loss(i + 160, 2) = yy + 100 NEXT LINE (200, 100)-(200, 100 + yy), 4: LINE (200, 100 + yy)-(240, 100 + yy), 4 LINE (240, 100)-(240, 100 + yy), 4 LINE (360, 100)-(360, 100 + yy), 4: LINE (360, 100 + yy)-(400, 100 + yy), 4 LINE (400, 100)-(400, 100 + yy), 4 IF count = 1 AND yy < 49 THEN LINE (200, yy + 101)-(240, yy + 101), 0: LINE (360, yy + 101)-(400, yy + 101), 0 END IF '--------------------------------------------- 20000 END SUB SUB win SHARED lev, life, xx, yy, count LOCATE 10, 15: PRINT " YOU COMPLITED LEVEL "; lev; " GOOD LUCK ON THE NEXT ONE ! " IF lev = 3 THEN CALL winwin DO WHILE INKEY$ = "": LOOP xx = 0: yy = 0: count = 0 END SUB SUB winwin SHARED endd endd = 1 END SUB