Site hosted by Angelfire.com: Build your free website today!

ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»      

º            ɻ˻ɻɻ˻ɻÉ˻ɻɻËɻɻɠ ɻ˻ɻɻËÉ»             º      

º            ̼̹ººº»Ì¹Ì¹ºÊºÌ¹º ºººººº  ººÌ¹Ì¹È»ºº              º      

º            Ê ÊÈȼȼÊÈÊÊÊ ÊÊÊȼÊȼ¼È¼  ȹʼÊÊȼÊȼ             º      

ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹      

º É˻ɻ˻»ÉË É»  É»  º                                          º      

º ºÊºººººººº ºº   ¹  º        PROGRAMACION ESTRUCTURADA         º      

º Ê Êȼʼȼȼȼ  ȼ  º                                          º      

ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹      

º                                                               º

º                 EN ESTA LECCION APRENDERAS...                 º      

º                                                               º      

º  ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿  º      

º  ³                                                         ³  º

º  ³  þ C¢mo la Programaci¢n Estructurada                    ³  º

º  ³    facilita el mantenimiento de los programas .....  2  ³  º

º  ³  þ C¢mo centralizar textos ........................  2  ³  º

º  ³  þ La sintaxis para la sentencia LOCATE ...........  4  ³  º

º  ³  þ La sintaxis para la sentencia SUB...............  5  ³  º

º  ³  þ C¢mo a¤adir color ..............................  6  ³  º

º  ³  þ La sintaxis para la sentencia COLOR ............  7  ³  º

º  ³  þ C¢mo a¤adir sonido .............................  9  ³  º

º  ³  þ La sintaxis para la sentencia SOUND ............  9  ³  º

º  ³                                                         ³  º

º  ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ  º

º                                                               º

ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹      

º É»Ë»Ë É»É»  ɻɻɻ º                                          º      

º ººÌ¹º Ì º    ¹ººÈ¹ º MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO º      

º ȹʼȼȼȼ  ȼȼȼ º                                          º      

ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ         


 

ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»      

º É»Ë»Ë É»É»  ɻɻɻ º                                          º      

º ººÌ¹º Ì º    ¹ººÈ¹ º MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO º      

º ȹʼȼȼȼ  ȼȼȼ º                                          º      

ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ         

 

 

                C¢MO LA PROGRAMACI¢N ESTRUCTURADA

                ----------------------------------

            FACILITA EL MANTENIMIENTO DE LOS PROGRAMAS

            ------------------------------------------

 

     Como habr s notado,  el programa de ADIVINA UN N£MERO, es un

programa  bien estructurado.   Los bloques de que est   compuesto

facilitan  su lectura y su mantenimiento,  de modo que  es  tarea

f cil el mejorarlo.  Y eso es lo que nos proponemos hacer ahora.

    

     Por  ejemplo,  ¨qu‚ tal si centralizamos los textos de  otra

forma que no  sea  a¤adiendo  espacios  en  blanco  a los mismos? 

Empecemos con la subrutina PresentaPrg...

    

SUB PresentaPrg

'--------------

CLS

 PRINT : PRINT : PRINT

 PRINT "                          QSoft PRESENTA"

 PRINT "                  EL JUEGO DE ADIVINA UN NUMERO"

 PRINT

 PRINT "                  Un programa escrito en QBasic"

 PRINT "                      por Reinaldo Acevedo"

 PRINT "             para las computadoras IBM y compatibles."

 PRINT : PRINT

 PRINT "                    DERECHOS RESERVADOS 1995"

 PRINT : PRINT : PRINT

 PRINT "                 PRESIONA ENTER PARA CONTINUAR."

  LET e$ = INPUT$(1)

END SUB

 

                     COMO CENTRALIZAR TEXTOS

                     -----------------------

    

     Para  aprender como centralizar textos sin tener que  a¤adir

espacios a los mismos, tomemos el siguiente texto...

 

     EL JUEGO DE ADIVINA UN NUMERO

     

     ...para  centralizar  en  pantalla.  Podemos proceder  de la

siguiente forma:

 

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB309       MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO        3 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     Primero,   contamos  el n£mero de caracteres  que  tiene  el

texto...

      

     EL JUEGO DE ADIVINA UN NUMERO

     ÀÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

                  ³

            29 caracteres

 

     Segundo,  si el ancho de pantalla (width) es 80, le a¤adimos

uno (despu‚s  ver s  por  qu‚)  y  le restamos a  ese n£mero, los

caracteres que tiene el texto, as¡...

    

     81 - 29 = 52

    

     ...52  es el n£mero de caracteres que faltan para llenar  la

l¡nea en pantalla. 

    

     Tercero,  dividimos la diferencia,  o  sea,  52  entre  dos,

as¡...

    

     52 / 2 = 26

 

     ...este  n£mero 26,  indica el lugar en la l¡nea que debemos

empezar imprimir (PRINT) la l¡nea de caracteres...

 

                  EL JUEGO DE ADIVINA UN NUMERO                 

ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>26

 

      ...para que quede centralizado.

 

     Lo que acamos de hacer, se resumir¡a de la siguiente forma:

 

     (ancho de pantalla + 1 - largo del texto) / 2 

     (      80          +1  - 29             ) / 2

             ÀÄÄÄÄÄÂÄÄÄÄÄÙ

     (             81       - 29             ) / 2

 

     (81 - 29) / 2 = 26

 

     Ahora bien,   para imprimir un texto en una fila (row) y  en

una  columna  (column)   en la pantalla del monitor,   existe una

sentencia  llamada LOCATE (localiza)  que lleva a cabo esta tarea

f cilmente.  Su sintaxis es...

     

   LOCATE  [row%] [,[column%] [,[cursor%] [,start% [,stop%]]]]

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB309       MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO        4 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     ...pero s¢lo considraremos aqu¡, la sintaxis simple...

 

                  ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

                  ³ LOCATE  [row%] [,[column%] ³

                  ÀÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÙ

                            fila     columna

                   ÚÄÄÄÄÄÄÄÄÄÙ          ³

                   ³  ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

            LOCATE 4, 1: PRINT "­CARAMBA, ADIVINASTE!"

    

     ...y,  luego en una lecci¢n posterior,  los dem s par metros

de esta sentencia.

    

     Una  cosa  que hay que aclarar es, que los par metros  row y

column,   no  pueden  ser 0.   Tienen que ser uno o m s,   de  lo

contrario, la sentencia LOCATE no funcionar¡a.   Esta es la raz¢n

por la que a¤adimos un 1 al ancho de pantalla de 80.   Si el  row

fuera uno y el largo del texto fuera 80,  entonces 80 - 80  =  0. 

Es  decir la columna donde se empezar¡a a imprimir el texto es 0,

y si utilizas LOCATE para imprimirlo tendr¡as...

    

     LOCATE 1, 0

    

     ...y  como puedes ver,  esto no funciona,   deteni‚ndose  el

programa con un aviso de error. 

    

     Utilizando  esta sentencia,  podemos desarrollar una f¢rmula

general   para   centralizar  textos.    Pues  esta  es  la   que

desarrollamos...

    

               LOCATE row, INT(81 - LEN(txt$)) / 2

                           ÀÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÙ

                                   column

 

     Observa,   c¢mo  en esta f¢rmula,  el par metro column  est 

sustituido  por  la  f¢rmula de centralizaci¢n  que  acabamos  de

explicar.   Lo £nico es que est  generalizada.   En vez del largo

del texto, escribimos LEN(txt$);   y   el ancho  de la l¡nea,  lo

representamos con  el n£mero 81.   Adem s para indicar  que  s¢lo

queremos  un  n£mero ¡ntegro (entero)  incluimos la  funci¢n  INT

estudiada en una lecci¢n anterior.

    

     Pues  bien,   esta f¢rmula general podemos incluirla en  una

subrutina, de modo que siempre que queramos centralizar un texto,

recurramos a ella.  Pues esta es la subrutina de que hablamos...

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB309       MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO        5 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

'Esta subrutina centraliza el texto cuando

'la pantalla tiene un ancho de 80 chrs.

'

SUB Ctr80txt (row, txt$)

'-----------------------

 LOCATE row, INT(81 - LEN(txt$)) / 2

 PRINT txt$;

END SUB

    

     Observa  cu n particular es esta subrutina.   Nota  los  dos

par metros que le siguen al nombre: row y txt$.   Decid¡ llamarla

Ctr80txt   (centraliza   texto  en  ancho  de  pantalla   de   80

caracteres), porque tambi‚n hice una rutina similar,  para usarse

cuando el ancho de pantalla es de 40  caracteres (width=40) y que

llam‚ Ctr40txt...

    

'Esta subrutina centraliza el texto cuando

'la pantalla tiene un ancho de 40 chrs.

'

SUB Ctr40txt (row, txt$)

'-----------------------

 LOCATE row, INT(41 - LEN(txt$)) / 2

 PRINT txt$;

END SUB

     

     Nota,   adem s,  que a¤ad¡ antes de las subrutinas,   l¡neas

REM'S  en  forma de comillas que las explican.    Cuando  guardas

(save)  el programa, la subrutinas quedan definidas delante de la

rutina principal de la siguiente forma:

    

DECLARE SUB Ctr40txt (row!, txt$)

DECLARE SUB Ctr80txt (row!, txt$)

      

     La  sintaxis completa para SUB  es la siguiente:

                                                                   

  Variables a ser pasadas a la subrutina cuando es llamada         

        ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿          ³\                                

        ³     ÚÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÅÄÄ\ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿  permite a    

        ³     ³ SUB name[(parameterlist)] [STATIC] ÅÄ variables    

  Nombre de la³   [statementblock]  ³              ³  locales      

   subrutina  ³ END SUB             ³              ³  retener su   

        ³     ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ  valor entre  

        ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿         ³                 llamadas     

                         \³/       \³/

                  SUB Ctr80txt (row, txt$)                

                  '-----------------------                

                   LOCATE row, INT(41 - LEN(txt$)) / 2    

                   PRINT txt$;                            

                  END SUB                                 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB309       MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO        6 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     Ejemplo de c¢mo se llama la subrutina anterior:      

 

                  Ctr80txt 4, "QSoft PRESENTA"

                            ³  ÀÄÄÄÄÄÄÂÄÄÄÄÄÄÙ

                           row       txt$

 

     Ahora, observa, c¢mo la subrutina Ctr80txt, es llamada en la

subrutina... 

 

SUB PresentaPrg

'--------------

CLS

  Ctr80txt 4, "QSoft PRESENTA"

  Ctr80txt 6, "EL JUEGO DE ADIVINA UN NUMERO"

  Ctr80txt 8, "Un programa escrito en QBasic"

  Ctr80txt 9, "por Reinaldo Acevedo"

  Ctr80txt 10, "para las computadoras IBM y compatibles."

  Ctr80txt 12, "DERECHOS RESERVADOS 1995"

  Ctr80txt 17, "PRESIONA ENTER PARA CONTINUAR."

  LET e$ = INPUT$(1)

END SUB

 

     Puedes ver c¢mo el par metro row (fila)  ha sido  sustituido

por el valor actual de la fila y el par metro txt$, por la cadena

actual  del texto que se quiere centralizar.   Como  puedes  ver,

usando   las  subrutinas  Ctr80txt  y  Ctr40txt  no  tienes   que

preocuparte  en  calcular  el  lugar donde  el  texto  tiene  que

comenzar  para que se centralize.   Lo £nico que tienes que hacer,

es  indicar la fila en que quieres imprimir el texto as¡ como  el

texto mismo.

    

                         A¥ADIENDO COLOR

                         ---------------

 

     Otra  forma  de mejorar el programa ADIVINA UN  N£MERO,   es

a¤adi‚ndole color al mismo.  Estudia la subrutina siguiente, para

que veas c¢mo le a¤adimos color a los textos de la misma...

    

SUB PresentaPrg

'--------------

CLS

COLOR 12, 0

  Ctr80txt 4, "QSoft PRESENTA"

COLOR 11, 0

  Ctr80txt 6, "EL JUEGO DE ADIVINA UN NUMERO"

COLOR 2, 0

  Ctr80txt 8, "Un programa escrito en QBasic"

  Ctr80txt 9, "por Reinaldo Acevedo"

  Ctr80txt 10, "para las computadoras IBM y compatibles."


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB309       MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO        7 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

COLOR 12, 0

  Ctr80txt 12, "DERECHOS RESERVADOS 1995"

COLOR 3, 0

  Ctr80txt 17, "PRESIONA ENTER PARA CONTINUAR."

  LET e$ = INPUT$(1)

END SUB

 

       Por supuesto,  que se necesita un monitor a color para que

esto  sea posible.   La sentencia sensilla que  se  usa para  dar

color en el MODO DE PANTALLA 0  (SCREEN  0, para texto solamente)

es... 

 

                      frente de la           fondo de la

                       pantalla            Ú pantalla  

             ÚÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄ¿

             ³ COLOR [foreground%] [,[background%] ³

             ÀÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÙ

                          ÀÄÄ¿  ÚÄÄÄÄÄÄÄÄÄÄÙ

                             ³  ³

                       COLOR 2, 0        

                             ³  ³        

                     verde <ÄÙ  ÀÄ> negro

 

     Si tienes un monitor monocr¢mico,  despu‚s de establecer  la

pantalla en SCREEN 0, los siguientes colores son para el frente:

     

     0    Negro

     1    caracter subrayado en fondo blanco

     2-6  Formas de gris

     7    Blanco

 

     Si a¤ades 8 al n£mero del color seleccionado, los caracteres

estar n  en  alta  intensidad.   Si quieres  que  tus  caracteres

pesta¤een,  a¤adele 16 al n£mero del color seleccionado.  He aqu¡

un ejemplo:

 

CLS:SCREEN 0:WIDTH 80     

COLOR 23,0                 

  PRINT "BLINk"           

COLOR 7,0                 

COLOR 15,0                

  PRINT "HIGH INTENSITY"  

COLOR 7,0                 

 

 

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB309       MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO        8 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     Si  tienes  un monitor a color,  los siguientes colores  son

tanto para el frente como el fondo:

    

0  Negro        8   Gris                    Nota aqu¡ que, al  

1  Azul    ÄÄÄ> 9   Azul Claro              a¤adir 8 al n£mero

2  Verde   ÄÄÄ> 10  Verde Claro             del color selec-   

3  Cyan    ÄÄÄ> 11  Cyan Claro              cionado, obtendr s 

4  Rojo    ÄÄÄ> 12  Rojo Claro              el color en alta   

5  Magenta ÄÄÄ> 13  Magenta Claro           intensidad         

6  Marr¢n  ÄÄÄ> 14  Amarillo                       ³           

7  Blanco  ÄÄÄ> 15  Blanco de Alta-Intensidad ÄÄÄÄÄÙ    

 

     En  otras  lecciones,  cuando tratemos el  modo  gr fico  de

pantalla,   veremos  las otras formas de esta sintaxis.    Ahora,

veamos  un  peque¤o  programa  que  ilustra  la sentencia  COLOR. 

Dig¡talo y ejec£talo. Si quieres,   puedes experimentar cambiando

los par metros del mismo. 

 

10 CLS : SCREEN 0: WIDTH 40

20 COLOR 7, 0

30    PRINT "         SCREEN 0: WIDTH 40"

40 PRINT

100 COLOR 1: PRINT "COLOR 1,0      AZUL SOBRE NEGRO"

110 COLOR 2: PRINT "COLOR 2,0      VERDE SOBRE NEGRO"

120 COLOR 3: PRINT "COLOR 3,0      CYAN SOBRE NEGRO"

130 COLOR 4: PRINT "COLOR 4,0      ROJO SOBRE NEGRO"

140 COLOR 5: PRINT "COLOR 5,0      MAGENTA SOBRE NEGRO"

150 COLOR 6: PRINT "COLOR 6,0      MARRON SOBRE NEGRO"

160 COLOR 7: PRINT "COLOR 7,0      BLANCO SOBRE NEGRO"

170 COLOR 8: PRINT "COLOR 8,0      GRIS SOBRE NEGRO"

180 COLOR 9: PRINT "COLOR 9,0      AZUL CLARO SOBRE NEGRO"

190 COLOR 10: PRINT "COLOR 10,0     VERDE CLARO SOBRE NEGRO"

200 COLOR 11: PRINT "COLOR 11,0     CYAN CLARO SOBRE NEGRO"

210 COLOR 12: PRINT "COLOR 12,0     ROJO CLARO SOBRE NEGRO"

220 COLOR 13: PRINT "COLOR 13,0     MAGENTA CLARO SOBRE NEGRO"

230 COLOR 14: PRINT "COLOR 14,0     AMARILLO SOBRE NEGRO"

240 COLOR 15: PRINT "COLOR 15,0     BLANCO CLARO SOBRE NEGRO"

      

     Al final de esta lecci¢n,  tendr s el programa  ADIVINA  UN

N£MERO  ya  mejorado.    Estudia  detenidamente c¢mo  se  us¢ la

sentencia COLOR  para darle color al mismo.   Te recomiendo  que

hagas los cambios correspodientes para  a¤adirle color al que ya

digitaste anteriormente.    Es mejor que lo hagas subrutina  por

subrutina,  de modo que veas la diferencia entre ellas, a medida

que  las  vayas cambiando.   Lo mismo te  recomiendo  cuando  le

a¤adas sonido.  Este es nuestro pr¢ximo asunto a considerar. 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB309       MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO        9 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

                         A¥ADIENDO SONIDO

                         ----------------

 

     Otra  cosa  que  podemos hacer para mejorar el  programa  es

a¤adirle sonido.  Nota c¢mo en la subrutina PresentaPrg que vimos

anteriormente,    se  llama  a  una  nueva  subrutina  denominada

TocaMusica, y que reproducimos aqu¡...

 

SUB TocaMusica

'-------------

RepiteMusica:

  RANDOMIZE TIMER

  SOUND RND * 1000 + 37, 2

  k$ = INKEY$

  IF k$ = "" THEN GOTO RepiteMusica

EndRepiteMusica:

END SUB

 

     F¡jate en el sentencia SOUND, que explicaremos  ahora,  pero

que en  una  lecci¢n  posterior abundaremos con m s detalles.  Su

sintaxis es...

 

                                       duraci¢n del sonido    

                                    Es el n£mero de ticks del  

                                    relog del sistema que dura 

             37 to 32767            del sonido.                  

       frecuencia del sonido <Ä¿          Va de 0 a 65,535      

               en Hertz        ³      un segundo = 18.2 ticks      

          va de 37 a 32767     ³                ³                 

                               ³         ÚÄÄÄÄÄÄÙ                

                   ÚÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄ¿

                   ³ SOUND frequency, duration ³

                   ÀÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÙ

                               ÀÄÄ¿  ÚÄÄÄÙ

                           SOUND 880,32 

 

 

     Ahora  encotrar s  el  programa ADIVINA UN  N£MERO  con  las

mejoras  hechas  hasta  el  momento.    Busca  el  que   cargaste

anteriormente, y hazle las mejoras que ves en este.

 

     En  la  pr¢xima  lecci¢n mejorearemos el  programa  a£n  m s

convirtiendo  los  bloques  estructurales que  aparecen  en  esta

versi¢n del programa a  las estructuras de bucles y de ramas  que

usa el QBasic.  ­Hasta entonces, pues!

 

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB309       MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO       10 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

DECLARE SUB TocaMusica ()

DECLARE SUB Ctr40txt (row!, txt$)

DECLARE SUB Ctr80txt (row!, txt$)

DECLARE SUB DiSiAdivinaste ()

DECLARE SUB DaOrejita ()

DECLARE SUB DiIntentalo ()

DECLARE SUB DiQueAdivinaste ()

DECLARE SUB DiQueNoAdivinaste ()

DECLARE SUB HazPausa ()

DECLARE SUB Despidete ()

DECLARE SUB RepiteJuego ()

DECLARE SUB Adivinalo ()

DECLARE SUB PiensaNumero ()

DECLARE SUB DaInstrucciones ()

DECLARE SUB PresentaPrg ()

 

'Variables compartidas.

  DIM SHARED turno

  DIM SHARED numero.pensado

  DIM SHARED tu.numero

  DIM SHARED numero$

 

REM Juego de Adivina un N£mero

REM --------------------------

CLS : SCREEN 0: WIDTH 80

  PresentaPrg

  DaInstrucciones

  PiensaNumero

  Adivinalo

  DiSiAdivinaste

  RepiteJuego

  Despidete

END

 

SUB Adivinalo

'------------

CLS : SCREEN 0: WIDTH 40

  LET turno = 1

RepiteTurno:

  CLS

  COLOR 10, 0: LOCATE 1, 15: PRINT "LLEVAS";

  COLOR 13, 0: PRINT turno;

  COLOR 10, 0: PRINT "TURNOS DE ";

  COLOR 13, 0: PRINT "10"

  PRINT : PRINT

  COLOR 12, 0: LINE INPUT "¨QUE NUMERO PENSE "; numero$

  LET tu.numero = VAL(numero$)

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB309       MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO       11 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

    IF tu.numero = numero.pensado OR turno = 10 THEN

      GOTO TerminaTurno

    END IF

  DaOrejita

  LET turno = turno + 1

  GOTO RepiteTurno

TerminaTurno:

END SUB

 

'Esta subrutina centraliza el texto cuando

'la pantalla tiene un ancho de 40 chrs.

'

SUB Ctr40txt (row, txt$)

'-----------------------

 LOCATE row, INT(41 - LEN(txt$)) / 2

 PRINT txt$;

END SUB

 

'Esta subrutina centraliza el texto cuando

'la pantalla tiene un ancho de 80 chrs.

'

SUB Ctr80txt (row, txt$)

'-----------------------

 LOCATE row, INT(81 - LEN(txt$)) / 2

 PRINT txt$;

END SUB

 

SUB DaInstrucciones

'------------------

CLS

COLOR 12, 0

  Ctr80txt 4, "***  INSTRUCCIONES  ***"

COLOR 10, 0

  Ctr80txt 7, "LA COMPUTADORA TE PEDIRA "

  Ctr80txt 9, "QUE ADVINES UN NUMERO DEL 1 AL 100."

  Ctr80txt 11, "TIENES DIEZ OPORTUNIDADES"

  Ctr80txt 13, "PARA ADIVINARLO,"

  Ctr80txt 15, "AL CABO DE LAS CUALES"

  Ctr80txt 17, "TE DIRA SI LO ADIVINASTE O NO."

COLOR 12, 0

  Ctr80txt 20, "PRESIONA ENTER PARA CONTINUAR."

  LET e$ = INPUT$(1)

END SUB

 

SUB DaOrejita

'------------

PRINT

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB309       MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO       12 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

  IF tu.numero < numero.pensado THEN

    GOTO DiNumeroEsMayor

  END IF

DiNumeroEsMenor:

  COLOR 13, 0: PRINT "NO, EL NUMERO ES MENOR QUE";

  COLOR 12, 0: PRINT tu.numero

  GOTO TerminaOrejita

DiNumeroEsMayor:

  COLOR 13, 0: PRINT "NO, EL NUMERO ES MAYOR QUE";

  COLOR 12, 0: PRINT tu.numero

TerminaOrejita:

  PRINT : COLOR 27, 0: PRINT "INTENTALO OTRA VEZ"

  PRINT : PRINT : PRINT : PRINT : PRINT

COLOR 10, 0: PRINT "PRESIONA ENTER PARA CONTINUAR."

  LET e$ = INPUT$(1)

END SUB

 

SUB Despidete

'------------

CLS

 COLOR 10, 0: Ctr40txt 5, "ESPERO QUE TE HAYAS DIVERTIDO"

 COLOR 12, 0: Ctr40txt 7, "­HASTA LUEGO!"

END SUB

 

SUB DiQueAdivinaste

'------------------

COLOR 12, 0

 LOCATE 4, 1: PRINT "­CARAMBA, ADIVINASTE!"

COLOR 13, 0

 LOCATE 7, 3: PRINT "EL NUMERO ES"; numero.pensado

 LOCATE 9, 3: PRINT "LO ADIVINASTE EN"; turno; "TURNOS DE"; 10

 LOCATE 11, 3: PRINT "O EN UN"; INT((turno / 10) * 100);

 PRINT "% "; "DE LOS TURNOS"

END SUB

 

SUB DiQueNoAdivinaste

'--------------------

COLOR 11, 0

 LOCATE 4, 1: PRINT "LO SIENTO, NO LO ADIVINASTE."

COLOR 15, 0

 LOCATE 6, 1: PRINT "EL NUMERO PENSADO ES ";

COLOR 12, 0

 PRINT numero.pensado

END SUB

 

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB309       MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO       13 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

SUB DiSiAdivinaste

'-----------------

CLS

 IF tu.numero = numero.pensado THEN

  GOTO Adivinaste

 END IF

NoAdivinaste:

  DiQueNoAdivinaste

  GOTO TerminaMensaje

Adivinaste:

  DiQueAdivinaste

TerminaMensaje:

END SUB

 

SUB HazPausa

'-----------

  LET Pausa = 0

RepitePausa:

  LET Pausa = Pausa + 1

  IF Pausa = 6000 THEN GOTO TerminaPausa

  GOTO RepitePausa

TerminaPausa:

END SUB

 

SUB PiensaNumero

'---------------

CLS : SCREEN 0: WIDTH 40

  RANDOMIZE TIMER

   LET numero.pensado = INT(RND * 100) + 1

COLOR 11, 0

  Ctr40txt 3, "ESTOY PENSANDO EN UN"

  Ctr40txt 5, "NUMERO DEL 1 AL 100."

COLOR 13, 0

  Ctr40txt 7, "POR FAVOR, ESPERA UN POCO..."

  HazPausa

COLOR 10, 0

  Ctr40txt 10, "­YA LO PENSE!"

COLOR 11, 0

  Ctr40txt 13, "PRESIONA ENTER PARA CONTINUAR."

  LET e$ = INPUT$(1)

END SUB

 

SUB PresentaPrg

'--------------

CLS

COLOR 12, 0

 Ctr80txt 4, "QSoft PRESENTA"

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB309       MEJORANDO EL PROGRAMA  ADIVINA UN NUMERO       14 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

COLOR 11, 0

  Ctr80txt 6, "EL JUEGO DE ADIVINA UN NUMERO"

COLOR 2, 0

  Ctr80txt 8, "Un programa escrito en QBasic"

  Ctr80txt 9, "por Reinaldo Acevedo"

  Ctr80txt 10, "para las computadoras IBM y compatibles."

COLOR 12, 0

  Ctr80txt 12, "DERECHOS RESERVADOS 1995"

COLOR 3, 0

  Ctr80txt 17, "PRESIONA ENTER PARA CONTINUAR."

TocaMusica

END SUB

 

SUB RepiteJuego

'--------------

Decidete:

COLOR 10, 0

 LOCATE 14, 1: PRINT STRING$(40, " ")

 LOCATE 14, 1: LINE INPUT "QUIERES JUGAR OTRA VEZ (S/N)"; decision$

   IF decision$ = "S" OR decision$ = "s" THEN RUN 'Juego otra vez.

   IF decision$ = "N" OR decision$ = "n" THEN GOTO TerminaDecision

 GOTO Decidete 'otra vez.

TerminaDecision:

END SUB

 

SUB TocaMusica

'-------------

RepiteMusica:

 RANDOMIZE TIMER

 SOUND RND * 1000 + 37, 2

 k$ = INKEY$

 IF k$ = "" THEN GOTO RepiteMusica

EndRepiteMusica:

END SUB

 

 

 

 

Arriba     Contenido