JUEGO BINGO

Source code related resources

Moderator: Rathinagiri

Post Reply
User avatar
LOUIS
Posts: 210
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

JUEGO BINGO

Post by LOUIS »

Buenas tardes a todos.

Hice un programa para jugar Bingo en casa, el código está bien, sacando números aleatorios del 1 al 75, pero tengo 2 inconvenientes :oops:

Primero que no puedo pausar el juego si alguien grita !Bingo! ... Debo detener (pausar) el juego, para revisar el cartón del jugador vs los números que han salido en la pantalla ... (creo que todos hemos jugado esto alguna vez) :mrgreen:

Si el Bingo es correcto, termino el juego, pero si no lo es, debo continuarlo hasta que haya un ganador.

El segundo problemilla es que debe capturar la variable del número (M4) y hacer que la computadora lo lea.
En VFP sí lo hice con Createobject("SAPI.SPVoice"), pero aquí no tengo la idea de cómo hacerlo

En fin, si por lo menos pudiera pausarlo y luego hacer que continúe o termine el juego, estaré contento ... ya lo otro, tendré que afinar la garganta para cantar los números :lol:

Os dejo adjunto el ejecutable y el código también para que lo revisen y me den una manito, luego esto quedará aquí para distracción de todos nosotros.

Gracias de antemano.
Attachments
BINGO.rar
(1.08 MiB) Downloaded 202 times
BINGO3.jpg
BINGO3.jpg (149.91 KiB) Viewed 54816 times
BINGO2.jpg
BINGO2.jpg (135.24 KiB) Viewed 54816 times
BINGO1.jpg
BINGO1.jpg (145.58 KiB) Viewed 54816 times
User avatar
danielmaximiliano
Posts: 2612
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: JUEGO BINGO

Post by danielmaximiliano »

hola es asi

Code: Select all

#include <hmg.ch>

Function Main
Public oVoz := CreateObject("SAPI.SpVoice")

        Load Window Main
        Main.Center
        Main.Activate

Return

Function Hola( cVoz )
oVoz:Speak( cVoz )
return
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
User avatar
LOUIS
Posts: 210
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: JUEGO BINGO

Post by LOUIS »

Muchas gracias Daniel

Ya le adapté tu colaboración que agradezco mucho, ya la compu canta los números que van saliendo :mrgreen:

Pero ahora sólo falta poder pausar el juego si yo toco una tecla (cuando van saliendo los números aleatoriamente), porque como dije antes, si alguien dice BINGO ! a los 58 números jugados, yo debo pausar el juego para proceder a la revisión y luego terminar el Bingo si fue correcto o continuar si no hubo Bingo.

Sólo eso nos faltaría y quedaría cool el programita para todos nosotros.

Ojalá alguien se anime a colaborar y nos eche una manito (ver líneas 67 al 72)

Nuevamente gracias Daniel !

Code: Select all

*******************************************
* PROGRAMADO EN HMG 3.0.46 EL 09/01/2024  *
* PROGRAMADO PARA BINGO DE 75 BOLAS       *
* PARA JUGAR ENTRE AMIGOS O FAMILIA       *
*******************************************

#include "HMG.CH"

* SCREEN 1360x768

FUNCTION MAIN()

PUBLIC n,L,C,M4
Public oVoz := CreateObject("SAPI.SpVoice")

DEFINE WINDOW PRINCE AT 0,0 WIDTH 0 HEIGHT 0 BACKCOLOR {0,125,250} NOCAPTION MAIN
        @ 000,000 LABEL L0 VALUE "JUGANDO BINGO EN CASA" WIDTH 1200 HEIGHT 99 FONT "ALGERIAN" SIZE 72 BOLD UNDER ITALIC FONTCOLOR WHITE TRANSP

	@ 725,1180 BUTTON BUTTON_1 CAPTION "S T A R T" WIDTH 75 HEIGHT 30 ONCLICK BUSCANUME()
	@ 725,1260 BUTTON BUTTON_2 CAPTION "E X I T"   WIDTH 75 HEIGHT 30 ONCLICK SALIR()

	ON KEY ESCAPE ACTION SALIR()
END WINDOW

PRINCE.MAXIMIZE
PRINCE.ACTIVATE

RETURN


*-----------------
FUNCTION BUSCANUME

LOCAL NNUM
MSGINFO ("ATENCION POR FAVOR, EMPEZARA EL JUEGO !")
aleatorio:=ARRAY(75)
FOR n=1 TO 75
   PASE:=.T.
   DO WHILE PASE
      NNUM:=HB_RANDOMINT(1,75)
      IF VALTYPE(aleatorio[NNUM])="U"
         aleatorio[NNUM]:=NNUM
         PASE:=.F.
      ENDIF
   ENDDO

   CVAR1:="NUME"+ALLTRIM(STR(n))		&& ETIQUETA QUE VA AUMENTANDO EN 1
   CVAR2:=ALLTRIM(STR(NNUM))			&& NUMERO PURO ALEATORIO
   CVAR3:="LAST"+ALLTRIM(STR(n))		&& ETIQUETA PARA ULTIMO NUMERO JUGADO

   M4=NNUM
   CANTA()
   PINTANUME()
   @ L,C LABEL &CVAR1 PARENT PRINCE VALUE CVAR2 WIDTH 74 HEIGHT 66 FONT "ALGERIAN" SIZE 48 BOLD FONTCOLOR BLACK BACKCOLOR {0,125,250}

   L1:="L"+ ALLTRIM(STR(n))		&& VARIABLE PARA LABELS
   INKEY(0.5)				&& TIEMPO ENTRE UN NUMERO Y OTRO (SE LO PUEDE AMPLIAR)
   IF n=75
      n=74
      @ 5,1200 LABEL &L1 PARENT PRINCE VALUE TRAN(n+1,'99') WIDTH 111 HEIGHT 99 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN BACKCOLOR {0,125,250}
      EXIT
    ELSE
      @ 5,1200 LABEL &L1 PARENT PRINCE VALUE TRAN(n+1,'99') WIDTH 111 HEIGHT 99 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN BACKCOLOR {0,125,250}
   ENDIF
   @ 700,0 LABEL &CVAR3 PARENT PRINCE VALUE "ULTIMO NUMERO QUE SALIO --->"+CVAR2 WIDTH 1255 HEIGHT 66 FONT "ALGERIAN" SIZE 48 BOLD FONTCOLOR BLUE BACKCOLOR {0,125,250}

***ESTO ES SOLO PARA PAUSAR EL JUEGO, PERO DEBE SER DE OTRA MANERA
   IF n=10 .OR. n=30 .OR. n=55		&& EN VEZ PREGUNTAR POR n DEBE SER AL PULSAR UNA TECLA CUALQUIERA QUE HAGA UNA PAUSA
      MSGINFO("BUSCAR COMO PAUSAR EL PROGRAMA" +CHR(13)+CHR(13)+ " ... PULSANDO YO UNA TECLA !!!"+CHR(13))		&& BUSCAR OTRA FORMA DE PAUSAR EL PROGRAMA MANUALMENTE
      EXIT		&& AL PAUSAR EL PROGRAMA NO DEBE SALIR, EL JUEGO DEBE CONTINUAR O PREGUNTAR SI CONTINÚA
   ENDIF
***ESTO ES SOLO PARA PAUSAR, PERO DEBE SER DE OTRA MANERA

NEXT

RETU


*-----------------
FUNCTION PINTANUME

IF M4<6
   C=0
ENDIF
IF M4>5 .AND. M4<11
   C=90
ENDIF
IF M4>10 .AND. M4<16
   C=180
ENDIF
IF M4>15 .AND. M4<21
   C=270
ENDIF
IF M4>20 .AND. M4<26
   C=360
ENDIF
IF M4>25 .AND. M4<31
   C=450
ENDIF
IF M4>30 .AND. M4<36
   C=540
ENDIF
IF M4>35 .AND. M4<41
   C=630
ENDIF
IF M4>40 .AND. M4<46
   C=720
ENDIF
IF M4>45 .AND. M4<51
   C=810
ENDIF
IF M4>50 .AND. M4<56
   C=900
ENDIF
IF M4>55 .AND. M4<61
   C=990
ENDIF
IF M4>60 .AND. M4<66
   C=1080
ENDIF
IF M4>65 .AND. M4<71
   C=1170
ENDIF
IF M4>70
   C=1260
ENDIF

IF M4=1 .OR. M4=6 .OR. M4=11 .OR. M4=16 .OR. M4=21 .OR. M4=26 .OR. M4=31 .OR. M4=36 .OR. M4=41 .OR. M4=46 .OR. M4=51 .OR. M4=56 .OR. M4=61 .OR. M4=66 .OR. M4=71
   L=120
ENDIF
IF M4=2 .OR. M4=7 .OR. M4=12 .OR. M4=17 .OR. M4=22 .OR. M4=27 .OR. M4=32 .OR. M4=37 .OR. M4=42 .OR. M4=47 .OR. M4=52 .OR. M4=57 .OR. M4=62 .OR. M4=67 .OR. M4=72
   L=240
ENDIF
IF M4=3 .OR. M4=8 .OR. M4=13 .OR. M4=18 .OR. M4=23 .OR. M4=28 .OR. M4=33 .OR. M4=38 .OR. M4=43 .OR. M4=48 .OR. M4=53 .OR. M4=58 .OR. M4=63 .OR. M4=68 .OR. M4=73
   L=360
ENDIF
IF M4=4 .OR. M4=9 .OR. M4=14 .OR. M4=19 .OR. M4=24 .OR. M4=29 .OR. M4=34 .OR. M4=39 .OR. M4=44 .OR. M4=49 .OR. M4=54 .OR. M4=59 .OR. M4=64 .OR. M4=69 .OR. M4=74
   L=480
ENDIF
IF M4=5 .OR. M4=10 .OR. M4=15 .OR. M4=20 .OR. M4=25 .OR. M4=30 .OR. M4=35 .OR. M4=40 .OR. M4=45 .OR. M4=50 .OR. M4=55 .OR. M4=60 .OR. M4=65 .OR. M4=70 .OR. M4=75
   L=600
ENDIF

RETU


*-------------
FUNCTION SALIR

PRINCE.RELEASE
QUIT
RETU


*-------------
FUNCTION CANTA

cVoz:= M4
oVoz:Speak( cVoz )

return
User avatar
LOUIS
Posts: 210
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: JUEGO BINGO

Post by LOUIS »

Hola a todos los Amigos del HMG

Le hice un pequeño cambio a los primeros 9 números, para que los ponga en pantalla con el 0 adelante y se vea mejor cuadrada su presentación ...

No se olviden lo que está pendiente :oops:

Lo que añadí (o cambié) son 6 líneas, desde el IF VAL hasta el ENDIF

Code: Select all

   M4=NNUM
   CANTA()
   PINTANUME()

IF VAL(CVAR2)<10
   CVAR2='0'+ALLTRIM(CVAR2)
   @ L,C LABEL &CVAR1 PARENT PRINCE VALUE CVAR2 WIDTH 74 HEIGHT 66 FONT "ALGERIAN" SIZE 48 BOLD FONTCOLOR BLACK BACKCOLOR {0,125,250}
ELSE
   @ L,C LABEL &CVAR1 PARENT PRINCE VALUE CVAR2 WIDTH 74 HEIGHT 66 FONT "ALGERIAN" SIZE 48 BOLD FONTCOLOR BLACK BACKCOLOR {0,125,250}
ENDIF

   L1:="L"+ ALLTRIM(STR(n))		&& VARIABLE PARA LABELS
   INKEY(0.5)				&& TIEMPO ENTRE UN NUMERO Y OTRO (SE LO PUEDE AMPLIAR)
Attachments
BINGO4.jpg
BINGO4.jpg (132.53 KiB) Viewed 53604 times
User avatar
danielmaximiliano
Posts: 2612
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: JUEGO BINGO

Post by danielmaximiliano »

Hola: Hice unas mejoras visuales a los numero que van saliendo, de esta manera es mas correcta los numeros en el carton para un seguimiento

Code: Select all

*******************************************
* PROGRAMADO EN HMG 3.0.46 EL 09/01/2024  *
* PROGRAMADO PARA BINGO DE 75 BOLAS       *
* PARA JUGAR ENTRE AMIGOS O FAMILIA       *
*******************************************

#include "HMG.CH"

* SCREEN 1360x768

FUNCTION MAIN()

PUBLIC nCount, nLine, nColumn, M4
Public oVoz := CreateObject("SAPI.SpVoice")

DEFINE WINDOW PRINCE AT 0,0 WIDTH 0 HEIGHT 0 BACKCOLOR {0,125,250} NOCAPTION MAIN
    @ 000,000 LABEL L0 ;
	          VALUE "JUGANDO BINGO EN CASA" ;
			  WIDTH 1200 HEIGHT 99 ;
			  FONT "ALGERIAN" SIZE 72 BOLD UNDERLINE  ITALIC ;
			  FONTCOLOR WHITE TRANSPARENT 
			  
          @ 725 ,1000 SLIDER Volumen;
                     RANGE 0 , 100  VALUE 50 ;
					 WIDTH  180 HEIGHT 30  TOOLTIP "Volumen Speech";
					 ON CHANGE Volume()
	@ 725,1180 BUTTON BUTTON_1 CAPTION "S T A R T" WIDTH 75 HEIGHT 30 ONCLICK BUSCANUME()
	@ 725,1260 BUTTON BUTTON_2 CAPTION "E X I T"   WIDTH 75 HEIGHT 30 ONCLICK SALIR()

	ON KEY ESCAPE ACTION SALIR()
END WINDOW

PRINCE.MAXIMIZE
PRINCE.ACTIVATE

RETURN

FUNCTION Volume
oVoz:Volume := PRINCE.Volumen.value
oVoz:Speak( "Volumen "+ str (PRINCE.Volumen.value ))
Return 

FUNCTION BUSCANUME

LOCAL nNum
MSGINFO ("ATENCION POR FAVOR, EMPEZARA EL JUEGO !")
nAleatorio:=ARRAY(75)
FOR nCount=1 TO 75
   PASE:=.T.
   DO WHILE PASE
      nNum:=HB_RANDOMINT(1,75)
      IF VALTYPE(nAleatorio[nNum])="U"
         nAleatorio[nNum]:=nNum
         PASE:=.F.
      ENDIF
   ENDDO

   cVar1:="NUME"+ALLTRIM(STR(nCount))		&& ETIQUETA QUE VA AUMENTANDO EN 1
   cVar2:=ALLTRIM(STR(nNum))			&& NUMERO PURO ALEATORIO
   cVar3:="LAST"+ALLTRIM(STR(nCount))		&& ETIQUETA PARA ULTIMO NUMERO JUGADO

   M4=nNum
   CANTA()
   PINTANUME()
   
   
IF VAL(cVar2)<10
   cVar2='0'+ALLTRIM(cVar2)
      @ nLine,nColumn LABEL &CVAR1 PARENT PRINCE VALUE CVAR2 WIDTH 74 HEIGHT 66 FONT "ALGERIAN" SIZE 48 BOLD FONTCOLOR BLACK BACKCOLOR {0,125,250}
ELSE
   @ nLine,nColumn LABEL &CVAR1 PARENT PRINCE VALUE CVAR2 WIDTH 74 HEIGHT 66 FONT "ALGERIAN" SIZE 48 BOLD FONTCOLOR BLACK BACKCOLOR {0,125,250}
ENDIF
    L1:="L"+ ALLTRIM(STR(nCount))		&& VARIABLE PARA LABELS
   INKEY(0.5)				&& TIEMPO ENTRE UN NUMERO Y OTRO (SE LO PUEDE AMPLIAR)
   IF nCount=75
      nCount=74
      @ 5,1200 LABEL &L1 PARENT PRINCE VALUE TRAN(nCount+1,'99') WIDTH 111 HEIGHT 99 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN BACKCOLOR {0,125,250}
      EXIT
    ELSE
      @ 5,1200 LABEL &L1 PARENT PRINCE VALUE TRAN(nCount+1,'99') WIDTH 111 HEIGHT 99 FONT "ALGERIAN" SIZE 72 BOLD FONTCOLOR GREEN BACKCOLOR {0,125,250}
   ENDIF
   @ 700,0 LABEL &cVar3 PARENT PRINCE VALUE "ULTIMO NUMERO QUE SALIO --->"+cVar2 WIDTH 1255 HEIGHT 66 FONT "ALGERIAN" SIZE 48 BOLD FONTCOLOR BLUE BACKCOLOR {0,125,250}



NEXT

RETURN


*-----------------
FUNCTION PINTANUME

IF M4  >0  .AND. M4 < 16
   nLine=120 
ENDIF

IF M4 > 15 .AND. M4 < 31
   nLine=240 
ENDIF

IF M4 >=31  .AND. M4 <= 45
   nLine=360
ENDIF

IF M4 >= 46 .AND. M4 <= 60
   nLine=480
ENDIF

IF M4 >= 61 .AND. M4 <= 75
   nLine=600
ENDIF

IF M4 = 1 .OR. M4 = 16 .OR. M4 = 31 .OR. M4 = 46 .OR. M4 = 61 
   nColumn=0
ENDIF

IF M4 = 2 .OR. M4 = 17 .OR. M4 = 32 .OR. M4 = 47 .OR. M4 = 62
  nColumn=90
ENDIF

IF M4 = 3 .OR. M4 = 18 .OR. M4 = 33 .OR. M4 = 48 .OR. M4 = 63
  nColumn=180
ENDIF

IF M4 = 4 .OR. M4 = 19 .OR. M4 = 34 .OR. M4 = 49 .OR. M4 = 64 
   nColumn=270
ENDIF

IF M4 = 5 .OR. M4 = 20 .OR. M4 = 35 .OR. M4 = 50 .OR. M4 = 65 
 nColumn=360
ENDIF

IF M4 = 6 .OR. M4 = 21 .OR. M4 = 36 .OR. M4 = 51 .OR. M4 = 66
 nColumn=450
ENDIF

IF M4 = 7 .OR. M4 = 22 .OR. M4 = 37 .OR. M4 = 52 .OR. M4 = 67
 nColumn=540
ENDIF

IF M4 = 8 .OR. M4 = 23 .OR. M4 = 38 .OR. M4 = 53 .OR. M4 = 68
 nColumn=630
ENDIF

IF M4 = 9 .OR. M4 = 24 .OR. M4 = 39 .OR. M4 = 54 .OR. M4 = 69
   nColumn=720
ENDIF

IF M4 = 10 .OR. M4 = 25 .OR. M4 = 40 .OR. M4 = 55 .OR. M4 = 70
   nColumn=810
ENDIF

IF M4 = 11 .OR. M4 = 26 .OR. M4 = 41 .OR. M4 = 56 .OR. M4 = 71
   nColumn=900
ENDIF

IF M4 = 12 .OR. M4 = 27 .OR. M4 = 42 .OR. M4 = 57 .OR. M4 = 72
   nColumn=990
ENDIF

IF M4 = 13 .OR. M4 = 28 .OR. M4 = 43 .OR. M4 = 58 .OR. M4 = 73
   nColumn=1080
ENDIF

IF M4 = 14 .OR. M4 = 29 .OR. M4 = 44 .OR. M4 = 59 .OR. M4 = 74
   nColumn=1170
ENDIF

IF M4 = 15 .OR. M4 = 30 .OR. M4 = 45 .OR. M4 = 60 .OR. M4 = 75
   nColumn=1260
ENDIF
 
RETU




*-------------
FUNCTION SALIR

PRINCE.RELEASE
QUIT
RETU


*-------------
FUNCTION CANTA

cVoz:= M4
oVoz:Speak( cVoz )

return
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
edk
Posts: 914
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: JUEGO BINGO

Post by edk »

Agregué la capacidad de pausar, detener y reiniciar el sorteo. Optimicé el código.

Code: Select all

*******************************************
* PROGRAMADO EN HMG 3.0.46 EL 09/01/2024  *
* PROGRAMADO PARA BINGO DE 75 BOLAS       *
* PARA JUGAR ENTRE AMIGOS O FAMILIA       *
*******************************************

#include "HMG.CH"

//SpVoice Flags
#define  SVSFDefault            0
#define  SVSFlagsAsync          1
#define  SVSFPurgeBeforeSpeak   2
#define  SVSFIsFilename         4
#define  SVSFIsXML              8
#define  SVSFIsNotXML           16
#define  SVSFPersistXML         32


* SCREEN 1360x768

FUNCTION MAIN()

Public oVoice := CreateObject( "SAPI.SpVoice" )

DEFINE WINDOW PRINCE AT 0,0 WIDTH 0 HEIGHT 0 BACKCOLOR {0,125,250} NOCAPTION MAIN
    @ 000,000 LABEL L0 ;
	          VALUE "JUGANDO BINGO EN CASA" ;
			  WIDTH 1200 HEIGHT 99 ;
			  FONT "ALGERIAN" SIZE 72 BOLD UNDERLINE  ITALIC ;
			  FONTCOLOR WHITE TRANSPARENT
		  
    @ 5 ,1200 LABEL L1 ;
              VALUE "" ;
              WIDTH 111 HEIGHT 99 ;
              FONT "ALGERIAN" SIZE 72 BOLD ;
              FONTCOLOR GREEN BACKCOLOR {0,125,250}

    @ 690,0   LABEL L2 ;
              VALUE "" ;
              WIDTH 1055 HEIGHT 62 ;
              FONT "ALGERIAN" SIZE 48 BOLD ;
              FONTCOLOR BLUE BACKCOLOR {0,125,250}

              
    @ 735 ,1065 SLIDER Volumen;
                     RANGE 0 , 100  VALUE oVoice:Volume ;
					 WIDTH  235 HEIGHT 30  TOOLTIP "Volumen Speech";
					 ON CHANGE Volume()
					 
					 
	@ 700,1065 BUTTON BUTTON_1 CAPTION "S T A R T" WIDTH 75 HEIGHT 30 ONCLICK BUSCANUME()
	@ 700,1145 BUTTON BUTTON_2 CAPTION "E X I T"   WIDTH 75 HEIGHT 30 ONCLICK SALIR()
	@ 700,1225 BUTTON BUTTON_3 CAPTION "PAUSE"     WIDTH 75 HEIGHT 30 ONCLICK Pause()
	PRINCE.BUTTON_3.Enabled := .F.

	ON KEY ESCAPE ACTION SALIR()
END WINDOW

PRINCE.MAXIMIZE
PRINCE.ACTIVATE

RETURN

*-------------
FUNCTION Volume
oVoice:Volume := PRINCE.Volumen.value
Speak ( "Volumen "+ str ( oVoice:Volume ), .F. )
Return 

*-------------
FUNCTION Speak ( cSpeak, lWait )
Local nFlagSpVoice
Default lWait := .T.

IF lWait
    nFlagSpVoice := SVSFDefault
ELSE
    nFlagSpVoice := SVSFlagsAsync + SVSFPurgeBeforeSpeak
ENDIF
oVoice:Speak( cSpeak, nFlagSpVoice )
Return 

*-------------
Function Pause ()
PRINCE.BUTTON_3.Caption := IF( PRINCE.BUTTON_3.Caption = "PAUSE", "Continue", "PAUSE" )
DO EVENTS
Return    

*-------------
FUNCTION BUSCANUME
LOCAL nNum, nAleatorio, nCount, nLine := 0, nColumn := 0

IF PRINCE.BUTTON_1.Caption = "STOP"
    PRINCE.BUTTON_1.Caption := "S T A R T"
    PRINCE.BUTTON_3.Caption := "PAUSE"
    DO EVENTS
    RETURN
ENDIF

PRINCE.BUTTON_1.Caption := "STOP"
PRINCE.BUTTON_3.Caption := "PAUSE"
PRINCE.BUTTON_3.Enabled := .T.
PRINCE.BUTTON_3.SetFocus

DO EVENTS

nAleatorio := {}

DO WHILE Len( nAleatorio ) < 75
    DO WHILE .T.
      nNum := HB_RANDOMINT(1,75)
      IF ASCAN ( nAleatorio, nNum ) = 0
        AAdd ( nAleatorio, nNum )
        IF _IsControlDefined ( StrZero ( nNum, 2 ) , "PRINCE" )
            DoMethod ( "PRINCE", StrZero ( nNum, 2 ), "Release" )
        ENDIF
        EXIT
      ENDIF
      DO EVENTS
   ENDDO
   DO EVENTS
ENDDO

MSGINFO ("ATENCION POR FAVOR, EMPEZARA EL JUEGO !")

FOR nCount := 1 TO Len( nAleatorio )

    DO WHILE PRINCE.BUTTON_3.Caption = "Continue"
        DO EVENTS
    ENDDO
    
    IF PRINCE.BUTTON_1.Caption = "S T A R T"
        EXIT
    ENDIF

   PINTANUME( nAleatorio [ nCount ], @nLine, @nColumn )
   
   @ nLine,nColumn LABEL &(StrZero ( nAleatorio [ nCount ], 2 )) PARENT PRINCE VALUE STRZero( nAleatorio [ nCount ], 2 ) WIDTH 74 HEIGHT 66 FONT "ALGERIAN" SIZE 48 BOLD FONTCOLOR BLACK BACKCOLOR {0,125,250}

   DO EVENTS
   
   PRINCE.L1.VALUE := StrZero ( nCount, 2 )
   PRINCE.L2.VALUE := "ULTIMO NUMERO QUE SALIO --->" + STRZero( nAleatorio [ nCount ], 2 )

   Speak ( nAleatorio [ nCount ] )

   DO EVENTS

   INKEY(0.5)				&& TIEMPO ENTRE UN NUMERO Y OTRO (SE LO PUEDE AMPLIAR)
   
NEXT

PRINCE.BUTTON_3.Caption := "PAUSE"
PRINCE.BUTTON_3.Enabled := .F.
PRINCE.BUTTON_1.Caption := "S T A R T"
PRINCE.BUTTON_1.SetFocus
DO EVENTS
RETURN

*-----------------
FUNCTION PINTANUME( nNum, nLine, nColumn )

IF nNum  >0  .AND. nNum < 16
   nLine=120 
ENDIF

IF nNum > 15 .AND. nNum < 31
   nLine=240 
ENDIF

IF nNum >=31  .AND. nNum <= 45
   nLine=360
ENDIF

IF nNum >= 46 .AND. nNum <= 60
   nLine=480
ENDIF

IF nNum >= 61 .AND. nNum <= 75
   nLine=600
ENDIF

IF nNum = 1 .OR. nNum = 16 .OR. nNum = 31 .OR. nNum = 46 .OR. nNum = 61 
   nColumn=0
ENDIF

IF nNum = 2 .OR. nNum = 17 .OR. nNum = 32 .OR. nNum = 47 .OR. nNum = 62
  nColumn=90
ENDIF

IF nNum = 3 .OR. nNum = 18 .OR. nNum = 33 .OR. nNum = 48 .OR. nNum = 63
  nColumn=180
ENDIF

IF nNum = 4 .OR. nNum = 19 .OR. nNum = 34 .OR. nNum = 49 .OR. nNum = 64 
   nColumn=270
ENDIF

IF nNum = 5 .OR. nNum = 20 .OR. nNum = 35 .OR. nNum = 50 .OR. nNum = 65 
 nColumn=360
ENDIF

IF nNum = 6 .OR. nNum = 21 .OR. nNum = 36 .OR. nNum = 51 .OR. nNum = 66
 nColumn=450
ENDIF

IF nNum = 7 .OR. nNum = 22 .OR. nNum = 37 .OR. nNum = 52 .OR. nNum = 67
 nColumn=540
ENDIF

IF nNum = 8 .OR. nNum = 23 .OR. nNum = 38 .OR. nNum = 53 .OR. nNum = 68
 nColumn=630
ENDIF

IF nNum = 9 .OR. nNum = 24 .OR. nNum = 39 .OR. nNum = 54 .OR. nNum = 69
   nColumn=720
ENDIF

IF nNum = 10 .OR. nNum = 25 .OR. nNum = 40 .OR. nNum = 55 .OR. nNum = 70
   nColumn=810
ENDIF

IF nNum = 11 .OR. nNum = 26 .OR. nNum = 41 .OR. nNum = 56 .OR. nNum = 71
   nColumn=900
ENDIF

IF nNum = 12 .OR. nNum = 27 .OR. nNum = 42 .OR. nNum = 57 .OR. nNum = 72
   nColumn=990
ENDIF

IF nNum = 13 .OR. nNum = 28 .OR. nNum = 43 .OR. nNum = 58 .OR. nNum = 73
   nColumn=1080
ENDIF

IF nNum = 14 .OR. nNum = 29 .OR. nNum = 44 .OR. nNum = 59 .OR. nNum = 74
   nColumn=1170
ENDIF

IF nNum = 15 .OR. nNum = 30 .OR. nNum = 45 .OR. nNum = 60 .OR. nNum = 75
   nColumn=1260
ENDIF
 
RETURN

*-------------
FUNCTION SALIR

PRINCE.RELEASE
QUIT
RETURN
User avatar
LOUIS
Posts: 210
Joined: Tue Dec 11, 2012 9:05 pm
DBs Used: DBF

Re: JUEGO BINGO

Post by LOUIS »

Muchas pero muchas Gracias a Daniel Maximiliano y a Mr. EDK

Ha quedado muy muy bonito el programa y está a disposición de todos ...

Sus contribuciones fueron Estupendas !!!!

Nuevamente Mil Gracias !!!
User avatar
danielmaximiliano
Posts: 2612
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: JUEGO BINGO

Post by danielmaximiliano »

Hola : Unas mejoras, eliminar "Ultimo numero que salio" y la cantidad de numero que esta saliendo, se agrega el orden de los numero salientes para eliminar el problema de que en el repaso de Bingo otra persona no haya cantada Bingo anteriormente porque no escucho un numero, "nosé si se entiende"

Code: Select all

*******************************************
* PROGRAMADO EN HMG 3.0.46 EL 09/01/2024  *
* PROGRAMADO PARA BINGO DE 75 BOLAS       *
* PARA JUGAR ENTRE AMIGOS O FAMILIA       *
*******************************************

#include "HMG.CH"

//SpVoice Flags
#define  SVSFDefault            0
#define  SVSFlagsAsync          1
#define  SVSFPurgeBeforeSpeak   2
#define  SVSFIsFilename         4
#define  SVSFIsXML              8
#define  SVSFIsNotXML           16
#define  SVSFPersistXML         32


* SCREEN 1360x768

FUNCTION MAIN()
Public cSalieron := ""
Public oVoice := CreateObject( "SAPI.SpVoice" )

DEFINE WINDOW PRINCE AT 0,0 WIDTH 0 HEIGHT 0 BACKCOLOR {0,125,250} NOCAPTION MAIN
    @ 000,000 LABEL L0 ;
	          VALUE " JUGANDO BINGO EN CASA " ;
			  WIDTH 1340 HEIGHT 99 ;
			  FONT "ALGERIAN" SIZE 72 BOLD UNDERLINE  ITALIC ;
			  FONTCOLOR WHITE TRANSPARENT

    @ 690,0   LABEL L1 ;
              VALUE "" ;
              WIDTH 1055 HEIGHT 70 ;
              FONT "ALGERIAN" SIZE 16 BOLD ;
              FONTCOLOR BLUE BACKCOLOR {0,125,250}

    @ 735 ,1065 SLIDER Volumen;
                     RANGE 0 , 100  VALUE oVoice:Volume ;
					 WIDTH  235 HEIGHT 30  TOOLTIP "Volumen Speech";
					 ON CHANGE Volume()
					 				 
	@ 700,1065 BUTTON BUTTON_1 CAPTION "S T A R T" WIDTH 75 HEIGHT 30 ONCLICK BUSCANUME()
	@ 700,1145 BUTTON BUTTON_2 CAPTION "E X I T"   WIDTH 75 HEIGHT 30 ONCLICK SALIR()
	@ 700,1225 BUTTON BUTTON_3 CAPTION "PAUSE"     WIDTH 75 HEIGHT 30 ONCLICK Pause()
	PRINCE.BUTTON_3.Enabled := .F.

	ON KEY ESCAPE ACTION SALIR()
END WINDOW

PRINCE.MAXIMIZE
PRINCE.ACTIVATE

RETURN

*-------------
FUNCTION Volume
oVoice:Volume := PRINCE.Volumen.value
Speak ( "Volumen "+ str ( oVoice:Volume ), .F. )
Return 

*-------------
FUNCTION Speak ( cSpeak, lWait )
Local nFlagSpVoice
Default lWait := .T.

IF lWait
    nFlagSpVoice := SVSFDefault
ELSE
    nFlagSpVoice := SVSFlagsAsync + SVSFPurgeBeforeSpeak
ENDIF
oVoice:Speak( cSpeak, nFlagSpVoice )
Return 

*-------------
Function Pause ()
PRINCE.BUTTON_3.Caption := IF( PRINCE.BUTTON_3.Caption = "PAUSE", "Continue", "PAUSE" )
DO EVENTS
Return    

*-------------
FUNCTION BUSCANUME
LOCAL nNum, nAleatorio, nCount, nLine := 0, nColumn := 0

IF PRINCE.BUTTON_1.Caption = "STOP"
    PRINCE.BUTTON_1.Caption := "S T A R T"
    PRINCE.BUTTON_3.Caption := "PAUSE"
    DO EVENTS
    RETURN
ENDIF

PRINCE.BUTTON_1.Caption := "STOP"
PRINCE.BUTTON_3.Caption := "PAUSE"
PRINCE.BUTTON_3.Enabled := .T.
PRINCE.BUTTON_3.SetFocus

DO EVENTS

nAleatorio := {}

DO WHILE Len( nAleatorio ) < 75
    DO WHILE .T.
      nNum := HB_RANDOMINT(1,75)
      IF ASCAN ( nAleatorio, nNum ) = 0
        AAdd ( nAleatorio, nNum )
        IF _IsControlDefined ( StrZero ( nNum, 2 ) , "PRINCE" )
            DoMethod ( "PRINCE", StrZero ( nNum, 2 ), "Release" )
        ENDIF
        EXIT
      ENDIF
      DO EVENTS
   ENDDO
   DO EVENTS
ENDDO

MSGINFO ("ATENCION POR FAVOR, EMPEZARA EL JUEGO !")

FOR nCount := 1 TO Len( nAleatorio )

    DO WHILE PRINCE.BUTTON_3.Caption = "Continue"
        DO EVENTS
    ENDDO
    
    IF PRINCE.BUTTON_1.Caption = "S T A R T"
        EXIT
    ENDIF

   PINTANUME( nAleatorio [ nCount ], @nLine, @nColumn )
   
   @ nLine,nColumn LABEL &(StrZero ( nAleatorio [ nCount ], 2 )) PARENT PRINCE VALUE STRZero( nAleatorio [ nCount ], 2 ) WIDTH 74 HEIGHT 66 FONT "ALGERIAN" SIZE 48 BOLD FONTCOLOR BLACK BACKCOLOR {0,125,250}

   DO EVENTS
   
   
   PRINCE.L1.VALUE := cSalieron += " " + STRZero( nAleatorio [ nCount ], 2 ) 

   Speak ( nAleatorio [ nCount ] )

   DO EVENTS

   INKEY(0.5)				&& TIEMPO ENTRE UN NUMERO Y OTRO (SE LO PUEDE AMPLIAR)
   
NEXT

PRINCE.BUTTON_3.Caption := "PAUSE"
PRINCE.BUTTON_3.Enabled := .F.
PRINCE.BUTTON_1.Caption := "S T A R T"
PRINCE.BUTTON_1.SetFocus
DO EVENTS
RETURN

*-----------------
FUNCTION PINTANUME( nNum, nLine, nColumn )

IF nNum  >0  .AND. nNum < 16
   nLine=120 
ENDIF

IF nNum > 15 .AND. nNum < 31
   nLine=240 
ENDIF

IF nNum >=31  .AND. nNum <= 45
   nLine=360
ENDIF

IF nNum >= 46 .AND. nNum <= 60
   nLine=480
ENDIF

IF nNum >= 61 .AND. nNum <= 75
   nLine=600
ENDIF

IF nNum = 1 .OR. nNum = 16 .OR. nNum = 31 .OR. nNum = 46 .OR. nNum = 61 
   nColumn=0
ENDIF

IF nNum = 2 .OR. nNum = 17 .OR. nNum = 32 .OR. nNum = 47 .OR. nNum = 62
  nColumn=90
ENDIF

IF nNum = 3 .OR. nNum = 18 .OR. nNum = 33 .OR. nNum = 48 .OR. nNum = 63
  nColumn=180
ENDIF

IF nNum = 4 .OR. nNum = 19 .OR. nNum = 34 .OR. nNum = 49 .OR. nNum = 64 
   nColumn=270
ENDIF

IF nNum = 5 .OR. nNum = 20 .OR. nNum = 35 .OR. nNum = 50 .OR. nNum = 65 
 nColumn=360
ENDIF

IF nNum = 6 .OR. nNum = 21 .OR. nNum = 36 .OR. nNum = 51 .OR. nNum = 66
 nColumn=450
ENDIF

IF nNum = 7 .OR. nNum = 22 .OR. nNum = 37 .OR. nNum = 52 .OR. nNum = 67
 nColumn=540
ENDIF

IF nNum = 8 .OR. nNum = 23 .OR. nNum = 38 .OR. nNum = 53 .OR. nNum = 68
 nColumn=630
ENDIF

IF nNum = 9 .OR. nNum = 24 .OR. nNum = 39 .OR. nNum = 54 .OR. nNum = 69
   nColumn=720
ENDIF

IF nNum = 10 .OR. nNum = 25 .OR. nNum = 40 .OR. nNum = 55 .OR. nNum = 70
   nColumn=810
ENDIF

IF nNum = 11 .OR. nNum = 26 .OR. nNum = 41 .OR. nNum = 56 .OR. nNum = 71
   nColumn=900
ENDIF

IF nNum = 12 .OR. nNum = 27 .OR. nNum = 42 .OR. nNum = 57 .OR. nNum = 72
   nColumn=990
ENDIF

IF nNum = 13 .OR. nNum = 28 .OR. nNum = 43 .OR. nNum = 58 .OR. nNum = 73
   nColumn=1080
ENDIF

IF nNum = 14 .OR. nNum = 29 .OR. nNum = 44 .OR. nNum = 59 .OR. nNum = 74
   nColumn=1170
ENDIF

IF nNum = 15 .OR. nNum = 30 .OR. nNum = 45 .OR. nNum = 60 .OR. nNum = 75
   nColumn=1260
ENDIF
 
RETURN

*-------------
FUNCTION SALIR

PRINCE.RELEASE
QUIT
RETURN
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
edk
Posts: 914
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: JUEGO BINGO

Post by edk »

Puede simplificar aún más la función PINTANUME().

Code: Select all

*-----------------
FUNCTION PINTANUME( nNum, nLine, nColumn )
Local nMod 

nMod := nNum / 15
IF nMod == Int ( nMod )
    nMod --
ENDIF
nLine := ( Int( nMod ) + 1 ) * 120

nMod := nNum % 15
IF nMod = 0
    nMod := 15
ENDIF

nColumn := 15 + ( nMod - 1 ) * 90
 
RETURN
Daniel, no puedo cambiar la voz con la que se dicen los números. En mi sistema tiene dos voces, pero incluso cuando quiero asignar la primera voz (predeterminada), obtengo RTE. ¿Este también es tu caso? ¿Algunas ideas? El mismo problema ocurre cuando quiero cambiar a una salida de audio diferente.

Code: Select all

oVoice:Voice := oVoice:GetVoices():Item(0) 		//:Item (0) - 1st voice; :Item (1) - 2nd voice; etc.

oVoice:AudioOutput := oVoice:GetAudioOutputs():Item(0)  //:Item (0) - 1st output; :Item (1) - 2nd output; etc.
User avatar
danielmaximiliano
Posts: 2612
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: JUEGO BINGO

Post by danielmaximiliano »

Hola : en mi pc hay 3 narradores se pueden agregar mas pulsando Windows+ctrl+n en narradores agregar, tamb se puede modificar la salida predeterminada.

Code: Select all

*-------------
FUNCTION Volume
LOCAL oVoces, nFor, cDescription, nIndex
nIndex := 0

oVoice:Volume := PRINCE.Volumen.value
Speak ( "Volumen "+ str ( oVoice:Volume ), .F. )

 * list installed voices

  FOR EACH oVoces IN oVoice:GetVoices()
           cDescription = oVoces:GetDescription()
		   MSGinfo( cDescription, "Index : " + STR( nIndex, 2))
           nIndex := nIndex + 1
  ENDFOR

Return 
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
Post Reply