09-11-2025, 04:39 PM
@dbox Yeah, I mentioned I recalled _NewImage could be used in a previous post, but I'd have to look up how again. Thanks for saving me the trouble!
Now not for me, but if you are interested in using this code to further your QBJS project, I think this counter code might help. What I noticed is the rows don't always stay lined up, but even when the do the explosion sounds in QBJS did not coincide with the removal of the ship that was hit. So I put a counter for the sounds that indicate hits, along with a counter of the number of ships in the cumulative arrays. I put the display on top, and 40 should always be the last number if it's working correctly. Run it in QB64 and you will see that is true, but it's way off in QBJS, which indicates to me there is more going on with the MID$() incompatibility.
Here is the modified code. I didn't want to save it to your server, to avoid any confusion.
Pete
Now not for me, but if you are interested in using this code to further your QBJS project, I think this counter code might help. What I noticed is the rows don't always stay lined up, but even when the do the explosion sounds in QBJS did not coincide with the removal of the ship that was hit. So I put a counter for the sounds that indicate hits, along with a counter of the number of ships in the cumulative arrays. I put the display on top, and 40 should always be the last number if it's working correctly. Run it in QB64 and you will see that is true, but it's way off in QBJS, which indicates to me there is more going on with the MID$() incompatibility.
Here is the modified code. I didn't want to save it to your server, to avoid any confusion.
Code: (Select All)
_Title "Pete's Mini Space Invaders For QBJS"
Screen _NewImage(40, 20, 0)
Dim _Width, _Height: _Width = 40: _Height = 20 'QBJS trickery to redefine _Width and _Height as variables ' REMARK OUT THIS LINE IF RUNNING IN QB64.
bit = 1: TopRow = 5: s$ = "A A A A A A A A": For i = 0 To 4: a$(i) = s$: Next
trail = _Width \ 2 - Len(a$) \ 2: lag = .35: xbase = _Width \ 2: RowHeight = 5: terminate = _Height - 1
Do
' Added Counter----------------------------------------------------------
count = 0
For i = 0 To 4
For j = 1 To 8
If Mid$(a$(i), j * 2 - 1, 1) = "A" Then count = count + 1
Next
Next
'-----------------------------------------------------------------------------
Cls: Locate _Height, xbase: Print Chr$(234);: Sound 500, .1
Locate 1, 2: Print "Ships ="; count; " Bangs ="; explosions; " Proof 40 ="; count + explosions
For i = 0 To RowHeight - 1
Locate TopRow + i, trail + l: Print RTrim$(Mid$(a$(i), l + 1));
Next
If TopRow - 1 + RowHeight = terminate Then Locate 3, 2: Print "GAME OVER - YOU LOST!": _Delay 5: End
z1 = Timer
Do
If yfire Then
If Abs(z2 - Timer) > .1 Then
z2 = Timer
If Screen(yfire, xfire) = 24 Then Locate yfire, xfire: Print " ";
yfire = yfire - 1: If yfire < TopRow Then
yfire = 0
Else
Locate yfire, xfire
If Screen(yfire, xfire) = 65 Then
RowCheck = 0: l = 0: r = 0
Mid$(a$(yfire - TopRow), xfire - trail + 1, 1) = " ": Sound 1000, .5: yfire = 0: explosions = explosions + 1 ' ADDED EXPLOSIONS VARIABLE.
If LTrim$(a$(0) + a$(1) + a$(2) + a$(3) + a$(4)) = "" Then Cls: Locate 3, 2: Print "GAME OVER - YOU WON!": _Delay 5: End
For i = 4 To 0 Step -1
If LTrim$(a$(i)) = "" And RowCheck = 0 Then RowHeight = i + 1 Else RowCheck = 1
If Len(RTrim$(a$(i))) > r Then r = Len(RTrim$(a$(i)))
If Len(LTrim$(a$(i))) > l Then l = Len(LTrim$(a$(i)))
Next
r = Len(s$) - r: l = Len(s$) - l
Else
Print Chr$(24);
End If
End If
End If
End If
Select Case _KeyHit
Case 19200
If xbase > 1 And restrict = 0 Then Locate _Height, xbase: Print " ";: xbase = xbase - 1: restrict = 1: Locate _Height, xbase: Print Chr$(234);
Case 19712
If xbase < _Width And restrict = 0 Then Locate _Height, xbase: Print " ";: xbase = xbase + 1: restrict = 1: Locate _Height, xbase: Print Chr$(234);
Case -19200, -19712
restrict = 0: _KeyClear
Case 32
If yfire = 0 Then Locate _Height - 1, xbase: Print Chr$(24);: yfire = _Height - 1: xfire = xbase
End Select
If Abs(z1 - Timer) > lag Then z1 = Timer: Exit Do
_Limit 60
Loop
If trail + Len(s$) - r > _Width And bit = 1 Or trail = 1 - l And bit = -1 Then bit = -bit: TopRow = TopRow + 1: lag = lag - .025 Else trail = trail + bit
Loop
Pete

