This example shows a simple starfield by S.Devulder for ugBasic. Modified by M.Spedaletti.
source
compile
sandbox
issues?
back to examples
CONST numr = 1000 : REM num of random position in pool CONST nums = 20 : REM number of stars in starfield CONST speed = 8 : REM speed of stars (smaller = faster) CONST clock = 50 : REM Number of TI per second CONST bg = BLACK : REM background color CONST fg = WHITE : REM forteground color DIM xrnd AS POSITION (numr+1) DIM yrnd AS POSITION (numr+1) DIM xtab AS POSITION (nums+1) DIM ytab AS POSITION (nums+1) BITMAP ENABLE (320,200,2) REM BITMAP ENABLE(320,200,4) REM BITMAP ENABLE(160,200,16) CLS bg COLOR BORDER bg REM init pool of random position (faster than calling RND over and over again) FOR i=0 TO numr xrnd(i) = RND(SCREEN WIDTH) yrnd(i) = RND(SCREEN HEIGHT) NEXT irnd = 0 REM initial stars FOR i=0 TO nums ' REPEAT : c = RND(SCREEN COLORS) : UNTIL c<>bg xtab(i) = RND(SCREEN WIDTH) ytab(i) = RND(SCREEN HEIGHT) PLOT xtab(i),ytab(i),fg NEXT VAR x0 AS SIGNED WORD = (SCREEN WIDTH / 2) VAR y0 AS SIGNED WORD = (SCREEN HEIGHT / 2) VAR x AS SIGNED WORD = 0 VAR y AS SIGNED WORD = 0 VAR z AS SIGNED WORD = 0 VAR t AS SIGNED WORD = 0 VAR dx AS SIGNED WORD = 0 VAR dy AS SIGNED WORD = 0 TI=0: frames = 0 DO INC frames PLOT x0,y0,WHITE IF TI>=clock THEN LOCATE 0,0 : PRINT frames;" "; frames = 0 TI = 0 ENDIF FOR i=0 TO nums z = xtab(i) x = z + (z - x0)/speed t = ytab(i) y = t + (t - y0)/speed IF (((x OR y)<0) OR (y>=SCREEN HEIGHT)) OR (x>=SCREEN WIDTH) THEN REPEAT x = xrnd(irnd) y = yrnd(irnd) ADD irnd,1,0 TO numr REM avoid fixed stars, these are the ones where REM ((x-x0)/speed)==0 or ((y-y0)/speed)==0 REM which result in the folowing bitwise AND expression UNTIL ((x-x0)/speed) AND ((y-y0)/speed) ENDIF xtab(i) = x ytab(i) = y PLOT z,t,bg PLOT x,y,fg 'PLOT x,y,bg NEXT WAIT VBL joy = JOY(0) : dx = 0 : dy = 0 IF joy HAS BIT LEFT THEN : DEC dx : ENDIF IF joy HAS BIT RIGHT THEN : INC dx : ENDIF IF joy HAS BIT UP THEN : DEC dy : ENDIF IF joy HAS BIT DOWN THEN : INC dy : ENDIF IF (dx OR dy)<>0 THEN IF joy HAS BIT FIRE THEN : MUL dx,4 : MUL dy,4 : ENDIF PLOT x0,y0,bg ADD x0,dx,0 TO SCREEN WIDTH ADD y0,dy,0 TO SCREEN HEIGHT ENDIF LOOP
The instructions here refer to compiling the example from the command line. For Microsoft Windows
users we suggest using UGBASIC-IDE, which allows
you to download and compile each single example with just one click.
Are instructions for your specific home computer / console missing? First of all, check if your computer
is supported by clicking here. If so, since ugBASIC is a language which does not provide abstractions, it is possible
that this example will not work on your target. If you think this is an issue, please click here.
In order to compile the example, type this command on the command line:
Linux
ugbc.cpc -O dsk -o contrib_starfield.dsk contrib_starfield.bas
Windows
ugbc.cpc.exe -O dsk -o contrib_starfield.dsk contrib_starfield.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.c128 -O prg -o contrib_starfield.prg contrib_starfield.bas
Windows
ugbc.c128.exe -O prg -o contrib_starfield.prg contrib_starfield.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.pc128op -O k7 -o contrib_starfield.k7 contrib_starfield.bas
Windows
ugbc.pc128op.exe -O k7 -o contrib_starfield.k7 contrib_starfield.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
In order to compile the example, type this command on the command line:
Linux
ugbc.to8 -O k7 -o contrib_starfield.k7 contrib_starfield.bas
Windows
ugbc.to8.exe -O k7 -o contrib_starfield.k7 contrib_starfield.bas
For Microsoft Windows users we suggest using UGBASIC-IDE, which allows
you to download and compile this example with just one click.
If you have found a problem trying to run this example, if you think there is a bug or, more
simply, you would like it to be improved, open an issue for this example on GitHub.
Thank you!
open an issue
BACK TO EXAMPLES