HTBasic Help
×
Menu
Index

Example: Slot Machine

 
10     ! *********************************************************************
20     ! Example: Slot Machine
30     !
40     ! This example program simulates a slot machine.
50     ! It illustrates the use of STRING widgets with different fonts, and
60     ! shows how attribute arrays can be used. The PUSHBUTTON object is used
70     ! to initiate an action. The PRINTER widget is used to display information
80     ! to the user.
90     !
100   ! The arrays Attr_n$ and Attr are used to program six numeric attributes
110   ! at once.  The arrays Attr_s$ and Attr_sv$ are used to program two string
120   ! attributes.
130   !
140   ! ************************************************************************
150   !
160   DIM Attr_n$(5)[11],Attr_s$(1)[10],Attr(5),Attr_sv$(1)[10],Poss$(6)[6]
170   Attr_n$(0)="X"
180   Attr_n$(1)="Y"
190   Attr_n$(2)="WIDTH"
200   Attr_n$(3)="HEIGHT"
210   Attr_n$(4)="RESIZABLE"
220   Attr_n$(5)="MAXIMIZABLE"
230   Attr(0)=100                                ! x position
240   Attr(1)=20                                                ! y position
250   Attr(2)=120                                ! width
260   Attr(3)=50                                                ! height
270   Attr(4)=0                                                ! resizable
280   Attr(5)=0                                                ! maximizable
290   Attr_s$(0)="FONT"
300   Attr_s$(1)="TITLE"
310   Attr_sv$(0)="20 BY 30"
320   Attr_sv$(1)=""                                ! Makes the title area disappear
330   !
340   ASSIGN @Slot1 TO WIDGET "STRING"
350   CONTROL @Slot1;SET (Attr_n$(*):Attr(*),Attr_s$(*):Attr_sv$(*))
360   CONTROL @Slot1;SET ("BACKGROUND":1,"PEN":2)
370   !
380   ! Position the second STRING widget to the right of the first
390   !
400   Attr(0)=Attr(0)+Attr(2)
410   ASSIGN @Slot2 TO WIDGET "STRING"
420   CONTROL @Slot2;SET (Attr_n$(*):Attr(*),Attr_s$(*):Attr_sv$(*))
430   CONTROL @Slot2;SET ("BACKGROUND":1,"PEN":2)
440   !
450   ! Position the third STRING widget to the right of the second
460   !
470   Attr(0)=Attr(0)+Attr(2)
480   ASSIGN @Slot3 TO WIDGET "STRING"
490   CONTROL @Slot3;SET (Attr_n$(*):Attr(*),Attr_s$(*):Attr_sv$(*))
500   CONTROL @Slot3;SET ("BACKGROUND":1,"PEN":2)
510   !
520   ! Create a button to quit the game
530   !
540   ASSIGN @Quit TO WIDGET "PUSHBUTTON"
550   CONTROL @Quit;SET ("X":150,"Y":100,"RESIZABLE":0,"MAXIMIZABLE":0)
560   CONTROL @Quit;SET ("TITLE":"","FONT":"20 BY 30","LABEL":" QUIT ")
570   ON EVENT @Quit,"ACTIVATED" GOTO Finis
580   !
590   ! Create a button to simulate pulling the lever
600   !
610   ASSIGN @Pull TO WIDGET "PUSHBUTTON"
620   CONTROL @Pull;SET ("X":300,"Y":100,"RESIZABLE":0,"MAXIMIZABLE":0)
630   CONTROL @Pull;SET ("TITLE":"","FONT":"20 BY 30","LABEL":" PULL ")
640   !
650   ! The value remaining in the bankroll is displayed in another string
660   ! widget which retains its title area
670   !
680   Bankroll=100
690   ASSIGN @Bank TO WIDGET "STRING"
700   CONTROL @Bank;SET ("X":300,"Y":175,"MAXIMIZABLE":0)
710   CONTROL @Bank;SET ("TITLE":" BANKROLL","WIDTH":150)
720   CONTROL @Bank;SET ("VALUE":"  $"&VAL$(Bankroll))
730   !
740   ! Explain the costs and payoffs in a PRINTER widget
750   !
760   ASSIGN @Info TO WIDGET "PRINTER"
770   CONTROL @Info;SET ("X":100,"Y":175,"ROWS":5,"COLUMNS":21)
780   CONTROL @Info;SET ("RESIZABLE":0,"MAXIMIZABLE":0,"TITLE":" ODDS")
790   CONTROL @Info;SET ("TEXT":"Each pull costs $5")
800   CONTROL @Info;SET ("APPEND TEXT":"3 bars     pays $100")
810   CONTROL @Info;SET ("APPEND TEXT":"Any 2 bars pays $20")
820   CONTROL @Info;SET ("APPEND TEXT":"Any 2 7s   pays $10")
830   CONTROL @Info;SET ("APPEND TEXT":"Any pair   pays $5")
840   !
850   ! This array contains the possible values on the wheels
860   !
870   Poss$(0)=" BAR"
880   Poss$(1)=" BELL"
890   Poss$(2)="APPLE"
900   Poss$(3)="CHERRY"
910   Poss$(4)=" PLUM"
920   Poss$(5)="  7"
930   !
940   ! When the pull button is clicked, get some new values
950   !
960   ON EVENT @Pull,"ACTIVATED",1 GOSUB Pulled
970   !
980   LOOP
990     WAIT FOR EVENT
1000  END LOOP
1010 Pulled:!
1020  Bankroll=Bankroll-5
1030  CONTROL @Bank;SET ("VALUE":"  $"&VAL$(Bankroll))
1040  FOR I=1 TO 8+RND*8
1050    Val1=INT(RND*6)
1060    CONTROL @Slot1;SET ("VALUE":Poss$(Val1))
1070    WAIT .05
1080    Val2=INT(RND*6)
1090    CONTROL @Slot2;SET ("VALUE":Poss$(Val2))
1100    WAIT .05
1110    Val3=INT(RND*6)
1120    CONTROL @Slot3;SET ("VALUE":Poss$(Val3))
1130    WAIT .05
1140  NEXT I
1150  !
1160  ! Assume no payoff
1170  !
1180  Win=0
1190  !
1200  ! Check for a pair
1210  !
1220  IF Val1=Val2 OR Val1=Val3 OR Val2=Val3 THEN Win=5
1230  !
1240  ! Check for a pair of 7s
1250  !
1260  IF (Val1=5 AND (Val1=Val2 OR Val1=Val3)) OR (Val2=5 AND (Val2=Val3)) THEN Win=10
1270  !
1280  ! Check for a pair of bars
1290  !
1300  IF (Val1=0 AND (Val1=Val2 OR Val1=Val3)) OR (Val2=0 AND (Val2=Val3)) THEN Win=20
1310  !
1320  ! Check for three bars
1330  !
1340  IF Val1=0 AND Val2=0 AND Val3=0 THEN Win=100
1350  !
1360  ! Declare any winnings
1370  !
1380  IF Win>0 THEN DIALOG "INFORMATION","You WON $"&VAL$(Win);TIMEOUT 10
1390  Bankroll=Bankroll+Win
1400  CONTROL @Bank;SET ("VALUE":"  $"&VAL$(Bankroll))
1410  IF Bankroll<=0 THEN STOP
1420  RETURN
1430  !
1440 Finis:  !
1450  ASSIGN @Slot1 TO *                                ! Delete STRING widget
1460  ASSIGN @Slot2 TO *                                ! Delete STRING widget
1470  ASSIGN @Slot3 TO *                                ! Delete STRING widget
1480  ASSIGN @Quit TO *                                ! Delete PUSHBUTTON widget
1490  ASSIGN @Pull TO *                                ! Delete PUSHBUTTON widget
1500  ASSIGN @Bank TO *                                ! Delete STRING widget
1510  ASSIGN @Info TO *                                ! Delete PRINTER widget
1520  END