'===========================================================================
' Subject: GAME KUBIK                         Date: 12-17-97 (01:04)       
'  Author: Andrey Berezansky                  Code: QB, QBasic, PDS        
'  Origin: nikolai@nsi.co.il                Packet: GAMES.ABC
'===========================================================================
' Controls - arrow keys.
' The game contains only 8 levels i did'nt created more.
' If intro is to slow in your computer just put ' before "CALL start"command.
' Programmer BEREZANSKY ANDREY  email - nikol@cs.bgu.ac.il
' email me for cheat (2 cheats available in the game).
'
' If you dont like speed of your game change the delay number below
' as smaler it is as faster you game speed will be !!!
' \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\\\\|//////\/\/\/\/\/\/\/\/\/\/
DEFINT A-Z                              '|
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                              '|
                                        '|
' here you can change the speed   ->\\\\\\/////<-
DIM SHARED loss(629, 2): life = 3: dellay = 3300

1 x = 30: y = 100: 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: endd = 0: GOTO 1
    CASE "n"
      aa = 1
    CASE CHR$(36)
      DO WHILE andr = 0
        SELECT CASE INKEY$
          CASE "a"
            DO WHILE andr = 0
              SELECT CASE INKEY$
                CASE "n"
                  DO WHILE andr = 0
                    SELECT CASE INKEY$
                      CASE "d"
                        DO WHILE andr = 0
                          SELECT CASE INKEY$
                            CASE "r"
                              DO WHILE andr = 0
                                SELECT CASE INKEY$
                                  CASE "e"
                                    DO WHILE andr = 0
                                      SELECT CASE INKEY$
                                        CASE "y"
                                          life = 100: lev = lev - 1: aa = 1
                                          endd = 0: andr = 1: GOTO 1
                                        CASE ""
                                        CASE ELSE
                                          andr = 1
                                      END SELECT
                                    LOOP
                                  CASE ""
                                  CASE ELSE
                                    andr = 1
                                END SELECT
                              LOOP
                            CASE ""
                            CASE ELSE
                              andr = 1
                          END SELECT
                        LOOP
                      CASE ""
                      CASE ELSE
                        andr = 1
                    END SELECT
                  LOOP
                CASE ""
                CASE ELSE
                  andr = 1
              END SELECT
            LOOP
          CASE ""
          CASE ELSE
            andr = 1
        END SELECT
      LOOP
      andr = 0
    CASE "+"
      DO WHILE andr = 0
        SELECT CASE INKEY$
          CASE "l"
            DO WHILE andr = 0
              SELECT CASE INKEY$
                CASE "v"
                  IF lev < 9 THEN
                    life = 3: aa = 1: endd = 0: GOTO 1
                  END IF
                  aa = 1: endd = 0: andr = 1
                CASE ""
                CASE ELSE
                  andr = 1
              END SELECT
            LOOP
          CASE ""
          CASE ELSE
            andr = 1
        END SELECT
      LOOP
      andr = 0
  END SELECT
LOOP

SUB delay
SHARED press, dellay
IF press = 4 OR press = 6 THEN
  FOR mm = 1 TO dellay: NEXT
END IF
IF press = 2 OR press = 8 THEN
  FOR mm = 1 TO dellay + dellay / 4: NEXT
END IF

END SUB

SUB down
SHARED dlina, x, y, press
DO WHILE exitt = 0
  y = y + 1
  IF y > 329 THEN
    CALL lose: exitt = 1: press = 0: GOTO 20
  END IF
  IF x > 570 AND y > 307 THEN
    CALL win: exitt = 1: press = 9: GOTO 20
  END IF
'******************************************************
  FOR m = 0 TO 9
    IF loss(x + m, 1) <> 0 THEN
      IF y >= loss(x + m, 2) THEN
        CALL lose: exitt = 1: press = 0: GOTO 20
      END IF
    END IF
  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
  IF x < 2 THEN
    CALL lose: exitt = 1: press = 0: GOTO 30
  END IF
'******************************************************
  IF loss(x, 1) <> 0 THEN
    IF y <= loss(x, 1) OR (y + 6) >= loss(x, 2) THEN
      CALL lose: exitt = 1: press = 0: GOTO 30
    END IF
  END IF
'******************************************************
  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

IF lev = 1 THEN 1001
IF lev = 2 THEN 1002
IF lev = 3 THEN 1003
IF lev = 4 THEN 1004
IF lev = 5 THEN 1005
IF lev = 6 THEN 1006
IF lev = 7 THEN 1007
IF lev = 8 THEN 1008
IF lev = 9 THEN 1009


1001
LINE (1, 1)-(630, 330), 4, B: LINE (570, 300)-(629, 329), 3, B
LOCATE 23, 74: PRINT "EXIT"
FOR ii = 1 TO 629
  loss(ii, 1) = 0: loss(ii, 2) = 0
NEXT

FOR ii = 200 TO 560 STEP 60
  yy = yy + 30: LINE (ii, 330)-(ii, yy), 4: LINE (ii, 1)-(ii, yy - 15), 4
  loss(ii, 1) = yy - 15: loss(ii, 2) = yy
NEXT ii

GOTO 10000

1002

LINE (1, 1)-(630, 330), 4, B: LINE (570, 300)-(629, 329), 3, B
LOCATE 23, 74: PRINT "EXIT"
FOR ii = 1 TO 629
  loss(ii, 1) = 0: loss(ii, 2) = 0
NEXT

FOR ii = 200 TO 470 STEP 30
  yy = yy + 30: LINE (ii, 330)-(ii, yy), 4: LINE (ii, 1)-(ii, yy - 15), 4
  loss(ii, 1) = yy - 15: loss(ii, 2) = yy
NEXT ii

GOTO 10000

1003

LINE (1, 1)-(630, 330), 4, B: LINE (570, 300)-(629, 329), 3, B
LOCATE 23, 74: PRINT "EXIT"
FOR ii = 1 TO 629
  loss(ii, 1) = 0: loss(ii, 2) = 0
NEXT

FOR ii = 100 TO 560 STEP 30
  yy = INT(RND * 313) + 16
  LINE (ii, 330)-(ii, yy), 4: LINE (ii, 1)-(ii, yy - 15), 4
  loss(ii, 1) = yy - 15: loss(ii, 2) = yy
NEXT ii

GOTO 10000

1004

LINE (1, 1)-(630, 330), 4, B: PAINT (2, 2), 1, 4
LINE (570, 300)-(629, 329), 3, B: LOCATE 23, 74: PRINT "EXIT"
FOR ii = 1 TO 629
  loss(ii, 1) = 0: loss(ii, 2) = 0
NEXT

LINE (300, 1)-(300, 330), 4: LINE (300, 162)-(300, 170), 1
loss(300, 1) = 161: loss(300, 2) = 171

GOTO 10000

1005

LINE (1, 1)-(630, 330), 4, B
LINE (570, 300)-(629, 329), 3, B: LOCATE 23, 74: PRINT "EXIT"
FOR ii = 1 TO 629
  loss(ii, 1) = 0: loss(ii, 2) = 0
NEXT

LINE (300, 1)-(300, 330), 4: LINE (300, 321)-(300, 329), 14
loss(300, 1) = 320: loss(300, 2) = 330
LINE (320, 1)-(320, 330), 4: LINE (320, 2)-(320, 10), 14
loss(320, 1) = 1: loss(320, 2) = 11
LINE (340, 1)-(340, 330), 4: LINE (340, 162)-(340, 170), 14
loss(340, 1) = 161: loss(340, 2) = 171

GOTO 10000

1006

LINE (1, 1)-(630, 330), 4, B: LINE (570, 300)-(629, 329), 3, B
LOCATE 23, 74: PRINT "EXIT"
FOR ii = 1 TO 629
  loss(ii, 1) = 0: loss(ii, 2) = 0
NEXT

FOR ii = 160 TO 240 STEP 20
  yy = INT(RND * 313) + 16
  LINE (ii, 330)-(ii, yy), 4: LINE (ii, 1)-(ii, yy - 15), 4
  loss(ii, 1) = yy - 15: loss(ii, 2) = yy
NEXT ii

FOR ii = 480 TO 560 STEP 20
  yy = INT(RND * 313) + 16
  LINE (ii, 330)-(ii, yy), 4: LINE (ii, 1)-(ii, yy - 15), 4
  loss(ii, 1) = yy - 15: loss(ii, 2) = yy
NEXT ii

LINE (360, 1)-(360, 330), 4: LINE (360, 162)-(360, 170), 1
loss(360, 1) = 161: loss(360, 2) = 171

GOTO 10000

1007

LINE (1, 1)-(630, 330), 4, B: LINE (570, 300)-(629, 329), 3, B
LOCATE 23, 74: PRINT "EXIT"
FOR ii = 1 TO 629
  loss(ii, 1) = 0: loss(ii, 2) = 0
NEXT

FOR ii = 280 TO 480 STEP 20
  yy = INT(RND * 313) + 16
  LINE (ii, 330)-(ii, yy), 4: LINE (ii, 1)-(ii, yy - 15), 4
  loss(ii, 1) = yy - 15: loss(ii, 2) = yy
NEXT ii

LINE (200, 1)-(200, 330), 4: LINE (200, 162)-(200, 170), 14
loss(200, 1) = 161: loss(200, 2) = 171
LINE (560, 1)-(560, 330), 4: LINE (560, 162)-(560, 170), 14
loss(560, 1) = 161: loss(560, 2) = 171

GOTO 10000

1008

LINE (1, 1)-(630, 330), 4, B: LINE (570, 300)-(629, 329), 3, B
LOCATE 23, 74: PRINT "EXIT"
FOR ii = 1 TO 629
  loss(ii, 1) = 0: loss(ii, 2) = 0
NEXT

FOR ii = 100 TO 560 STEP 20
  yy = INT(RND * 313) + 16
  LINE (ii, 330)-(ii, yy), 4: LINE (ii, 1)-(ii, yy - 15), 4
  loss(ii, 1) = yy - 15: loss(ii, 2) = yy
NEXT ii

GOTO 10000

1009

LINE (1, 1)-(630, 330), 4, B: LINE (570, 300)-(629, 329), 3, B
LOCATE 23, 74: PRINT "EXIT"
FOR ii = 1 TO 629
  loss(ii, 1) = 0: loss(ii, 2) = 0
NEXT

LOCATE 10, 12: PRINT "THIS IS A SHAREWARE VERSION AND ONLY 8 LEVELS INCLUDED !"

GOTO 10000

10000
END SUB

'
SUB lose
SHARED life
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
  IF x > 629 THEN
    CALL lose: exitt = 1: press = 0: GOTO 40
  END IF
  IF x > 580 AND y > 300 THEN
    CALL win: exitt = 1: press = 9: GOTO 40
  END IF
'******************************************************
  IF loss(x, 1) <> 0 THEN
    IF y <= loss(x, 1) OR (y + 6) >= loss(x, 2) THEN
      CALL lose: exitt = 1: press = 0: GOTO 40
    END IF
  END IF
'******************************************************
  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

COLOR 3
FOR i = 1 TO 630
  LOCATE 9, 12: PRINT " GAME KUBIK !"
  IF i < 193 THEN LINE (i, 111)-(i, 124), 11
  LOCATE 10, 25: PRINT " writen in qbasic "
  IF i < 337 THEN LINE (i, 125)-(i, 139), 12
  LOCATE 11, 43: PRINT " BY BEREZANSKY ANDREY "
  IF i < 513 THEN LINE (i, 139)-(i, 154), 13
  LOCATE 15, 25: PRINT " email nikol@cs.bgu.ac.il"
  LINE (i, 195)-(i, 214), 15: LINE (i, 69)-(i, 70), 15
NEXT

FOR m = 1 TO 5
FOR iiii = 1 TO 30000: NEXT iiii
NEXT

FOR i = 71 TO 193
  LOCATE 9, 12: PRINT " GAME KUBIK !"
  LOCATE 10, 25: PRINT " writen in qbasic "
  LOCATE 11, 43: PRINT " BY BEREZANSKY ANDREY "
  LOCATE 15, 25: PRINT " email nikol@cs.bgu.ac.il"
  LINE (1, i)-(630, i + 1), 15, BF: LINE (1, i - 1)-(630, i - 2), 0, BF
NEXT

DO WHILE INKEY$ = "": LOOP
COLOR 15, 0

END SUB

SUB up
SHARED dlina, x, y, press
DO WHILE exitt = 0
  y = y - 1
  IF y < 2 THEN
    CALL lose: exitt = 1: press = 0: GOTO 60
  END IF
'******************************************************
  FOR m = 0 TO 9
    IF loss(x + m, 1) <> 0 THEN
      IF y <= loss(x + m, 1) THEN
        CALL lose: exitt = 1: press = 0: GOTO 60
      END IF
    END IF
  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 win
SHARED lev, life
LOCATE 10, 15: PRINT " YOU COMPLITED LEVEL "; lev; " GOOD LUCK ON THE NEXT ONE !  "
IF lev = 3 THEN life = life + 1
IF lev = 5 THEN life = life + 2
IF lev = 7 THEN life = life + 1
IF lev = 9 THEN CALL winwin

DO WHILE INKEY$ = "": LOOP
END SUB

SUB winwin
SHARED endd
endd = 1
END SUB
