Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Control codes
#1
Hi
I'm new here, so excuse me if anyone asked this before. I tryed to search for it but didnt find anything.

So i'm playing with ZX basic for last week or so and i was doing some of my usual tests.
In one of them i was trying to print out a block of characters with random ink and color. And because making a loop that will print it character by character is rather slow, i tryed to be clever. It didn't work ^_^

So my problem:

i wanted to make a string variable with control codes that i would print out. And sure enough if i do

p$="\{i5}X"
print p$

it work just fine.


Problem is when i want to put some randomness to it and do something like

i$=str(int(rnd*7))
p$="\{i"+i$+"}X"
print p$

it outputs

\{i2}X

instead of colored X. In my mind, it should work...
Am i doing something wrong?

Also, implementing AT as \{ax,y} like it works in BASin would be nice ^_^

Thanks for your help
Reply
#2
BASIN has its own codes. ZX BASIC is a compiler, so it tries to guess some (a few of them!) at compile time. NOT at runtime.
It's much faster if you use the ink code which is CHR(16) (Read here).
So instead of
Code:
p$="{\i" + x$ + "}X"
use
Code:
p$=CHR$(16) + i$ + "X";

Actually, CHR$ is optimized for several chars at once. So CHR$(x) + CHR$(y) + CHR$(z) + ... can be written as CHR$(x, y, z, ...). Example:
Code:
p$ = CHR$(16, INT(RND * 7), CODE "X")
Give it a try. Also, in this case, you can ignore the INT( )... because CHR$ will take only INT args and do it for you.
Tell me is this work for you :roll:
Reply
#3
Thanks, that was really helpful. I guess i wasnt coding in speccy basic for quite some time, otherwise i woul'd realise.
Will give it a go.
Reply
#4
Ok it works.
Well what works i when i use
Code:
x$ = chr(17) + str(p) + "O"
print x$
I also tryed to use chr(22) which is supposed to be at and it kinda works
there i actually use
Code:
x$ = chr(22,5,5) + "O"
print x$
and yes, it prints on 6th row, but in the 1st column...

Probably doing something badly again...
Thanks for your help anyway, gotta figure out what to use this for now ^_^
Reply
#5
That might be a bug. I'll check it, but
CHR$(22, 5, 5) + "0" should be equivalent to PRINT AT 5, 5; "0"
Reply
#6
That would be awsome.
I downloaded the newest build (1.4.0s1967) and it still does that to me.
I often use thease to generate a block of "graphics" i can place on the screen fairly quickly ^_^
Reply
#7
rikokun Wrote:That would be awsome.
I downloaded the newest build (1.4.0s1967) and it still does that to me.
I often use thease to generate a block of "graphics" i can place on the screen fairly quickly ^_^
Okay, I think I fixed it. Download build (1.4.0s1968)
Note: I will discontinue support for .exe files, so try to download the .py version whenever possible.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)