Posts: 2,186
Threads: 222
Joined: Apr 2022
Reputation:
104
(11-08-2022, 05:47 PM)SMcNeill Wrote: (11-08-2022, 04:11 PM)Pete Wrote: Nice. Without it, I'd probably just code:
Code: (Select All) INPUT CarX.position, CarY.position
speedx = 1
IF CarX.position - CarY.position THEN CarX.position = CarX.position + (CarX.position - CarY.position) / ABS(CarX.position - CarY.position) * speedx
PRINT CarX.position
SLEEP
CLS
RUN
Aye, you can always code around notusing it. Most commands are like that. Don't like _PRINTSTRING? Use LOCATE, PRINT, CSRLIN, and POS to duplicate its behavior.
One thing you have to admit though, comparing our two codes -- yours has a lot more to process going on under the hood. In a game, where FPS matters, that might might a world of difference if inside some inner loop.
Agreed. I do like having keywords to handle things but I also like figuring out my own "functions" to make things I want happen. You have to admit the way I used that IF/THEN to avoid a division by zero error, in the code above, was PFC.
Pete
Pretty fine coding... Sure, let's go with that.
Posts: 3,984
Threads: 178
Joined: Apr 2022
Reputation:
222
I had some rounding code fixed for negative numbers with Sgn() in SmallBASIC board at Syntax Bomb this is QB64 version:
Code: (Select All) $Console:Only
For i = 1 To 100
r = Rnd * 200 - 100
Print r, roundDP$(r, 0), roundDP$(r, 1), roundDP$(r, 2), roundDP$(r, 3)
Next
Function roundDP$ (num, digits) ' fixed with sgn 2022-11-08
Dim s$, dot
s$ = _Trim$(Str$(num + (Sgn(num) * .5) * 10 ^ -digits))
dot = InStr(s$, ".")
If dot Then roundDP$ = Mid$(s$, 1, dot + digits) Else roundDP$ = s$
End Function
Should be OK if stay out of exponential notation.
b = b + ...
Posts: 2,186
Threads: 222
Joined: Apr 2022
Reputation:
104
11-08-2022, 08:28 PM
(This post was last modified: 11-08-2022, 09:42 PM by Pete.)
That's a good one, too.
It would otherwise take...
Code: (Select All) FUNCTION roundDP$ (num, digits) ' fixed with sgn 2022-11-08
DIM s$, dot
SELECT CASE num
CASE IS < 0
s$ = _TRIM$(STR$(num - .5 * 10 ^ -digits))
CASE 0
s$ = _TRIM$(STR$(num * 10 ^ -digits))
CASE IS > 0
s$ = _TRIM$(STR$(num + .5 * 10 ^ -digits))
END SELECT
dot = INSTR(s$, ".")
IF dot THEN roundDP$ = MID$(s$, 1, dot + digits) ELSE roundDP$ = s$
END FUNCTION
Pete
Posts: 3,984
Threads: 178
Joined: Apr 2022
Reputation:
222
@Pete check case > 0 in otherwise
b = b + ...
Posts: 2,186
Threads: 222
Joined: Apr 2022
Reputation:
104
Feeling better but still missing stuff. Noticed it immediately. Forgot to change sign after paste. Edited.
Thanks,
Pete
Posts: 3,984
Threads: 178
Joined: Apr 2022
Reputation:
222
Yeah bus stations will do that ;-))
b = b + ...
Posts: 2,186
Threads: 222
Joined: Apr 2022
Reputation:
104
I'd say my wife has a frying pan with my name on it... but hey, we're pretty modern folks. The one she uses has facial recognition.
Pete
Posts: 276
Threads: 14
Joined: Apr 2022
Reputation:
27
I've found SGN to frequently be quite useful. One of my better success stories in the use of SGN was this little snippet from a role playing character generator.
Code: (Select All) FUNCTION Bonus% (mode AS INTEGER, stat AS INTEGER, PCin AS INTEGER)
' Returns the multiplier for characteristic based attributes.
' as per the following table.
' Characteristic Value {char(stat, PCin).value}
' 1-4 5-8 9-12 13-16 17-20 each +4
'Mode
'Pri [ 1] -2 -1 0 1 2 +1
'Pri-[-1] 2 1 0 -1 -2 -1
'Sec [ 2] -1 0 0 0 1 +1
'Sec-[-2] 1 0 0 0 -1 -1
' Use straight for hit points and multiply by 5 for skill category modifiers.
' mode: 1= primary 2= secondary -1= negative primary -2= negative secondary
' stat passes the index number of the characteristic in question
' PCin passes the PC index usually ActPC but also a loop control from
' Delete_PC removal routine
v% = (_CEIL(char(stat, PCin).value / 4) - 3) * SGN(mode)
Bonus% = v% - (ABS(mode) - 1) * SGN(v%)
END FUNCTION 'Bonus%
While it doesn't look like much to a casual observer, those two equations essentially replaced 16 lines of SELECT CASE block. Oh yes, and _CEIL was new to me when this was written too.
DO: LOOP: DO: LOOP
sha_na_na_na_na_na_na_na_na_na:
Posts: 2,186
Threads: 222
Joined: Apr 2022
Reputation:
104
And stirring the pot producing yet another beauty!
+ 1
Pete
|