Deal Or No Deal
Blitz3D Forums/Blitz3D Beginners Area/Deal Or No Deal
| ||
| 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 :) |
| ||
| 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. |
| ||
| Thanks for the reply bram32. I thought about using types for the boxes. Will try your other ideas out Thanks Destroyer :) |
| ||
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 :) |
| ||
| Ok i can pick boxes again lol Just need to delete them now Thanks Destroyer :) |
| ||
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 :) |
| ||
| 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. |
| ||
| 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. |
| ||
| This works....although it could use some cleaning up... |
| ||
| Thanks Bram32 and Mindstorms it works a treat now. Now i can start adding the math functions from the old version Thanks Destroyer :) |
| ||
| "deal" :) |
| ||
| Here is an optimised version => it will only check the boxes one time per loop. |
| ||
| Thanks Bobysait Will use the optimized version Thanks Destroyer :) |