Deal Or No Deal

Blitz3D Forums/Blitz3D Beginners Area/Deal Or No Deal

Destroyer(Posted 2006) [#1]
Im updating my version of Deal or No deal to make it look a bit better graphic wise.

I posted the original on CodersWorkshop but that don't exist any more.

The original was more text based(user input via keyboard).
This version will be mouse based.


AppTitle "DEAL OR NO DEAL"

init_graphics()

Global box_state=0

Dim box(22)

;-----------------------------------------------------------------------
;Main Loop
;-----------------------------------------------------------------------

While Not KeyHit(1)

	ClsColor 55,55,55
	Cls
	
	display_boxes()

	draw_pointer()
	
	Line 0,40,640,40
	Line 0,400,640,400
	
	Text 5,5,"Box Picked > "+box_state
	
	Flip
	
Wend

End

;-----------------------------------------------------------------------
;Functions
;-----------------------------------------------------------------------

Function display_boxes()

		Restore boxdata
		
		For n = 1 To 22

		Read id$,boxNo$,x,y,w,h
		If id$="" Then Exit
	
			Color 255,0,0 ;top
			Rect x,y,w,h
		
			Color 55,0,0 ;bottom
			Rect x+1,y+1,w,h
		
			Color 200,0,0 ;middle
			Rect x+1,y+1,w-1,h-1,1
		
			Color 255,255,255
			Text x+3,y,boxNo$
			
			check_box(id$,boxNo,x,y,w,h)

		Next
	
End Function

;-----------------------------------------------------------------------

Function check_box(id$,boxNo$,x,y,w,h)
	
	If MouseDown(1)
	
		If RectsOverlap( MouseX(), MouseY(), 1, 1, x,y,w+1,h+1 ) Then
			
			box_state=id$
			
			If box_state=id$
				Color 55,55,55 
				Rect x,y,w+1,h+1,1
			End If
		
		End If
		
	End If
	
End Function

;-----------------------------------------------------------------------

Function draw_pointer()

	Color 255,255,255
	Oval MouseX(),MouseY(),4,4,1
	
End Function

;-----------------------------------------------------------------------

Function init_graphics()

	Graphics3D 640,480,16,2
	SetBuffer BackBuffer()
	SeedRnd MilliSecs()
	HidePointer
	
End Function

;-----------------------------------------------------------------------
;Data
;-----------------------------------------------------------------------

.boxdata
Data "1","Box  1",10,100,55,13
Data "2","Box  2",10,120,55,13
Data "3","Box  3",10,140,55,13
Data "4","Box  4",10,160,55,13
Data "5","Box  5",10,180,55,13
Data "6","Box  6",10,200,55,13
Data "7","Box  7",10,220,55,13
Data "8","Box  8",10,240,55,13
Data "9","Box  9",10,260,55,13
Data "10","Box 10",10,280,55,13
Data "11","Box 11",10,300,55,13
Data "12","Box 12",575,100,55,13
Data "13","Box 13",575,120,55,13
Data "14","Box 14",575,140,55,13
Data "15","Box 15",575,160,55,13
Data "16","Box 16",575,180,55,13
Data "17","Box 17",575,200,55,13
Data "18","Box 18",575,220,55,13
Data "19","Box 19",575,240,55,13
Data "20","Box 20",575,260,55,13
Data "21","Box 21",575,280,55,13
Data "22","Box 22",575,300,55,13
Data "","",0,0,0,0

;-----------------------------------------------------------------------


The problem ive got is that the boxes don't deleteafter i have clicked on them.

Can any body offer help on this problem

Thanks
Destroyer :)


b32(Posted 2006) [#2]
The simplest way to go would be setting box(box_state) to "1" after clicking on a box.
Then, when drawing the boxes, after checking if id$ = "", check if the box(n) = 0 before drawing the box.
Another approach would be reading the data only once at the start of the program, and create a type for the boxes. You can than delete a instance from the type to delete a box.


Destroyer(Posted 2006) [#3]
Thanks for the reply bram32.

I thought about using types for the boxes. Will try your other ideas out


Thanks
Destroyer :)


Destroyer(Posted 2006) [#4]
Ok im using types now but i'm still having problems.

AppTitle "DEAL OR NO DEAL"

init_graphics()

Type boxes
	Field id$
	Field boxNo$
	Field cash
	Field bx
	Field by
	Field bw
	Field bh
	Field boxState
End Type


Global box.boxes = New boxes

While Not KeyHit(1)

	ClsColor 55,55,55
	Cls
	
	display_boxes()
	
	draw_pointer()
	
	Color 255,255,255;t
	Rect 0,0,640,40
	Color 55,55,55;b
	Rect 1,1,640,40
	Color 150,150,150;m
	Rect 1,1,639,39

	Color 55,55,55
	Text 6,14,"Box State > "+box_state
	
	Color 255,255,255
	Text 5,13,"Box State > "+box_state
		
	Line 0,400,640,400
	
	Flip

Wend

End

;-----------------------------------------------------------------------
;Functions
;-----------------------------------------------------------------------

Function display_boxes()

Restore boxdata

	bData = True

While bData
    
    Read id$
    
    If id$ = ""
       bData = False
    Else
    
    Read boxNo$
    Read bx
    Read by
    Read bh
    Read bw

	box.boxes = New boxes
     	
    If box.boxes <> Null
		box.boxes\id$ = id$
     	box.boxes\boxNo$ = boxNo$
     	box.boxes\bx = bx
     	box.boxes\by = by
     	box.boxes\bh = bh
     	box.boxes\bw = bw

	Else
    	Text 0,0,"ERROR: Could not create an instance of boxes"
           bData = False
        EndIf
    EndIf
Wend

For box.boxes = Each boxes

	Color 255,0,0 ;top
	Rect box\bx,box\by,box\bh,box\bw

	Color 55,0,0 ;bottom
	Rect box\bx+1,box\by+1,box\bh,box\bw

	Color 200,0,0 ;middle
	Rect box\bx+1,box\by+1,box\bh-1,box\bw-1,1
	
	Color 55,55,55
	Text box\bx+4,box\by+1,box\boxNo$
			
	Color 255,255,255
	Text box\bx+3,box\by,box\boxNo$	
Next
check_box(bx,by,bw,bh)
For box.boxes = Each boxes 
     Delete box
Next

End Function

;-----------------------------------------------------------------------

Function check_box(bx,by,bw,bh)

If MouseDown(1)=True

	If RectsOverlap( MouseX(), MouseY(), 1, 1, bx,by,bw+1,bh+1 ) Then
			
			Color 55,55,55 
			Rect bx,by,bw+1,bh+1,1
			
	End If


End If

End Function

;-----------------------------------------------------------------------

Function draw_pointer()

	Color 255,255,255
	Oval MouseX(),MouseY(),4,4,1
	
End Function

;-----------------------------------------------------------------------

Function init_graphics()

	Graphics3D 640,480,16,2
	SetBuffer BackBuffer()
	SeedRnd MilliSecs()
	HidePointer
	
End Function

;-----------------------------------------------------------------------

;-----------------------------------------------------------------------
;Data
;-----------------------------------------------------------------------

.boxdata
Data "1","Box  1",10,100,55,13
Data "2","Box  2",10,120,55,13
Data "3","Box  3",10,140,55,13
Data "4","Box  4",10,160,55,13
Data "5","Box  5",10,180,55,13
Data "6","Box  6",10,200,55,13
Data "7","Box  7",10,220,55,13
Data "8","Box  8",10,240,55,13
Data "9","Box  9",10,260,55,13
Data "10","Box 10",10,280,55,13
Data "11","Box 11",10,300,55,13
Data "12","Box 12",575,100,55,13
Data "13","Box 13",575,120,55,13
Data "14","Box 14",575,140,55,13
Data "15","Box 15",575,160,55,13
Data "16","Box 16",575,180,55,13
Data "17","Box 17",575,200,55,13
Data "18","Box 18",575,220,55,13
Data "19","Box 19",575,240,55,13
Data "20","Box 20",575,260,55,13
Data "21","Box 21",575,280,55,13
Data "22","Box 22",575,300,55,13
Data "","",0,0,0,0

;-----------------------------------------------------------------------


now it wont pick a box lol

Any ideas

Thanks

Destroyer :)


Destroyer(Posted 2006) [#5]
Ok i can pick boxes again lol
Just need to delete them now


Thanks
Destroyer :)


Destroyer(Posted 2006) [#6]
Ok still no lock with this i just cant get it to delete the boxes

AppTitle "DEAL OR NO DEAL"

init_graphics()

Type boxes
	Field id$
	Field boxNo$
	Field cash
	Field bx
	Field by
	Field bw
	Field bh
	Field boxState
End Type

Global box.boxes = New boxes
Global box_state=0

While Not KeyHit(1)

	ClsColor 55,55,55
	Cls
	
	display_boxes()
	
	draw_pointer()

	Color 255,255,255;t
	Rect 0,0,640,40
	Color 55,55,55;b
	Rect 1,1,640,40
	Color 150,150,150;m
	Rect 1,1,639,39

	Color 55,55,55
	Text 6,14,"Box State > "+box_state
	
	Color 255,255,255
	Text 5,13,"Box State > "+box_state
	
	Color 255,255,255	
	Line 0,400,640,400
	
	Flip

Wend

End

;-----------------------------------------------------------------------
;Functions
;-----------------------------------------------------------------------

Function display_boxes()

Restore boxdata

For n = 1 To 22

    Read id$
	
    If id$ = "" Then Exit
	box_state=0
	
    Read boxNo$
    Read bx
    Read by
    Read bh
    Read bw

	box.boxes = New boxes
     	
    If box.boxes <> Null

	box.boxes\id$ = id$
    box.boxes\boxNo$ = boxNo$
    box.boxes\bx = bx
    box.boxes\by = by
    box.boxes\bh = bh
    box.boxes\bw = bw

    EndIf

Next

For box.boxes = Each boxes

	Color 255,0,0 ;top
	Rect box\bx,box\by,box\bh,box\bw

	Color 55,0,0 ;bottom
	Rect box\bx+1,box\by+1,box\bh,box\bw

	Color 200,0,0 ;middle
	Rect box\bx+1,box\by+1,box\bh-1,box\bw-1,1
	
	Color 55,55,55
	Text box\bx+4,box\by+1,box\boxNo$
			
	Color 255,255,255
	Text box\bx+3,box\by,box\boxNo$	

Next

check_box()

For box.boxes = Each boxes 
     Delete box.boxes
Next

End Function

;-----------------------------------------------------------------------

Function check_box()

For box.boxes = Each boxes

If MouseDown(1)=True

	If RectsOverlap( MouseX(), MouseY(), 1, 1, box\bx,box\by,box\bh+1,box\bw+1 ) Then
			
		box_state=1
		Color 55,55,55 
		Rect box\bx,box\by,box\bh+1,box\bw+1,1

	End If
	
	If box_state=1
		Delete box
	End If
	
End If

Next

End Function

;-----------------------------------------------------------------------

Function draw_pointer()

	Color 255,255,255
	Oval MouseX(),MouseY(),4,4,1
	
End Function

;-----------------------------------------------------------------------

Function init_graphics()

	Graphics3D 640,480,16,2
	SetBuffer BackBuffer()
	SeedRnd MilliSecs()
	HidePointer
	
End Function

;-----------------------------------------------------------------------

;-----------------------------------------------------------------------
;Data
;-----------------------------------------------------------------------

.boxdata
Data "1","Box  1",10,100,55,13
Data "2","Box  2",10,120,55,13
Data "3","Box  3",10,140,55,13
Data "4","Box  4",10,160,55,13
Data "5","Box  5",10,180,55,13
Data "6","Box  6",10,200,55,13
Data "7","Box  7",10,220,55,13
Data "8","Box  8",10,240,55,13
Data "9","Box  9",10,260,55,13
Data "10","Box 10",10,280,55,13
Data "11","Box 11",10,300,55,13
Data "12","Box 12",575,100,55,13
Data "13","Box 13",575,120,55,13
Data "14","Box 14",575,140,55,13
Data "15","Box 15",575,160,55,13
Data "16","Box 16",575,180,55,13
Data "17","Box 17",575,200,55,13
Data "18","Box 18",575,220,55,13
Data "19","Box 19",575,240,55,13
Data "20","Box 20",575,260,55,13
Data "21","Box 21",575,280,55,13
Data "22","Box 22",575,300,55,13
Data "","",0,0,0,0

;-----------------------------------------------------------------------


Any help on this

Thanks
Destroyer :)


mindstorms(Posted 2006) [#7]
Each loop you re-create the boxes from the data set, restoring the deleted box...make the box types once, then simply draw them to the screen based on their type data.


b32(Posted 2006) [#8]
Replace the restore..read stuff to the start of the program, maybe make an init_boxes function for them.
This part:
For box.boxes = Each boxes
Delete box.boxes
Next
Should be
"Delete Each Box"
and should be on the end of the program, after the main loop.
To get it to work, the "box_state = 1" command should be "Delete box" and the if box_state = 1 .. etc part should be removed.
However, when using the box_state, use box\box_state instead.


mindstorms(Posted 2006) [#9]
This works....although it could use some cleaning up...




Destroyer(Posted 2006) [#10]
Thanks Bram32 and Mindstorms it works a treat now.

Now i can start adding the math functions from the old version


Thanks
Destroyer :)


b32(Posted 2006) [#11]
"deal" :)


Bobysait(Posted 2006) [#12]
Here is an optimised version => it will only check the boxes one time per loop.




Destroyer(Posted 2006) [#13]
Thanks Bobysait

Will use the optimized version

Thanks
Destroyer :)