SONIDO
Otra cualidad que tienen los video juegos,
son la parte sonora, ya sean efectos de sonido o música de fondo.
Small basic nos provee de algunos sonidos que
utilizaré en esta ocasión, (aunque también nos permite utilizar sonidos
personalizados como el formato MP3). Voy a utilizar un sonido para el
"clic" y otro para el fin del juego.
El sonido que utilizaré para el
"clic" será el que provee la operación Sound.PlayChimes(). Para el
fin del juego (Cuando se traza una línea sobre las figuras) utilizaré la
operación Sound.PlayBellRing(). Poner ambos sonidos es relativamente sencillo.
El primero que voy a poner será el sonido para el fin del juego. Este irá
ubicado en la siguiente parte:
'raya horizontal superior
If matriz[1][1] + matriz[1][2] + matriz[1][3] = 3 Or matriz[1][1] + matriz[1][2] + matriz[1][3] = 27 Then
GraphicsWindow.PenWidth = 5
GraphicsWindow.DrawLine(50,85,320,85)
RellenaMatriz()
Reinicio()
Sound.PlayBellRing()
EndIf
Esa línea de código debe agregarse a cada
condición que dibuje la línea que marca el final del juego.
Lo siguiente es agregar la operación para dar
un sonido al "clic". Para ello, debe agregarse esta única línea:
'raya horizontal superior
If matriz[1][1] + matriz[1][2] + matriz[1][3] = 3 Or matriz[1][1] + matriz[1][2] + matriz[1][3] = 27 Then
GraphicsWindow.PenWidth = 5
GraphicsWindow.DrawLine(50,85,320,85)
RellenaMatriz()
Reinicio()
Sound.PlayBellRing()
Else
Sound.PlayChimes()
EndIf
Cuando digo única, me refiero a que esta condición
"else" solamente debe escribirse en esta zona y nada más, ya que al
llamarse a la función y verificar que la condición es falsa, se ejecutará esta
operación.
Y listo, creo que con esto ya podemos por dar
por terminado nuestro primer juego.
Como siempre, ahora voy a publicar el código
completo de este juego. Saludos.
Sub inicio
interruptor = 1
GraphicsWindow.MouseDown = clicX
GraphicsWindow.Width = 370
GraphicsWindow.Height = 300
GraphicsWindow.PenWidth = 2
GraphicsWindow.PenColor = "Green"
GraphicsWindow.CanResize = "no"
'lineas horizontales
GraphicsWindow.DrawLine(80,110,290,110)
GraphicsWindow.DrawLine(80,170,290,170)
'lineas verticales
GraphicsWindow.DrawLine(150,60,150,220)
GraphicsWindow.DrawLine(220,60,220,220)
'Matriz de 3 x 3 de ceros
'X = 1
'O = 9
'11 12 13
'21 22 23
'31 32 33
For fila = 1 To 3
For columna = 1 To 3
matriz[fila][columna] =
0
EndFor
EndFor
EndSub
inicio()
Sub clicX
If Math.Remainder(interruptor,2) <> 0 Then
figuraX()
EndIf
If Math.Remainder(interruptor,2) = 0 Then
figuraO()
EndIf
EndSub
Sub inter
interruptor = interruptor + 1
If interruptor
= 10 Then
Reinicio()
EndIf
EndSub
Sub FiguraX
GraphicsWindow.PenColor = "Blue"
gmX = GraphicsWindow.MouseX
gmY = GraphicsWindow.MouseY
'ubicacion 1,1
If gmX >= 85 And gmX <= 145 And gmY >= 65 And gmY <= 105 Then
If matriz[1][1] = 0 Then
GraphicsWindow.DrawLine(100,70,130,100)
GraphicsWindow.DrawLine(100,100,130,70)
matriz[1][1] = 1
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 1,2
If gmX >= 155 And gmX <= 215 And gmY >= 65 And gmY <= 105 Then
If matriz[1][2] = 0 Then
GraphicsWindow.DrawLine(170,70,200,100)
GraphicsWindow.DrawLine(170,100,200,70)
matriz[1][2] = 1
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 1,3
If gmX >= 225 And gmX <= 285 And gmY >= 65 And gmY <= 105 Then
If matriz[1][3] = 0 Then
GraphicsWindow.DrawLine(240,70,270,100)
GraphicsWindow.DrawLine(240,100,270,70)
matriz[1][3] = 1
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 2,1
If gmX >= 85 And gmX <= 145 And gmY >= 115 And gmY <= 165 Then
If matriz[2][1] = 0 Then
GraphicsWindow.DrawLine(100,125,130,155)
GraphicsWindow.DrawLine(100,155,130,125)
matriz[2][1] = 1
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 2,2
If gmX >= 155 And gmX <= 215 And gmY >= 115 And gmY <= 165 Then
If matriz[2][2] = 0 Then
GraphicsWindow.DrawLine(170,125,200,155)
GraphicsWindow.DrawLine(170,155,200,125)
matriz[2][2] = 1
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 2,3
If gmX >= 225 And gmX <= 285 And gmY >= 115 And gmY <= 165 Then
If matriz[2][3] = 0 Then
GraphicsWindow.DrawLine(240,125,270,155)
GraphicsWindow.DrawLine(240,155,270,125)
matriz[2][3] = 1
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 3,1
If gmX >= 85 And gmX <= 145 And gmY >= 175 And gmY <= 215 Then
If matriz[3][1] = 0 Then
GraphicsWindow.DrawLine(100,180,130,210)
GraphicsWindow.DrawLine(100,210,130,180)
matriz[3][1] = 1
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 3,2
If gmX >= 155 And gmX <= 215 And gmY >= 175 And gmY <= 215 Then
If matriz[3][2] = 0 Then
GraphicsWindow.DrawLine(170,180,200,210)
GraphicsWindow.DrawLine(170,210,200,180)
matriz[3][2] = 1
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 3,3
If gmX >= 225 And gmX <= 285 And gmY >= 175 And gmY <= 215 Then
If matriz[3][3] = 0 Then
GraphicsWindow.DrawLine(240,180,270,210)
GraphicsWindow.DrawLine(240,210,270,180)
matriz[3][3] = 1
inter()
SumaMatriz()
EndIf
EndIf
EndSub
Sub FiguraO
GraphicsWindow.PenColor = "Red"
gwX = GraphicsWindow.MouseX
gwY = GraphicsWindow.MouseY
'ubicacion 1,1
If gwX >= 85 And gwX <= 145 And gwY >= 65 And gwY <= 105 Then
If matriz[1][1] = 0 Then
GraphicsWindow.DrawEllipse(100,70,30,30)
matriz[1][1] = 9
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 1,2
If gwX >= 155 And gwX <= 215 And gwY >= 65 And gwY <= 105 Then
If matriz[1][2] = 0 Then
GraphicsWindow.DrawEllipse(170,70,30,30)
matriz[1][2] = 9
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 1,3
If gwX >= 225 And gwX <= 285 And gwY >= 65 And gwY <= 105 Then
If matriz[1][3] = 0 Then
GraphicsWindow.DrawEllipse(240,70,30,30)
matriz[1][3] = 9
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 2,1
If gwX >= 85 And gwX <= 145 And gwY >= 115 And gwY <= 165 Then
If matriz[2][1] = 0 Then
GraphicsWindow.DrawEllipse(100,125,30,30)
matriz[2][1] = 9
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 2,2
If gwX >= 155 And gwX <= 215 And gwY >= 115 And gwY <= 165 Then
If matriz[2][2] = 0 Then
GraphicsWindow.DrawEllipse(170,125,30,30)
matriz[2][2] = 9
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 2,3
If gwX >= 225 And gwX <= 285 And gwY >= 115 And gwY <= 165 Then
If matriz[2][3] = 0 Then
GraphicsWindow.DrawEllipse(240,125,30,30)
matriz[2][3] = 9
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 3,1
If gwX >= 85 And gwX <= 145 And gwY >= 175 And gwY <= 215 Then
If matriz[3][1] = 0 Then
GraphicsWindow.DrawEllipse(100,180,30,30)
matriz[3][1] = 9
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 3,2
If gwX >= 155 And gwX <= 215 And gwY >= 175 And gwY <= 215 Then
If matriz[3][2] = 0 Then
GraphicsWindow.DrawEllipse(170,180,30,30)
matriz[3][2] = 9
inter()
SumaMatriz()
EndIf
EndIf
'ubicacion 3,3
If gwX >= 225 And gwX <= 285 And gwY >= 175 And gwY <= 215 Then
If matriz[3][3] = 0 Then
GraphicsWindow.DrawEllipse(240,180,30,30)
matriz[3][3] = 9
inter()
SumaMatriz()
EndIf
EndIf
EndSub
Sub SumaMatriz'Y raya
final****************************************************
'raya horizontal superior
If matriz[1][1] + matriz[1][2] + matriz[1][3] = 3 Or matriz[1][1] + matriz[1][2] + matriz[1][3] = 27 Then
GraphicsWindow.PenWidth = 5
GraphicsWindow.DrawLine(50,85,320,85)
RellenaMatriz()
Reinicio()
Sound.PlayBellRing()
Else
Sound.PlayChimes()
EndIf
'raya horizontal media
If matriz[2][1] + matriz[2][2] + matriz[2][3] = 3 Or matriz[2][1] + matriz[2][2] + matriz[2][3] = 27 Then
GraphicsWindow.PenWidth = 5
GraphicsWindow.DrawLine(50,140,320,140)
RellenaMatriz()
Reinicio()
Sound.PlayBellRing()
EndIf
'raya horizontal inferior
If matriz[3][1] + matriz[3][2] + matriz[3][3] = 3 Or matriz[3][1] + matriz[3][2] + matriz[3][3] = 27 Then
GraphicsWindow.PenWidth = 5
GraphicsWindow.DrawLine(50,195,320,195)
RellenaMatriz()
Reinicio()
Sound.PlayBellRing()
EndIf
'raya vertical izquierda
If matriz[1][1] + matriz[2][1] + matriz[3][1] = 3 Or matriz[1][1] + matriz[2][1] + matriz[3][1] = 27 Then
GraphicsWindow.PenWidth = 5
GraphicsWindow.DrawLine(115,30,115,250)
RellenaMatriz()
Reinicio()
Sound.PlayBellRing()
EndIf
'raya vertical centro
If matriz[1][2] + matriz[2][2] + matriz[3][2] = 3 Or matriz[1][2] + matriz[2][2] + matriz[3][2] = 27 Then
GraphicsWindow.PenWidth = 5
GraphicsWindow.DrawLine(185,30,185,250)
RellenaMatriz()
Reinicio()
Sound.PlayBellRing()
EndIf
'raya vertical derecha
If matriz[1][3] + matriz[2][3] + matriz[3][3] = 3 Or matriz[1][3] + matriz[2][3] + matriz[3][3] = 27 Then
GraphicsWindow.PenWidth = 5
GraphicsWindow.DrawLine(255,30,255,250)
RellenaMatriz()
Reinicio()
Sound.PlayBellRing()
EndIf
'raya diagonal sup. izq. a der.
If matriz[1][1] + matriz[2][2] + matriz[3][3] = 3 Or matriz[1][1] + matriz[2][2] + matriz[3][3] = 27 Then
GraphicsWindow.PenWidth = 5
GraphicsWindow.DrawLine(90,60,280,220)
RellenaMatriz()
Reinicio()
Sound.PlayBellRing()
EndIf
'raya diagonal inf. izq. a der.
If matriz[3][1] + matriz[2][2] + matriz[1][3] = 3 Or matriz[3][1] + matriz[2][2] + matriz[1][3] = 27 Then
GraphicsWindow.PenWidth = 5
GraphicsWindow.DrawLine(90,220,280,60)
RellenaMatriz()
Reinicio()
Sound.PlayBellRing()
EndIf
EndSub
'Detener
clic*********************************************************
Sub RellenaMatriz
For fila = 1 To 3
For columna = 1 To 3
matriz[fila][columna] =
2
EndFor
EndFor
EndSub
'Boton reiniciar
Sub Reinicio
Controls.AddButton("Reiniciar",150,240)
Controls.ButtonClicked = BtnReinicio
EndSub
Sub BtnReinicio
GraphicsWindow.Clear()
inicio()
EndSub
Este pequeño juego lo publiqué en la página de small basic bajo el siguiente enlace:
http://smallbasic.com/smallbasic.com/program/?QNX227
En estos momentos me encuentro desarrollando una actualización de este juego en la cual incluyo una opción para poder jugar contra la CPU. Además me gustaría incluir un sistema de puntajes para ver quien va ganando.
Esto es todo por ahora. Saludos
Version.
//Actualización.
Se agrega modo para un jugador y se publica con codigo WMG259 y en la web con la dirección
http://smallbasic.com/smallbasic.com/program/?
Version.
//Actualización.
Se agrega modo para un jugador y se publica con codigo WMG259 y en la web con la dirección
http://smallbasic.com/smallbasic.com/program/?
Gustavo J. Cerda Nilo
Julio 2016, Octubre 2016
:v
ResponderEliminarHola, Gus :)
ResponderEliminarAnte todo, te agradezco mucho que te hayas tomado el trabajo monumental de publicar tus experiencias en SB. Me está siendo muy útil. Veo que hace años que has dejado este hilo, pero espero que aún estés por ahí...
Soy un antiguo aficionado a la programación, aunque la he tenido abandonada muchos años, y ahora ya no veo compiladores para mis lenguajes, y, dado que necesito hacer un programa determinado, me he animado a empezar con SB.
Tengo un problema muy concreto, y no encuentro nada en internet que me funcione; necesito saber si un fichero determinado está en un directorio o no está, para saber si puedo leer de él o he de crearlo inicializando sus datos. He probado con el objeto File, pero no hay manera de que me dé un resultado; tampoco me funcionan las detecciones de errores con la propiedad LastError. Por el momento me estoy apañando de mala manera arrancando con un .BAT y la función IFEXIST, pero es una cochinada :P.
Quisiera saber si podrías publicar algún breve ejemplo de subrutina para localizar un fichero determinado y guardar el resultado en alguna variable que yo pueda usar.
Gracias de nuevo por tu trabajo y saludos cordiales :)