creating named "arrays"

Blitz3D Forums/Blitz3D Beginners Area/creating named "arrays"

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

Ok, here's what i conjured up. It might not be what your after though:

Graphics 800,600
SetBuffer BackBuffer()

Const box_size = 32
Dim boxes(10,10) ; second dimension holds x,y co-ords - 0 = x, 1 = y

Global box = CreateImage(box_size,box_size)
SetBuffer ImageBuffer(box)
	Rect 0,0,box_size,box_size
	Color 50,50,50
	Rect 0,0,box_size,box_size,0
SetBuffer BackBuffer()


Type link
	Field from_x,from_y
	Field to_x, to_y
	Field complete ; 1 = link is complete. 0 = link is waiting for destination co-ords.
End Type


Global start_draw_x = 100
Global start_draw_y = 100
Global mode = 0 ; 0 = first pick
				; 1 = next pick

				
Global first_click = 1

Global pos_x,pos_y

While Not KeyHit(1)



	If MouseHit(1) Then
		If mode = 0 Then ; if first click basically
			If check_click(MouseX(),MouseY()) = True Then
				set_start_point(pos_x, pos_y)
				mode = 1
			End If
		ElseIf mode = 1 Then
			If check_click(MouseX(),MouseY()) = True Then
				add_link(pos_x, pos_y)
			End If
		End If
	End If
	
	draw_boxes()
	draw_links()
	Flip
	
Wend

Function draw_boxes()


	For loopx = 0 To 10
		For loopy = 0 To 10
			DrawImage box, start_draw_x + (loopx*box_size), start_draw_y + (loopy*box_size)
		Next
	Next
	
End Function

Function draw_links()



	For l.link = Each link
	
		If l\complete = 1 Then
		
			Color 100,100,255

			; calculate pixel co-ords. Add box_size * 0.5 so links come from the centre of boxes.
			start_x = start_draw_x + (l\from_x * box_size) + (box_size*0.5)
			start_y = start_draw_y + (l\from_y * box_size) + (box_size*0.5)
			finish_x = start_draw_x + (l\to_x * box_size) + (box_size*0.5)
			finish_y = start_draw_y + (l\to_y * box_size) + (box_size*0.5)
			
			Line start_x,start_y,finish_x,finish_y
			
		Else ; draw a marker for the last position
			
			Color 0,0,0
			start_x = start_draw_x + (l\from_x * box_size) + (box_size*0.5)
			start_y = start_draw_y + (l\from_y * box_size) + (box_size*0.5)
			Oval start_x-1, start_y-1, 2,2
			
		End If
				
	
	Next
	
End Function


Function check_click(x,y)

	For loopx = 0 To 10
		For loopy = 0 To 10
			If RectsOverlap(x,y,1,1, start_draw_x + (loopx*box_size) , start_draw_y + (loopy*box_size), box_size,box_size) Then
				pos_x = loopx
				pos_y = loopy
				Return True
			End If
		Next
	Next
	
End Function

Function set_start_point(x,y)

	l.link = New link
	l\from_x = x
	l\from_y = y
	l\complete = 0
	
End Function

Function add_link(x,y)

	l.link = Last link
	
	l\to_x = x
	l\to_y = y
	l\complete = 1
	
	l.link = New link
	
	l\from_x = x
	l\from_y = y
	l\complete = 0
	
End Function


It basically start with the mode set to 0. This is a one time only event. Once you have clicked to set a position, it creates a type and inputs the start co-ords. For every other click, it inputs the end co-ord into the type object, and create a new link, type object, with the same end co-ords as the last type. This is done in the "add_link" function.