Author Topic: My first game - Very simple Space Arcade Game  (Read 4332 times)

0 Members and 1 Guest are viewing this topic.

Offline PauloC

  • Newbie
  • Posts: 2
  • Learning QB64
    • View Profile
    • TRAME Estruturas
My first game - Very simple Space Arcade Game
« on: April 13, 2021, 09:24:56 pm »
This is a very simple Space Arcade Game. In this game, you will be invited to travel in different levels of challenges. To overcome a specific level, you need to hit all the objects. At each new stage, the objects appear in a different order.

    Source code on Github
   https://github.com/TrameGit/SpaceBatte20 
     
 
    See the video on
   


Offline Pete

  • Forum Resident
  • Posts: 2361
  • Cuz I sez so, varmint!
    • View Profile
Re: My first game - Very simple Space Arcade Game
« Reply #1 on: April 14, 2021, 12:22:57 am »
Not bad, but if you want to make a really impressive version, you'll need to code it in SCREEN 0.

Here, you can borrow my IDE program for the task...

Code: QB64: [Select]
  1.         TYPE RegType
  2.             AX AS INTEGER
  3.             BX AS INTEGER
  4.             CX AS INTEGER
  5.             DX AS INTEGER
  6.             BP AS INTEGER
  7.             SI AS INTEGER
  8.             DI AS INTEGER
  9.             FLAGS AS INTEGER
  10.             DS AS INTEGER
  11.             ES AS INTEGER
  12.         END TYPE
  13.          
  14.         DIM SHARED MOUSE$
  15.         DIM SHARED Registers AS RegType
  16.         DIM SHARED LB%, RB%, MB%, DX, CX
  17.         DIM SHARED lmargin%, rmargin%, topmargin%, screenwidth%, level, ibk, ileadingrow
  18.         DIM SHARED irow, icol, inextrnd, imaxalienmissiles, alienforce%, ileadingmax, imaxalienforce, ihits
  19.          
  20.         imaxalienforce = 6
  21.         imaxalienmissiles = 3
  22.         lmargin% = 2
  23.         rmargin% = 79
  24.         topmargin% = 3
  25.         ialiencolstat = 6
  26.         iwin = 3
  27.         screenwidth% = rmargin% - lmargin% + 1
  28.         ibk = 1
  29.          
  30.         DIM SHARED a(imaxalienforce) AS STRING * 68
  31.          
  32.         RANDOMIZE TIMER
  33.         SCREEN 0, 0, 0, 0
  34.         COLOR 7, 1: CLS
  35.          
  36.         REM Make aliens
  37.         a1$ = "-<" + CHR$(237) + ">-  "
  38.         a$ = a1$ + a1$ + a1$ + a1$ + a1$ + a1$ + a1$ + a1$ + a1$ + a1$
  39.          
  40.         CALL qbide
  41.         CALL instructions
  42.          
  43.         DO
  44.             IF inextrnd = -1 THEN PCOPY 3, 0
  45.             tank$ = CHR$(218) + CHR$(127) + CHR$(191): icolor = 7
  46.             REDIM SHARED bullet%(5), bulletcol%(5), bulletdelay%(5), iltalien(imaxalienforce)
  47.             REDIM SHARED ia(imaxalienmissiles), iy(imaxalienmissiles), ix(imaxalienmissiles)
  48.             REDIM SHARED matrix(imaxalienforce) AS STRING * 10
  49.             alienforce% = imaxalienforce
  50.             level = .65
  51.             iround = iround + 1
  52.             level = level - iround / 15
  53.             inextrnd = -1
  54.             COLOR 7, ibk
  55.          
  56.             REM Set up aliens
  57.             ialiencol = ialiencolstat
  58.             LOCATE 2, ialiencol
  59.             FOR i = 1 TO imaxalienforce
  60.                 IF i MOD 1 = 0 THEN PRINT
  61.                 LOCATE , ialiencol
  62.                 IF i = imaxalienforce THEN ileadingrow = CSRLIN: ileadingmax = ileadingrow
  63.                 a(i) = a$
  64.                 PRINT a(i)
  65.             NEXT
  66.          
  67.             REM Station
  68.             LOCATE 24, 40, 1, 7, 7
  69.             PRINT tank$;: LOCATE , POS(1) - 2: tanky% = CSRLIN: tankx% = POS(1) + 1
  70.             KEY$ = INKEY$: SLEEP 1
  71.             ex% = 1: CALL mdriver(ex%, KEY$, tankx%)
  72.             DO
  73.                 z1 = TIMER
  74.                 DO
  75.                     IF topmargin% + ileadingmax - (imaxalienforce * 2) >= topmargin% + 2 THEN
  76.                         IF imothership <> 0 THEN CALL mship(imothership)
  77.                     END IF
  78.                     IF ABS(TIMER - z1aliens) > level THEN
  79.                         CALL movealiens(ialiencol, ialiencolstat, iresults)
  80.                         z1aliens = TIMER
  81.                     END IF
  82.                     IF iresults < 0 THEN EXIT DO
  83.                     IF ABS(TIMER - z1ia) > .3 THEN CALL alienmissile(iresults): z1ia = TIMER
  84.                     KEY$ = INKEY$
  85.                     IF KEY$ = "" THEN ex% = 2: CALL mdriver(ex%, KEY$, tankx%)
  86.                     SELECT CASE KEY$
  87.                         CASE CHR$(0) + "K"
  88.                             IF POS(1) > lmargin% + 1 THEN COLOR icolor, ibk: LOCATE , POS(1) - 2: PRINT tank$ + " ";: LOCATE , POS(1) - 3
  89.                             tanky% = CSRLIN: tankx% = POS(1)
  90.                             IF SCREEN(tanky%, tankx% - 2) = 25 OR SCREEN(tanky%, tankx% + 2) = 25 THEN result = -1: EXIT DO
  91.                         CASE CHR$(0) + "M"
  92.                             IF POS(1) < screenwidth% THEN COLOR icolor, ibk: LOCATE , POS(1) - 1: PRINT " " + tank$;: LOCATE , POS(1) - 2
  93.                             tanky% = CSRLIN: tankx% = POS(1)
  94.                             IF SCREEN(tanky%, tankx% - 2) = 25 OR SCREEN(tanky%, tankx% + 2) = 25 THEN result = -1: EXIT DO
  95.                         CASE CHR$(32)
  96.                             IF icolor = 7 THEN
  97.                                 FOR i2 = 1 TO 5
  98.                                     IF bullet%(i2) = 0 THEN
  99.                                         icolor = 12: COLOR icolor, ibk: GOSUB redraw
  100.                                         bullet%(i2) = -1: reload = TIMER: EXIT FOR
  101.                                     END IF
  102.                                 NEXT
  103.                             END IF
  104.                         CASE CHR$(27): SYSTEM
  105.                     END SELECT
  106.          
  107.                     IF ABS(z1 - reload) > .7 AND reload <> 0 THEN
  108.                         GOSUB redraw
  109.                         icolor = 7: reload = 0
  110.                     END IF
  111.          
  112.                     REM Fire
  113.                     FOR i = 1 TO 5
  114.                         SELECT CASE bullet%(i)
  115.                             CASE -1: bullet%(i) = tanky% - 1: bulletcol%(i) = tankx%
  116.                             CASE IS > 0
  117.                                 IF bulletdelay%(i) = -1 OR bullet%(i) = tanky% - 1 THEN
  118.                                     CALL checkcollision(ihitaliens, ialiencol, i4, i)
  119.                                     z2bullet = TIMER: bulletdelay%(i) = 0
  120.                                     COLOR 7, ibk
  121.                                     LOCATE bullet%(i), bulletcol%(i)
  122.                                     IF bullet%(i) = topmargin% AND imothership <> 0 THEN
  123.                                         IF SCREEN(ABS(bullet%(i)), bulletcol%(i)) <> 32 THEN
  124.                                             SOUND 1000, .75
  125.                                             LOCATE topmargin%, lmargin%: PRINT SPACE$(screenwidth%);
  126.                                             imothership = 0
  127.                                         END IF
  128.                                     END IF
  129.                                     PRINT CHR$(24)
  130.                                     IF CSRLIN <> 24 THEN LOCATE , bulletcol%(i): PRINT " ";
  131.                                     IF ihitaliens <> 0 THEN CALL reprintaliens(ialiencol, ihitaliens, iresults, i4, i, imothership)
  132.                                     LOCATE tanky%, tankx%
  133.                                     IF bullet%(i) > topmargin% THEN
  134.                                         bullet%(i) = bullet%(i) - 1
  135.                                     ELSE
  136.                                         GOSUB erasebullet
  137.                                     END IF
  138.                                 END IF
  139.                         END SELECT
  140.                     NEXT
  141.          
  142.                     REM Bullet TIMER delay
  143.                     IF z2bullet <> 0 THEN
  144.                         IF z1 < z2bullet THEN z2bullet = z2bullet - 86400
  145.                         IF z1 - z2bullet >= .06 THEN
  146.                             FOR i2 = 1 TO 5
  147.                                 IF bullet%(i2) <> 0 THEN bulletdelay%(i2) = -1
  148.                             NEXT i2
  149.                         END IF
  150.                         EXIT DO
  151.                     END IF
  152.                 LOOP
  153.                 IF iresults < 0 THEN EXIT DO
  154.                 IF alienforce% = 0 OR iresults = iwin THEN
  155.                     FOR i = 1 TO imaxalienmissiles
  156.                         IF ia(i) <> 0 THEN EXIT FOR
  157.                     NEXT
  158.                     IF i > imaxalienmissiles THEN iwait = -1
  159.                     IF iwait = -1 THEN
  160.                         EXIT DO
  161.                     END IF
  162.                 ELSE
  163.                     iwait = 1
  164.                 END IF
  165.             LOOP
  166.             ex% = -1: CALL mdriver(ex%, KEY$, tankx%)
  167.             KEY$ = INKEY$
  168.             SLEEP 2
  169.             IF iresults = iwin OR iresults < 0 THEN
  170.                 REM END game
  171.                 EXIT DO
  172.             END IF
  173.             inextrnd = -1
  174.         LOOP
  175.         SELECT CASE iresults
  176.             CASE IS < 0
  177.                 COLOR 7, ibk
  178.                 LOCATE tanky% - 1, lmargin%
  179.                 PRINT SPACE$(screenwidth%);
  180.                 LOCATE tanky%, lmargin%
  181.                 PRINT SPACE$(screenwidth%);
  182.                 KEY$ = INKEY$
  183.                 SOUND 140, 2
  184.                 SLEEP 2
  185.         END SELECT
  186.         CALL qbide
  187.         CALL instructions
  188.         SYSTEM
  189.          
  190.         erasebullet:
  191.         LOCATE ABS(bullet%(i)), bulletcol%(i): PRINT " ";
  192.         bullet%(i) = 0: bulletcol%(i) = 0: bulletdelay%(i) = 0
  193.         LOCATE tanky%, tankx%
  194.         RETURN
  195.          
  196.         redraw:
  197.         COLOR , ibk: LOCATE tanky%, tankx% - 1: PRINT tank$;: LOCATE tanky%, tankx%: COLOR 7, ibk
  198.         RETURN
  199.          
  200.         DATA "Well, I better get busy and finish the compiler..."
  201.         DATA "Or... I'll just do some more work on this IDE, instead..."
  202.         DATA ""
  203.         DATA " Loading..."
  204.         DATA "EOF"
  205.         DATA "Game Over. Thanks for playing..."
  206.         DATA ""
  207.         DATA "Now finish the compiler!"
  208.         DATA "EOF2"
  209.          
  210.         SUB alienattack (ialiencolstat, ialiencol)
  211.         z2alienfire = TIMER
  212.          
  213.         i3 = INT(RND * 10)
  214.         FOR i = 1 TO imaxalienmissiles
  215.             IF ia(i) = 0 THEN
  216.                 FOR i2 = imaxalienforce TO 1 STEP -1
  217.                     IF RTRIM$(a(i2)) <> "" THEN
  218.                         IF MID$(matrix(i2), i3 + 1, 1) <> "0" THEN
  219.                             i4 = INSTR(i3 * 7 + 1, a(i2), CHR$(237)) + ialiencol
  220.                             EXIT FOR
  221.                         END IF
  222.                     END IF
  223.                 NEXT i2
  224.                 IF i4 <> 0 THEN
  225.                     ia(i) = (ileadingmax - (imaxalienforce - i2) * 2) * 80 + i4
  226.                     EXIT FOR
  227.                 END IF
  228.             END IF
  229.         NEXT i
  230.          
  231.         END SUB
  232.          
  233.         SUB alienmissile (iresults)
  234.         irow = CSRLIN: icol = POS(1)
  235.         FOR i = 1 TO imaxalienmissiles
  236.             IF ia(i) <> 0 THEN
  237.                 IF iy(i) = 0 THEN
  238.                     iy(i) = ia(i) \ 80: ix(i) = ia(i) MOD 80
  239.                     IF ix(i) = 0 THEN ix(i) = screenwidth%
  240.                 END IF
  241.                 LOCATE iy(i) + 1, ix(i)
  242.                 COLOR 7, ibk
  243.                 IF CSRLIN <= 24 THEN
  244.                     IF CSRLIN = 24 THEN IF SCREEN(CSRLIN, ix(i)) <> 32 THEN iresults = -1
  245.                     PRINT CHR$(25);
  246.                 ELSE
  247.                     ia(i) = 0
  248.                     LOCATE iy(i), ix(i)
  249.                     PRINT " ";: iy(i) = 0
  250.                     ia(i) = 0
  251.                     LOCATE irow, icol
  252.                     EXIT SUB
  253.                 END IF
  254.                 LOCATE iy(i), ix(i): PRINT " ";
  255.                 iy(i) = iy(i) + 1
  256.             END IF
  257.         NEXT
  258.         LOCATE irow, icol
  259.          
  260.         END SUB
  261.          
  262.         SUB checkcollision (ihitaliens, ialiencol, i4, i)
  263.         ihitaliens = 0
  264.         IF ileadingmax MOD 2 = bullet%(i) MOD 2 THEN
  265.             i4 = imaxalienforce - (ileadingmax - bullet%(i)) \ 2
  266.             IF bullet%(i) <= ileadingrow AND i4 > 0 AND i4 <= imaxalienforce THEN
  267.                 IF RTRIM$(a(i4)) <> "" THEN
  268.                     IF bulletcol%(i) >= iltalien(i4) AND bulletcol%(i) - ialiencol <= LEN(RTRIM$(a(i4))) THEN
  269.                         IF MID$(a(i4), bulletcol%(i) - ialiencol, 1) > CHR$(32) THEN
  270.                             ihitaliens = bulletcol%(i) - ialiencol + 1
  271.                             i3 = ihitaliens - 7 + 1: IF i3 < 1 THEN i3 = 1: REM count from the "<" symbol.
  272.                             i2 = INSTR(i3 + 1, a(i4), "<") - 1
  273.                             MID$(a(i4), i2, 7) = SPACE$(7)
  274.                             MID$(matrix(i4), (i2 + 1) \ 7 + 1, 1) = "0"
  275.                         END IF
  276.                     END IF
  277.                 END IF
  278.             END IF
  279.         END IF
  280.          
  281.         FOR i2 = 1 TO imaxalienmissiles
  282.             IF ia(i2) <> 0 THEN
  283.                 IF iy(i2) >= bullet%(i) AND ix(i2) = bulletcol%(i) THEN
  284.                     ihitaliens = -i2
  285.                     EXIT FOR
  286.                 END IF
  287.             END IF
  288.         NEXT
  289.          
  290.         END SUB
  291.          
  292.         SUB instructions
  293.          
  294.         'in$ = "EOF"
  295.         IF in$ = "" THEN
  296.             KEY$ = INKEY$
  297.             LOCATE 3, 3, 1, 7, 7: COLOR 7, ibk
  298.             SLEEP 2
  299.             DO
  300.                 READ in$
  301.                 IF MID$(in$, 1, 3) = "EOF" THEN EXIT DO
  302.                 FOR i = 1 TO LEN(in$)
  303.                     SOUND 400, .1
  304.                     LOCATE , 2 + i
  305.                     PRINT MID$(in$, i, 1);
  306.                     z = TIMER
  307.                     DO
  308.                         IF ABS(z - TIMER) > .1 THEN EXIT DO
  309.                     LOOP
  310.                 NEXT
  311.                 LOCATE , , 0, 7, 0
  312.                 KEY$ = INKEY$
  313.                 SLEEP 1
  314.                 PRINT
  315.                 LOCATE , 3
  316.             LOOP
  317.             KEY$ = INKEY$
  318.             SLEEP 1
  319.         END IF
  320.          
  321.         IF in$ = "EOF" THEN
  322.             COLOR 7, 1
  323.             FOR i = 1 TO 5
  324.                 LOCATE 2 + i, 2: PRINT SPACE$(78)
  325.             NEXT
  326.             FOR i = 3 TO 24
  327.                 LOCATE i, 80: PRINT CHR$(179);
  328.             NEXT
  329.             LOCATE 21, 2: PRINT STRING$(78, " ");
  330.             LOCATE 22, 1: PRINT CHR$(179);
  331.             LOCATE 22, 80: PRINT CHR$(179);
  332.             LOCATE 22, 2: PRINT STRING$(78, " ");
  333.         ELSE
  334.             COLOR 0, 3
  335.         END IF
  336.          
  337.         COLOR 0, 3
  338.         yy% = CSRLIN: xx% = POS(1)
  339.         LOCATE 25, 76 - LEN(LTRIM$(STR$(ihits)))
  340.         PRINT LTRIM$(STR$(ihits));
  341.         LOCATE 25, 80 - LEN(LTRIM$(STR$(imaxalienforce - alienforce%)))
  342.         PRINT "0";
  343.         LOCATE yy%, xx%
  344.          
  345.         PCOPY 0, 3: REM save skin
  346.          
  347.         END SUB
  348.          
  349.         SUB marchdown (ialiencol, ialiencolstat, imotion, iresults)
  350.         COLOR 7, ibk
  351.         ileadingrow = ileadingrow + 1
  352.         ileadingmax = ileadingmax + 1
  353.         COLOR 7, ibk
  354.         FOR i = 1 TO imaxalienforce
  355.             IF RTRIM$(a(i)) <> "" THEN
  356.                 ialiencol = ialiencolstat + imotion
  357.                 LOCATE ileadingmax - (imaxalienforce * 2) + i * 2 - 1, lmargin%
  358.                 PRINT STRING$(screenwidth%, " ")
  359.                 LOCATE , ialiencol + INSTR(a(i), "-")
  360.                 iltalien(i) = POS(1)
  361.                 PRINT LTRIM$(RTRIM$(a(i)))
  362.             END IF
  363.         NEXT
  364.         LOCATE irow, icol
  365.         level = level - .025
  366.         IF ileadingrow = 22 THEN iresults = -2
  367.         END SUB
  368.          
  369.         DEFSNG I
  370.         SUB mdriver (ex%, KEY$, tankx%)
  371.         STATIC MOUSEACT%
  372.          
  373.         REM INITIATE MOUSE
  374.         IF MOUSEACT% = 0 OR ex% = -1 THEN
  375.             Registers.AX = 0: GOSUB CALLI
  376.             MOUSEACT% = 1
  377.         END IF
  378.          
  379.         IF ex% = 1 THEN
  380.             Registers.AX = 4: Registers.DX = 184: Registers.CX = 304
  381.             Registers.AX = 8: Registers.DX = 184: Registers.CX = 184
  382.             GOSUB CALLI
  383.             EXIT SUB
  384.         END IF
  385.          
  386.         Registers.AX = 3: GOSUB CALLI
  387.          
  388.         DX = Registers.DX
  389.         CX = Registers.CX
  390.         y% = DX \ 8 + 1: x% = CX \ 8 + 1
  391.          
  392.         REM MOUSE BUTTONS
  393.         LB% = Registers.BX AND 1
  394.         RB% = (Registers.BX AND 2) \ 2
  395.         MB% = (Registers.BX AND 4) \ 4
  396.          
  397.         IF LB% <> 0 THEN
  398.             KEY$ = CHR$(32)
  399.         ELSE
  400.             IF x% > tankx% THEN KEY$ = CHR$(0) + "M"
  401.             IF x% < tankx% THEN KEY$ = CHR$(0) + "K"
  402.         END IF
  403.         EXIT SUB
  404.          
  405.         CALLI:
  406.         CALL INTERRUPT(&H33, Registers, Registers)
  407.         RETURN
  408.          
  409.         END SUB
  410.          
  411.         DEFINT I
  412.         SUB movealiens (ialiencol, ialiencolstat, iresults)
  413.         STATIC imotion, imarch, imotiondir
  414.         IF inextrnd = -1 THEN inextrnd = 0: imotion = 0: imarch = 0: imotiondir = 0
  415.         irow = CSRLIN: icol = POS(1)
  416.         yy% = CSRLIN: xx% = POS(1)
  417.         PCOPY 0, 1: SCREEN 0, 0, 1, 0: LOCATE yy%, xx%, 0, 7, 0
  418.         IF imotiondir = 0 THEN imotion = imotion - 1 ELSE imotion = imotion + 1
  419.         COLOR 7, ibk
  420.          
  421.         FOR i = imaxalienforce TO 1 STEP -1
  422.             IF RTRIM$(a(i)) <> "" THEN
  423.                 i2 = i2 + 2
  424.                 SOUND 400, .03
  425.                 ialiencol = ialiencolstat + imotion
  426.                 LOCATE ileadingmax - (imaxalienforce - i) * 2, ialiencol + INSTR(a(i), "-")
  427.                 IF POS(1) = lmargin% THEN imarch = 1
  428.                 iltalien(i) = POS(1)
  429.                 IF imotiondir = 0 THEN
  430.                     PRINT LTRIM$(RTRIM$(a(i))); " "
  431.                 ELSE
  432.                     LOCATE , POS(1) - 1
  433.                     PRINT " "; LTRIM$(RTRIM$(a(i)))
  434.                 END IF
  435.                 IF ialiencol + LEN(RTRIM$(a(i))) = screenwidth% THEN imarch = -1
  436.             END IF
  437.         NEXT
  438.          
  439.         IF imarch = 1 THEN imotiondir = 1: CALL marchdown(ialiencol, ialiencolstat, imotion, iresults)
  440.         IF imarch = -1 THEN imotiondir = 0: CALL marchdown(ialiencol, ialiencolstat, imotion, iresults)
  441.         IF imarch = 0 THEN
  442.             IF ABS(TIMER - z2alienfire) > firerate THEN
  443.                 firerate = (INT(RND * 10) + 1) / 20
  444.                 IF iwait = 0 THEN CALL alienattack(ialiencolstat, ialiencol)
  445.             END IF
  446.         ELSE
  447.             imarch = 0
  448.         END IF
  449.         PCOPY 1, 0: SCREEN 0, 0, 0, 0
  450.         LOCATE irow, icol, 1, 7, 7
  451.         END SUB
  452.          
  453.         SUB mship (imothership)
  454.         STATIC x%, mov%, z4, mothership$
  455.          
  456.         yy% = CSRLIN: xx% = POS(1): COLOR 7, ibk
  457.         IF imothership = -1 THEN
  458.             imothership = 1
  459.             x% = lmargin%
  460.             mothership$ = CHR$(254) + CHR$(254) + "O" + CHR$(254) + CHR$(254)
  461.             mov% = 1
  462.         END IF
  463.          
  464.         IF ABS(TIMER - z4) > .05 THEN GOSUB mothership: z4 = TIMER: LOCATE yy%, xx%: EXIT SUB
  465.         ''IF ABS(TIMER - z2) > .2 THEN GOSUB bullets: z2 = TIMER
  466.         LOCATE yy%, xx%
  467.         EXIT SUB
  468.          
  469.         mothership:
  470.         IF x% + LEN(mothership$) = screenwidth% + lmargin% THEN mov% = -1 ELSE IF x% = lmargin% THEN mov% = 1
  471.         x% = x% + mov%
  472.         LOCATE topmargin%, x%
  473.         PRINT mothership$;
  474.         IF x% > 1 AND mov% = 1 THEN
  475.             LOCATE , POS(1) - LEN(mothership$) - 1: PRINT " ";
  476.         END IF
  477.         IF mov% = -1 THEN PRINT " ";
  478.         RETURN
  479.          
  480.         END SUB
  481.          
  482.         DEFINT A-H, J-Z
  483.         SUB qbide
  484.         PALETTE 2, 59
  485.         COLOR 15, 1
  486.         CLS
  487.          
  488.         COLOR 0, 7
  489.         LOCATE 1, 1
  490.         PRINT SPACE$(80)
  491.         LOCATE 1, 1: PRINT "   File  Edit  View  Search  Run  Debug  Calls  Options                   Help"
  492.          
  493.         COLOR 7, 1
  494.          
  495.         LOCATE 2, 1: PRINT CHR$(218)
  496.         LOCATE 2, 2: PRINT STRING$(78, CHR$(196))
  497.         LOCATE 2, 80: PRINT CHR$(191)
  498.          
  499.         LOCATE 2, 76: PRINT CHR$(180)
  500.         LOCATE 2, 78: PRINT CHR$(195)
  501.          
  502.         COLOR 1, 7
  503.         LOCATE 2, 77: PRINT CHR$(24)
  504.         LOCATE 2, 36: PRINT " Untitled "
  505.          
  506.         COLOR 7, 1
  507.         FOR Rows = 3 TO 24
  508.             LOCATE Rows, 1: PRINT CHR$(179);
  509.             LOCATE Rows, 80: PRINT CHR$(179);
  510.         NEXT Rows
  511.          
  512.         LOCATE 22, 1: PRINT CHR$(195)
  513.         LOCATE 22, 80: PRINT CHR$(180)
  514.         LOCATE 22, 2: PRINT STRING$(78, CHR$(196))
  515.         LOCATE 22, 35
  516.         PRINT " Immediate "
  517.          
  518.         COLOR 0, 7
  519.         LOCATE 21, 3: PRINT STRING$(76, CHR$(176))
  520.         LOCATE 21, 2: PRINT CHR$(27)
  521.         LOCATE 21, 3: PRINT CHR$(219)
  522.         LOCATE 21, 79: PRINT CHR$(26)
  523.         FOR Rows = 4 TO 19
  524.             LOCATE Rows, 80: PRINT CHR$(176)
  525.         NEXT Rows
  526.         LOCATE 3, 80: PRINT CHR$(24)
  527.         LOCATE 4, 80: PRINT CHR$(219)
  528.         LOCATE 20, 80: PRINT CHR$(25)
  529.          
  530.         COLOR 0, 3: LOCATE 25, 1: PRINT " <Shift+F1=Help> <F6=Window> <F2=Subs> <F5=Run> <F8=Step> ";
  531.         LOCATE 25, 59: PRINT SPACE$(4);
  532.         COLOR 0, 3
  533.         LOCATE 25, 63: PRINT CHR$(179);
  534.         LOCATE 25, 64: PRINT SPACE$(6);
  535.         LOCATE 25, 68: PRINT "C  00001:001 ";
  536.          
  537.         END SUB
  538.          
  539.         DEFSNG A-H, J-Z
  540.         SUB reprintaliens (ialiencol, ihitaliens, iresults, i4, i, imothership)
  541.         IF ihitaliens > 0 THEN
  542.             ihits = ihits + 1
  543.             IF (ihits + 15) MOD 20 = 0 AND imothership = 0 THEN imothership = -1
  544.             LOCATE bullet%(i), lmargin%: PRINT SPACE$(screenwidth%);
  545.             iltalien(i4) = POS(1)
  546.          
  547.             IF RTRIM$(a(i4)) = "" THEN
  548.                 alienforce% = alienforce% - 1
  549.                 IF alienforce% = 0 THEN iresults = iresults + 1
  550.                 IF bullet%(i) = ileadingrow THEN ileadingrow = ileadingrow - 2
  551.             ELSE
  552.                 LOCATE bullet%(i), ialiencol + INSTR(a(i4), "-"): PRINT LTRIM$(RTRIM$(a(i4)))
  553.             END IF
  554.         ELSE
  555.             i2 = ABS(ihitaliens)
  556.             LOCATE iy(i2), ix(i2)
  557.             PRINT " ";: iy(i2) = 0
  558.             ia(i2) = 0
  559.             LOCATE irow, icol
  560.             SOUND 1000, .5
  561.         END IF
  562.          
  563.         ihitaliens = 0
  564.         bullet%(i) = -bullet%(i)
  565.          
  566.         COLOR 0, 3
  567.         yy% = CSRLIN: xx% = POS(1)
  568.         LOCATE 25, 76 - LEN(LTRIM$(STR$(ihits)))
  569.         PRINT LTRIM$(STR$(ihits));
  570.         LOCATE 25, 80 - LEN(LTRIM$(STR$(imaxalienforce - alienforce%)))
  571.         PRINT LTRIM$(STR$(imaxalienforce - alienforce%));
  572.         LOCATE yy%, xx%
  573.         COLOR 7, ibk
  574.         END SUB

Want to learn how to write code on cave walls? https://www.tapatalk.com/groups/qbasic/qbasic-f1/

Offline johnno56

  • Forum Resident
  • Posts: 1270
  • Live long and prosper.
    • View Profile
Re: My first game - Very simple Space Arcade Game
« Reply #2 on: April 14, 2021, 02:42:42 am »
I like it... Best part was that I completed it 'without' dying!! YES!!
Logic is the beginning of wisdom.

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: My first game - Very simple Space Arcade Game
« Reply #3 on: April 14, 2021, 01:26:01 pm »
(Going by video) Amazing for first game, nice!

Offline TempodiBasic

  • Forum Resident
  • Posts: 1792
    • View Profile
Re: My first game - Very simple Space Arcade Game
« Reply #4 on: April 21, 2021, 05:13:44 pm »
Cool enough to wait for an improved version with more options to play.
Well done.
Programming isn't difficult, only it's  consuming time and coffee

Offline SierraKen

  • Forum Resident
  • Posts: 1454
    • View Profile
Re: My first game - Very simple Space Arcade Game
« Reply #5 on: April 21, 2021, 05:39:17 pm »
Pretty cool game, I watched the video. If you make another version, I suggest adding a boss after a few levels. :) Maybe reducing the size of the ship and make the enemy bullets faster. :) Very cool game though.