home *** CD-ROM | disk | FTP | other *** search
/ CD Shareware Magazine 1996 December / CD_shareware_12-96.iso / DOS / Programa / BREAKOUT.ZIP / QMOUSE2.BAS < prev   
Encoding:
BASIC Source File  |  1996-08-24  |  9.3 KB  |  318 lines

  1.  DEFINT A-Z
  2.  DECLARE SUB Menu1 ()
  3. '              ********************************************
  4. '              *              QMouse.BAS                  *
  5. '              *  Mouse Routine for MS-QBasic/IBM-QBasic  *
  6. '              *                1 9 9 5                   *
  7. '              ********************************************
  8.  
  9. '                    Robert Wolf TV & Radio Service
  10.  
  11. '********************************* INI *************************************
  12.  
  13.     DEFINT A-Z
  14.     DECLARE SUB Mouse (cx, dX, bx)
  15.     DECLARE SUB MousePointer (SW)
  16.     DIM SHARED a(9)                 'Set up array for code
  17.     DIM ball(10 * 10)
  18.     DIM xball(10 * 10)
  19.     DIM paddle(31 * 5)
  20.     DIM block(61 * 11)
  21.     SCREEN 12: CLS
  22.     DEF SEG = VARSEG(a(0))          'Get array segment (nnnn:    )
  23.                                     '    (two 8 bit)
  24.     FOR i = 0 TO 17                 'length of DATA to
  25.        READ r                       'read
  26.        POKE VARPTR(a(0)) + i, r     'into array/2 (nnnn:iiii) (one 8 bit)
  27.     NEXT i                          'until 17
  28.     CIRCLE (5, 5), 1, 3
  29.     PAINT (5, 5), 3, 3
  30.     GET (0, 0)-(10, 10), ball
  31.     CLS
  32.     GET (0, 0)-(10, 10), xball
  33.     CLS
  34.     LINE (1, 1)-(50, 6), 4, BF
  35.     LINE (25, 1)-(50, 6), 5, BF
  36.     GET (0, 0)-(51, 7), paddle
  37.     CLS
  38.     LINE (1, 1)-(60, 10), 2, BF
  39.     GET (0, 0)-(61, 11), block
  40.     CLS
  41.     x = 320: y = 200
  42.     xadj = 1: yadj = 1
  43.     life = 5
  44.     stage = 1
  45. '**************************** Machine Code *********************************
  46.  
  47. DATA &HB8,&H00,&H00   :   ' mov  AX,[n]       [Swap code-(L),(H)] in AX
  48. DATA &H55             :   ' push BP           Save BP
  49. DATA &H8B,&HEC        :   ' mov  BP,SP        Get BP to c Seg
  50. DATA &HCD,&H33        :   ' int  33           Interrupt 33
  51. DATA &H92             :   ' xchg AX,[reg]     [Swap code-reg] in AX
  52. DATA &H8B,&H5E,&H06   :   ' mov  BX,[BP+6]    Point to (variable)
  53. DATA &H89,&H07        :   ' mov  [BX],AX      Put AX in (variable)
  54. DATA &H5D             :   ' pop  BP           Restore BP
  55. DATA &HCA,&H02,&H00   :   ' ret  2            Far return
  56.  
  57. '*********************** P R O G R A M   S C R E E N ***********************
  58.  
  59. start:
  60.     
  61.     LOCATE 10, 20: PRINT "Michael's New and Improved BREAKOUT!!!"
  62.     LOCATE 11, 20: INPUT "(1)Keyboard or (2)Mouse"; choice
  63.     LOCATE 11, 20: INPUT "Enter Level of Play(># slower; <# faster):", level
  64.     IF level < 0 THEN level = 0
  65.     IF level > 10 THEN level = 10
  66.     IF level = 0 THEN level = 5
  67.     
  68.     CLS
  69.    
  70.    
  71.     LINE (0, 0)-(5, 440), , BF
  72.     LINE (0, 0)-(500, 4), , BF
  73.     LINE (500, 5)-(495, 440), , BF
  74.  
  75. start2:
  76.    
  77.     FOR hplace = 6 TO 440 STEP 61
  78.         FOR vplace = 36 TO 413 STEP 11
  79.             blocks = blocks + 1
  80.             PUT (hplace, vplace), block
  81.             IF stage = 2 THEN
  82.                 ST = ST + 1
  83.                 IF ST = 1 THEN PAINT (hplace + 2, vplace + 2), 14, 0
  84.                 IF ST = 2 THEN ST = 0
  85.             END IF
  86.         NEXT vplace
  87.     NEXT hplace
  88.  
  89.  
  90.  
  91. '****************************** Mouse set up ******************************
  92.            
  93.                 CALL MousePointer(0)      'Reset mouse and
  94.                 CALL MousePointer(1)      'turn pointer on
  95.                 CALL MousePointer(3)      'Get coordinates
  96.  
  97. '****************************** P R O G R A M ******************************
  98. 1
  99.     DO WHILE k$ <> CHR$(27)
  100.           k$ = INKEY$
  101.  
  102.            chk = dX
  103.  
  104.       'lx = dx: qx = cx
  105.         CALL Mouse(cx, dX, bx)
  106.  
  107.            'LOCATE 22, 60
  108.            'PRINT cx                          'Display Row
  109.            'LOCATE 22, 66
  110.            'PRINT dx                          'Display Column
  111.            
  112.            IF life < chks THEN
  113.                LINE (515, 50)-(600, 100), 0, BF
  114.            END IF
  115.  
  116.            FOR dis = 1 TO (life - 1)
  117.                ad = disp
  118.                disp = dis * 15 + 500
  119.                PUT (disp, 50), ball, PSET
  120.                
  121.            NEXT dis
  122.          
  123.            chks = life
  124.           
  125.           
  126.           
  127.            IF x > 480 THEN
  128.                xadj = -1
  129.            ELSEIF x < 10 THEN
  130.                xadj = 1
  131.            END IF
  132.  
  133.            IF y < 10 THEN
  134.                yadj = 1
  135.            END IF
  136.            IF POINT(x + 5, y + 11) = 4 THEN
  137.                yadj = -1
  138.                xadj = xadj - 1
  139.                IF xadj < -1 THEN xadj = -1
  140.            ELSEIF POINT(x + 5, y + 11) = 5 THEN
  141.                yadj = -1
  142.                xadj = xadj + 1
  143.                IF xadj > 1 THEN xadj = 1
  144.            END IF
  145.  
  146.            IF POINT(x + 11, y + 5) = 2 THEN
  147.                PAINT (x + 11, y + 5), 0, 0
  148.                xadj = -1
  149.                blocks = blocks - 1
  150.                score = score + 100
  151.            ELSEIF POINT(x - 1, y + 5) = 2 THEN
  152.                PAINT (x - 1, y + 5), 0, 0
  153.                xadj = 1
  154.                blocks = blocks - 1
  155.                score = score + 100
  156.            END IF
  157.            IF POINT(x + 5, y + 11) = 2 THEN
  158.                PAINT (x + 5, y + 11), 0, 0
  159.                yadj = -1
  160.                blocks = blocks - 1
  161.                score = score + 100
  162.            ELSEIF POINT(x + 5, y - 1) = 2 THEN
  163.                PAINT (x + 5, y - 1), 0, 0
  164.                yadj = 1
  165.                blocks = blocks - 1
  166.                score = score + 100
  167.            END IF
  168.  
  169.            IF POINT(x + 11, y + 5) = 14 THEN
  170.                PAINT (x + 11, y + 5), 2, 0
  171.                xadj = -1
  172.                score = score + 150
  173.            ELSEIF POINT(x - 1, y + 5) = 14 THEN
  174.                PAINT (x - 1, y + 5), 2, 0
  175.                xadj = 1
  176.                score = score + 150
  177.            END IF
  178.            IF POINT(x + 5, y + 11) = 14 THEN
  179.                PAINT (x + 5, y + 11), 2, 0
  180.                yadj = -1
  181.                score = score + 150
  182.            ELSEIF POINT(x + 5, y - 1) = 14 THEN
  183.                PAINT (x + 5, y - 1), 2, 0
  184.                yadj = 1
  185.                score = score + 150
  186.            END IF
  187.  
  188.            LOCATE 1, 70: PRINT score
  189.           
  190.            IF blocks < 1 THEN
  191.                stage = stage + 1
  192.                GOTO start2
  193.            END IF
  194.  
  195.            a = x: b = y
  196.  
  197.            x = x + xadj
  198.            y = y + yadj
  199.  
  200.            IF k$ = CHR$(0) + "M" THEN kbd = ax + 20
  201.            IF k$ = CHR$(0) + "K" THEN kbd = ax - 20
  202.  
  203.  
  204.            'FOR slow = 0 TO : NEXT slow
  205.  
  206.  
  207.           
  208.            IF choice = 2 THEN ax = dX
  209.            IF choice = 1 THEN ax = kbd
  210.           
  211.            IF ax > 445 THEN ax = 440
  212.            IF ax < 5 THEN ax = 5
  213.           
  214.            PUT (x, y), ball, PSET
  215.            'PUT (a, b), xball, PSET
  216.            PUT (ax, 440), paddle, PSET
  217.           
  218.            LINE (5, 440)-(ax, 447), 0, BF
  219.            LINE (ax + 50, 440)-(490, 447), 0, BF
  220.  
  221.            IF y > 430 THEN
  222.                 PUT (x, y), xball, PSET
  223.                 life = life - 1
  224.                 IF life = 0 THEN
  225.                      LOCATE 10, 25
  226.                      PRINT "You DIE!!!!"
  227.                      END
  228.                 END IF
  229.                 LOCATE 10, 25: PRINT "READY!"
  230.                 SLEEP
  231.                 LOCATE 10, 25: PRINT "      "
  232.                 x = dX + 5
  233.                 y = 410
  234.                 xadj = 0
  235.                 yadj = -1
  236.            END IF
  237.           
  238.  
  239.  
  240.  
  241.  
  242.  
  243.     LOOP
  244.  
  245. '******************************** Exit *************************************
  246. done:
  247.                  CALL MousePointer(2)              'Turn mouse off
  248.    
  249.     DEF SEG
  250.    
  251. END
  252. '**************************** Return to Basic ******************************
  253.  
  254. SUB Menu1
  255.  
  256.  
  257.  
  258.     
  259.  
  260.           ' IF bx = 1 THEN
  261.           '   IF cx = 4 THEN
  262.           '     IF dx >= 1 AND dx <= 47 THEN
  263.           '     REM  GOTO
  264.           '       END IF
  265.           '    END IF
  266.           '  END IF
  267.  
  268.           
  269.           ' IF bx = 1 THEN
  270.           '   IF cx >= 10 AND cx <= 37 THEN
  271.           '     IF dx >= 1 AND dx <= 47 THEN
  272.           '     REM  GOTO done
  273.           '       END IF
  274.           '    END IF
  275.           '  END IF
  276.           
  277.           ' IF bx = 1 THEN
  278.           '   IF cx >= 10 AND cx <= 37 THEN
  279.           '     IF dx >= 1 AND dx <= 47 THEN
  280.           '      REM GOTO done
  281.           '       END IF
  282.           '    END IF
  283.           '  END IF
  284.           
  285. END SUB
  286.  
  287. SUB Mouse (cx, dX, bx)
  288.          
  289.            POKE VARPTR(a(4)), &H92           'Swap code,Get CX setup
  290.           CALL absolute(cx, VARPTR(a(0)))     'Run Code
  291.               cx = cx                        'Adjust 25x80
  292.            POKE VARPTR(a(4)), &H91           'Swap code,Get DX setup
  293.           CALL absolute(dX, VARPTR(a(0)))     'Run Code
  294.               dX = dX                        'Adjust 25x80
  295.            POKE VARPTR(a(4)), &H93           'Swap code,Get BX setup
  296.           CALL absolute(bx, VARPTR(a(0)))     'Run Code
  297.  
  298.                                    'Note :
  299.                                    'Remove the /8
  300.                                    'for graphics modes.
  301.  
  302. END SUB
  303.  
  304. SUB MousePointer (SW)
  305.          
  306.            POKE VARPTR(a(0)) + 1, SW         'Swap code,Set AX = (SW)
  307.           CALL absolute(c, VARPTR(a(0)))     'Run Code
  308.  
  309.                                           'Note:
  310.                                              'SW = 0-reset
  311.                                              'SW = 1-on
  312.                                              'SW = 2-off
  313.                                              'SW = 3-coordinates
  314.  
  315.  
  316. END SUB
  317.  
  318.