Converting QBasic Code to Blitz 3D

Blitz3D Forums/Blitz3D Programming/Converting QBasic Code to Blitz 3D

WedgeBob(Posted 2005) [#1]
Hi, I was wondering how to convert an old QB program into B3D, because right now, B3D appears to be the form of the language of choice for me when it comes to BASIC. However, looking at programs in hindsight, I'd like to bring a program back to life, but trying to find equivalent code for B3D can be a nightmare. Here's the old QB code below:

SCREEN 12
CLS

RANDOMIZE TIMER
FOR dots = 1 TO 2000
colr = INT(RND*16)
col = INT(RND*480)
row = INT(RND*640)
PSET (col, row), colr
NEXT dots

FOR cnt = 1 to 60
centerCol = INT(RND*639) + 1
centerRow = INT(RND*479) + 1
radius = INT(RND*100) + 1
CIRCLE (centerCol, centerRow), radius
NEXT cnt

COLOR 12
LOCATE 12, 34
PRINT "Space FX v1.0"
LOCATE 13, 28
PRINT "(c)2005, Robert A. Morin"

FOR i = 1 TO 35
freq = INT(RND*2700) + 500
dur = INT(RND*3) + 1
SOUND freq, dur
NEXT i

FOR freq = 800 to 400 STEP -7
SOUND freq, 1
SOUND 900 - freq, 1
NEXT freq

COLOR 10
LOCATE 25, 1

INPUT "Press <ENTER> to Quit Demo: ", ent$
END

I was wondering how to convert this into the Blitz 3D environment, since I know that QBasic's code structure is far different, since QB was DOS-based, and used the PC Speaker, which Windows doesn't do, obviously, and this code is well over 10 years old.


big10p(Posted 2005) [#2]
C'mon Bob. Surely you can convert this code yourself - it's very basic (ho-ho). :)

If you're new to blitz then converting it would be a good exercise. You'll have to load a sound effect in place of the old SOUND command, of course.


WolRon(Posted 2005) [#3]
Here's a start:
Graphics 640, 480
Cls

Dim colors(16,2)
For iter = 1 To 16
	For byte = 0 To 2
		Read colors(iter, byte)
	Next
Next

SeedRnd MilliSecs()
For dots = 1 To 2000
	colr = Rnd(16)
	col = Rnd(480)
	row = Rnd(640)
	Color colors(colr,0), colors(colr,1), colors(colr,2)
	Plot row, col
Next

For cnt = 1 To 60
	centerCol = Rnd(639) + 1
	centerRow = Rnd(479) + 1
	radius = Rnd(100) + 1
	CIRCLE (centerCol, centerRow, radius)
Next

Color colors(12,0), colors(12,1), colors(12,2)
Locate 12*8, 34*8
Print "Space FX v1.0"
Locate 13*8, 28*8
Print "(c)2005, Robert A. Morin"

;For i = 1 To 35
;	freq = Int(Rnd*2700) + 500
;	dur = Int(Rnd*3) + 1
;	SOUND freq, dur
;Next

;For freq = 800 To 400 Step -7
;	SOUND freq, 1
;	SOUND 900 - freq, 1
;Next

Color colors(10,0), colors(10,1), colors(10,2)
Locate 25*8, 1*8

ent$ = Input("Press <ENTER> to Quit Demo: ")
End

;CIRCLE COMMAND
Function CIRCLE(xCenter, yCenter, rad)
	x = 0
	y = rad

	Plot xCenter + x, yCenter + y
	Plot xCenter - x, yCenter + y
	Plot xCenter + x, yCenter - y
	Plot xCenter - x, yCenter - y
	Plot xCenter + y, yCenter + x
	Plot xCenter - y, yCenter + x
	Plot xCenter + y, yCenter - x
	Plot xCenter - y, yCenter - x

	p = 1 - rad
	While x < y
		If p < 0
			x = x + 1
		Else
			x = x + 1
			y = y - 1
		EndIf

		If p < 0
			p = p + (x Shl 1) + 1
		Else
			p = p + ((x - y) Shl 1) + 1
		EndIf

		Plot xCenter + x, yCenter + y
		Plot xCenter - x, yCenter + y
		Plot xCenter + x, yCenter - y
		Plot xCenter - x, yCenter - y
		Plot xCenter + y, yCenter + x
		Plot xCenter - y, yCenter + x
		Plot xCenter + y, yCenter - x
    	Plot xCenter - y, yCenter - x
	Wend
End Function

;color data
Data 0,0,0		;black
Data 0,0,255	;blue
Data 0,255,0	;green
Data 0,255,255	;cyan
Data 255,0,0	;red
Data 255,0,255	;magenta
Data 128,64,0	;brown
Data 192,192,192;white
Data 128,128,128;gray
Data 128,128,255;light blue
Data 128,255,128;light green
Data 128,255,255;light cyan
Data 255,128,128;light red
Data 255,128,255;light magenta
Data 255,255,0	;yellow
Data 255,255,255;intense white



big10p(Posted 2005) [#4]
What the??? There is an Oval command to draw circles, Wolron. Why over-complicate things?


WolRon(Posted 2005) [#5]
Ah yes, the elusive Oval command. Forgot about that one. Can't say I've used it recently...

Works all the same...

Updated to satisfy BIG10p:
Graphics 640, 480
Cls

Dim colors(16,2)
For iter = 1 To 16
	For byte = 0 To 2
		Read colors(iter, byte)
	Next
Next

SeedRnd MilliSecs()
For dots = 1 To 2000
	colr = Rnd(16)
	col = Rnd(480)
	row = Rnd(640)
	Color colors(colr,0), colors(colr,1), colors(colr,2)
	Plot row, col
Next

For cnt = 1 To 60
	centerCol = Rnd(639) + 1
	centerRow = Rnd(479) + 1
	radius = Rnd(100) + 1
	Oval centerCol-radius, centerRow-radius, radius*2, radius*2, 0
Next

Color colors(12,0), colors(12,1), colors(12,2)
Locate 12*8, 34*8
Print "Space FX v1.0"
Locate 13*8, 28*8
Print "(c)2005, Robert A. Morin"

;For i = 1 To 35
;	freq = Int(Rnd*2700) + 500
;	dur = Int(Rnd*3) + 1
;	SOUND freq, dur
;Next

;For freq = 800 To 400 Step -7
;	SOUND freq, 1
;	SOUND 900 - freq, 1
;Next

Color colors(10,0), colors(10,1), colors(10,2)
Locate 25*8, 1*8

ent$ = Input("Press <ENTER> to Quit Demo: ")
End


;color data
Data 0,0,0		;black
Data 0,0,255	;blue
Data 0,255,0	;green
Data 0,255,255	;cyan
Data 255,0,0	;red
Data 255,0,255	;magenta
Data 128,64,0	;brown
Data 192,192,192;white
Data 128,128,128;gray
Data 128,128,255;light blue
Data 128,255,128;light green
Data 128,255,255;light cyan
Data 255,128,128;light red
Data 255,128,255;light magenta
Data 255,255,0	;yellow
Data 255,255,255;intense white



VP(Posted 2005) [#6]
Except now your circles aren't centered about the x and y coordinates ;)


WolRon(Posted 2005) [#7]
Corrected the above code so that they are.

Geez, I try to be helpful, and just keep getting critiqued...


big10p(Posted 2005) [#8]
Sorry WolRon. I didn't mean to sound so critical. I should have used a smilie... and not posted after consuming alcohol. :P


VP(Posted 2005) [#9]
I was just extracting the urine ;)