You are on page 1of 364

Microsoft Small Basic

Introduccin a la programacin

Pgina 1 de 364

Captulo 1

Introduccin
Small Basic y la programacin
En informtica, se define la programacin como el proceso de crear aplicaciones para ordenador
utilizando lenguajes de programacin. De la misma manera que los humanos hablamos y entendemos
ingls, espaol o francs, los ordenadores entienden programas escritos en ciertos idiomas. Estos se
denominan lenguajes de programacin. Al principio slo haba unos pocos lenguajes de programacin y
eran muy fciles de aprender y entender. Pero a medida que los ordenadores y el software se han
vuelto cada vez ms sofisticados, los lenguajes de programacin evolucionaron rpidamente,
volvindose cada vez ms complejos. El resultado es que los ms modernos lenguajes de programacin
y sus conceptos son bastante difciles de comprender para un principiante. Esto ha desalentado a
muchas personas a aprender o intentar programar.
Small Basic es un lenguaje de programacin que est diseado para hacer la programacin muy sencilla,
accesible y divertida para los principiantes. El objetivo de Small Basic es romper cualquier barrera y
servir de piedra angular para el increble mundo de la programacin.

El entorno de Small Basic


Empecemos con una breve introduccin al entorno de Small Basic. Cuando lance SB.exe por primera vez,
se encontrar con una ventana parecida a la siguiente figura.

Pgina 2 de 364

Figura 1 - El entorno de Small Basic

Este es el entorno de Small Basic, donde escribiremos y ejecutaremos los programas de Small Basic. Este
entorno contiene varios elementos distintos identificados con nmeros.
El Editor, identificado con [1], es el lugar donde escribiremos nuestros programas de Small Basic.
Cuando abra un programa de ejemplo u otro guardado previamente, aparecer en el editor. Una vez
abierto, puede modificarlo y guardarlo para usos posteriores.
Tambin puede abrir y trabajar con ms de un programa a la vez. Cada programa aparecer en un editor
distinto. El editor que contiene el programa en el que est trabajando se denomina editor activo.
La Barra de herramientas, identificada con [2], se utiliza para emitir comandos bien al editor activo o al
entorno. Veremos los distintos comandos de la barra de herramientas segn vayamos avanzando.
La Superficie, identificada con [3], es el lugar donde se encuentran todas las ventanas del editor.

Nuestro primer programa


Ahora que ya se encuentra familiarizado con el entorno de Small Basic, empecemos a programar en l.
Como se indic anteriormente, el editor es el lugar donde escribiremos nuestros programas. Escriba la
siguiente lnea en el editor.
TextWindow.WriteLine("Hola mundo")
Este es nuestro primer programa de Small Basic. Si lo ha tecleado correctamente, ver algo parecido a la
siguiente figura.

Pgina 3 de 364

Figura 2 - Nuestro primer programa

Ahora que hemos escrito nuestro primer programa, vamos a ejecutarlo y ver qu pasa. Podemos
ejecutar un programa bien haciendo clic en el botn Ejecutar de la barra de herramientas o utilizando la
tecla de mtodo abreviado F5 del teclado. Si todo va bien, nuestro programa debera ejecutarse con el
resultado siguiente.

Figura 3 - Nuestro primer resultado

Enhorabuena! Acaba de escribir y ejecutar su


primer programa de Small Basic. Es cierto que es
un programa pequeo y sencillo, pero es un gran
paso para convertirse en un verdadero
programador informtico! Slo un detalle ms
antes de crear programas ms grandes. Necesita
entender qu es lo que hemos hecho. Qu le
hemos dicho al ordenador que haga y cmo saba

Mientras tecleaba su primer programa, puede


que se haya dado cuenta que le ha aparecido
un men contextual con una lista de elementos
(Figura 4). Esto se llama "Intellisense" y le
ayuda a programar ms rpido. Puede ir a
travs de la lista presionando las teclas de las
fechas arriba y abajo. Cuando encuentre lo que
desee, presione la tecla Entrar para insertar el
elemento seleccionado en su programa.

Pgina 4 de 364

el ordenador qu hacer? En el siguiente captulo analizaremos el programa que acabamos de escribir


para poder alcanzar dicho entendimiento.

Figura 4 - Intellisense

Guardando nuestro programa


Si desea cerrar Small Basic y volver ms tarde al programa que acaba de escribir, tiene que guardarlo. Es
una buena prctica guardar los programas de vez en cuando, para no perder ninguna informacin en el
caso de que el ordenador se apague accidentalmente o haya un corte de luz. Puede guardar el programa
actual haciendo clic en el icono Guardar de la barra de herramientas o utilizando el mtodo abreviado
CTRL+S (pulse la tecla "S" mientras mantiene pulsada la tecla CTRL).

Pgina 5 de 364

Captulo 2

Entendiendo nuestro primer programa


Qu es realmente un programa de ordenador?
Un programa es un conjunto de instrucciones para el ordenador. Dichas instrucciones indican con
precisin al ordenador lo que hacer y el ordenador siempre las sigue. Al igual que la gente, los
ordenadores slo siguen instrucciones si se especifican en un idioma o lenguaje que puedan entender.
Estos se denominan lenguajes de programacin. Hay muchos lenguajes que los ordenadores entienden y
Small Basic es uno de ellos.
Imagine una conversacin entre usted y un amigo. Usted y su amigo utilizan palabras, organizadas en
frases para intercambiar informacin. De la misma manera, los lenguajes de programacin contienen
conjuntos de palabras que pueden organizarse en frases para transmitir informacin al ordenador. Los
programas son bsicamente grupos de frases
Hay muchos lenguajes que los ordenadores
(algunas veces unas pocas y otras miles) que,
entienden. Java, C++, Python, VB, etc. son
juntas, tienen sentido por igual tanto para el
todos potentes lenguajes de programacin
programador como para el ordenador.
modernos que pueden utilizarse para crear
tanto programas simples como complejos.

Los programas de Small Basic


Un programa tpico de Small Basic consiste en un
conjunto de instrucciones. Cada lnea del
programa representa una instruccin y cada
instruccin es una orden para el ordenador. Cuando pedimos al ordenador que ejecute un programa de
Small Basic, lee la primera instruccin del programa. Entiende lo que le pedimos y ejecuta la instruccin.
Una vez que ha ejecutado la primera instruccin, vuelve al programa para leer y ejecutar la segunda
instruccin. Y as contina hasta alcanzar el final del programa. Es entonces cuando nuestro programa
termina.

Pgina 6 de 364

Un repaso a nuestro primer programa


He aqu el primer programa que escribi:
TextWindow.WriteLine("Hola mundo")
Es un programa muy simple que consiste en una nica instruccin. Dicha instruccin pide al ordenador
que escriba una lnea de texto (WriteLine) que es Hola mundo en la ventana de texto (TextWindow).
Esta instruccin se traduce en el ordenador como:
Escribir (Write) Hola mundo
Probablemente se haya dado cuenta que la instruccin se puede dividir en segmentos ms pequeos de
la misma manera que las frases se pueden dividir en palabras. La primera instruccin contiene 3
segmentos distintos:
a) TextWindow
b) WriteLine
c) Hola mundo
El punto, los parntesis y las comillas son signos de puntuacin que hay que poner en lugares concretos
en la instruccin para que el ordenador pueda entender nuestras intenciones.
Probablemente usted recuerde que una ventana de color negro apareci cuando ejecutamos nuestro
primer programa. La ventana de color negro se llama TextWindow aunque a veces tambin se denomina
la consola. Dicha ventana es el lugar donde se muestra el resultado del programa. En nuestro programa,
TextWindow se denomina objeto. Un buen nmero de objetos se encuentran disponibles para utilizar
en sus programas. Podemos realizar varias
operaciones con dichos objetos. Ya hemos
Los signos de puntuacin tales como comillas,
utilizado la operacin WriteLine en nuestro
espacios y parntesis son muy importantes en
programa. Probablemente tambin se haya dado
un programa de ordenador. Pueden cambiar el
cuenta de que a la operacin WriteLine le sigue
significado basados en su posicin y nmero.
Hola mundo entre comillas. Este texto se pasa
como entrada a la operacin WriteLine. Esto se
denomina entrada de la operacin. Algunas
operaciones admiten una o ms entradas
mientras que otras no admiten ninguna.

Nuestro segundo programa


Ahora que ya hemos examinado nuestro primer programa, vamos a darle una nota de color.

Pgina 7 de 364

TextWindow.ForegroundColor = "Yellow"
TextWindow.WriteLine("Hola mundo")

Figura 5 - Agregar colores

Cuando ejecute el programa anterior, notar que imprime el mismo mensaje que antes ("Hola mundo ")
dentro de la ventana de texto (TextWindow), pero esta vez la imprime en amarillo (Yellow) en lugar de
en gris.

Figura 6 - Hola mundo en amarillo

Para ello, hemos agregado una nueva instruccin al programa original. Utiliza una nueva palabra
ForegroundColor (color de fondo) al que se le asigna Yellow (amarillo). Esto significa que se asigna
Yellow a ForegroundColor. La diferencia entre las operaciones ForegroundColor y WriteLine es que
ForegroundColor no admite ningn parmetro y, por tanto, no necesita parntesis. En su lugar, le sigue
un smbolo igual que (=) y una palabra. ForegroundColor se define como una propiedad de TextWindow.
He aqu una lista de valores que son vlidos para la propiedad ForegroundColor. Reemplace Yellow con
uno de los siguientes valores y observe los resultados. No se olvide de las comillas ya que son
imprescindibles.

Pgina 8 de 364

Black
Blue
Cyan
Gray
Green
Magenta
Red
White
Yellow
DarkBlue
DarkCyan
DarkGray
DarkGreen
DarkMagenta
DarkRed
DarkYellow

Pgina 9 de 364

Captulo 3

Introduccin a las variables


Usar variables en nuestro programa
Sera bueno que nuestro programa pudiera decir Hola con el nombre real del usuario, en lugar de
decir genricamente Hola mundo, no? Para lograr esto, primero debemos preguntar al usuario su
nombre, luego almacenarlo en algn lugar y, finalmente, imprimir Hola seguido del nombre del
usuario. Vamos a ver cmo podemos hacerlo:
TextWindow.Write("Escriba su nombre: ")
nombre = TextWindow.Read() 'Leer
TextWindow.WriteLine("Hola " + nombre)
Cuando escriba y ejecute este programa, ver una salida como la siguiente:

Figura 7 - Preguntar el nombre del usuario

Pgina 10 de 364

Y cuando escriba su nombre y oprima la tecla Entrar, ver la siguiente salida:

Figura 8 Un clido saludo

Ahora, si ejecuta el programa otra vez, se le har la misma pregunta nuevamente. Puede escribir un
nombre diferente y el equipo dir Hola a ese nombre.

Anlisis del programa


En el programa que acaba de ejecutar, la lnea que puede haber captado su atencin es esta:
nombre = TextWindow.Read()
Read es igual que WriteLine, pero sin entradas. Es
una operacin y bsicamente dice al equipo que
espere que el usuario escriba algo y presione la
tecla Entrar.

Write (escribir)y WriteLine son operaciones de


TextWindow. Write le permite escribir algo en
la TextWindow y que el siguiente texto se
escriba en la misma lnea que el texto actual.

Una vez que el usuario oprime Entrar, toma lo


que el usuario haya escrito y lo devuelve al
programa. El punto interesante es que lo que haya escrito el usuario est ahora almacenado en una
variable llamada nombre. Una variable se define como un lugar donde puede guardar valores
temporalmente y usarlos ms tarde. En la lnea de arriba, la variable nombre fue usada para guardar el
nombre del usuario.
La siguiente lnea tambin es interesante:
TextWindow.WriteLine("Hola " + nombre)
Este es el lugar donde usamos el valor almacenado en nuestra variable, nombre. Tomamos el valor de
nombre, lo agregamos a continuacin de Hola y lo escribimos en la TextWindow.

Pgina 11 de 364

Una vez que la variable est asignada, es decir, cuando se guarda un valor en una variable, puede volver
a utilizarla cuantas veces quiera. Por ejemplo, puede hacer lo siguiente:
TextWindow.Write("Escriba su nombre: ")
nombre = TextWindow.Read()
TextWindow.Write("Hola " + nombre + ". ")
TextWindow.WriteLine("Cmo est " + nombre + "?")
Y ver la siguiente salida:

Figura 9 Reutilizando una variable

Jugando con los nmeros


Acabamos de ver cmo puede usar variables para almacenar el nombre del usuario. En los siguientes
programas, ver cmo puede almacenar y manipular nmeros en variables. Vamos a comenzar con un
programa realmente simple:
nmero1 = 20
nmero2 = 10
nmero3 = nmero1 + nmero2
TextWindow.WriteLine(nmero3)
Cuando ejecute este programa obtendr lo siguiente como salida:

Figura 10 Sumando dos nmeros

Pgina 12 de 364

En la primera lnea del programa, se asigna a la variable nmero1 un valor de 20. Y en la segunda lnea,
se asigna a la variable nmero2 un valor de 10. En
la tercera lnea, se suma nmero1 y nmero2, y
se asigna el resultado de la suma a nmero3. Por
tanto, la variable nmero3 tendr un valor de 30.
Y eso es lo que imprimimos en la TextWindow.

Note que los nmeros no estn rodeados por


comillas. Para los nmeros, las comillas no son
necesarias. Necesita comillas slo cuando est
usando texto.

Ahora vamos a modificar ligeramente este programa y veamos los resultados:


nmero1 = 20
nmero2 = 10
nmero3 = nmero1 * nmero2
TextWindow.WriteLine(nmero3)
El programa de arriba multiplica nmero1 por nmero2 y almacena el resultado en nmero3. Puede ver
el resultado de este programa aqu debajo:

Figura 11 Multiplicando dos nmeros

De la misma forma, puede restar o dividir dos nmeros. Aqu est la resta:
nmero3 = nmero1 - nmero2
El smbolo para la divisin es /. El programa resultar similar a este:
nmero3 = nmero1 / nmero2
Y el resultado de la divisin ser:

Pgina 13 de 364

Figura 12 Dividiendo dos nmeros

Un convertidor de temperatura simple


Para el siguiente programa usaremos la frmula

para convertir temperaturas en

Fahrenheit a temperaturas en Celsius.


Primero, obtendremos la temperatura en Fahrenheit del usuario y la almacenaremos en una variable.
Hay una operacin especial que nos permite leer los nmeros que escribe el usuario y es
TextWindow.ReadNumber (leer nmero).
TextWindow.Write("Introduczca la temperatura en Fahrenheit: ")
fahr = TextWindow.ReadNumber()
Una vez que tenemos la temperatura en Fahrenheit almacenada en una variable, podemos convertirla a
Celsius as:
celsius = 5 * (fahr - 32) / 9
Los parntesis dicen al equipo que calcule la parte fahr 32 primero y luego procese el resto. Ahora
todo lo que tenemos que hacer es imprimir el resultado al usuario. Poniendo junto todo esto,
obtenemos este programa:
TextWindow.Write("Introduczca la temperatura en Fahrenheit: ")
fahr = TextWindow.ReadNumber()
celsius = 5 * (fahr - 32) / 9
TextWindow.WriteLine("La temperatura en Celsius es " + celsius)
Y el resultado de este programa es:

Pgina 14 de 364

Figura 13 Conversin de temperatura

Pgina 15 de 364

Captulo 4

Condiciones y bifurcaciones
Volviendo a nuestro primer programa, no sera bueno que en lugar del genrico Hola mundo,
pudiramos decir "Buenos das mundo" o "Buenas tardes mundo", dependiendo de la hora del da? Para
nuestro prximo programa, haremos que el equipo diga "Buenos das mundo" si la hora es anterior a las
12:00 y "Buenas tardes mundo" si la hora es posterior a las 12:00.
If (Clock.Hour < 12) Then
TextWindow.WriteLine("Buenos das mundo")
EndIf
If (Clock.Hour >= 12) Then
TextWindow.WriteLine("Buenas tardes mundo")
EndIf
Dependiendo de cundo ejecute el programa ver una de las dos siguientes salidas:

Figura 14 Buenos das mundo

Pgina 16 de 364

Figura 15 Buenas tardes mundo

Vamos a analizar las primeras tres lneas del


programa. Ya se habr imaginado que estas lneas
En Small Basic, puede usar el objeto Clock
le dicen al equipo que si Clock.Hour es menor que
(Reloj) para tener acceso a la fecha y hora
12, imprima Buenos das mundo. Las palabas If,
actuales. Tambin provee una cantidad de
Then y EndIf son palabras especiales que
propiedades que permiten obtener el da (Day),
comprende el equipo cuando ejecuta el programa.
mes (Month), ao (Year), hora (Hour), minutos
La palabra If (si) siempre viene seguida de una
(Minutes) y segundos (Seconds) por separado.
condicin, que en este caso es (Clock.Hour < 12).
Recuerde que los parntesis son necesarios para
que el equipo entienda sus intenciones. La condicin es seguida por Then (entonces) y la operacin
real a ejecutar. Y despus de la operacin viene EndIf (final de la condicin If). Esto indica al equipo que
la ejecucin condicional ha terminado.
Entre Then y EndIf, puede haber ms de una operacin y el equipo las ejecutar todas si se cumple la
condicin. Por ejemplo, podra haber escrito algo como esto:
If (Clock.Hour < 12) Then
TextWindow.Write("Buenos das. ")
TextWindow.WriteLine("Cmo estuvo el desayuno?")
EndIf

Else
Puede que se haya dado cuenta que en el programa al comienzo de este captulo, la segunda condicin
es redundante. El valor de Clock.Hour puede ser menor que 12 o no y slo necesitamos hacer el segundo
control. En casos como este, podemos abreviar las dos instrucciones IfThenEndIf en una sola usando
una nueva palabra, Else (en caso lo contrario).
Si furamos a escribir el mismo programa usando Else, as es como quedara:

Pgina 17 de 364

If (Clock.Hour < 12) Then


TextWindow.WriteLine("Buenos das mundo")
Else
TextWindow.WriteLine("Buenas tardes mundo")
EndIf
Y este programa har exactamente lo mismo que el otro, lo que nos lleva a una leccin muy importante
en programacin de ordenadores:
En programacin, habitualmente hay muchas formas de hacer lo mismo. Algunas veces una
forma tiene ms sentido que la otra. La eleccin es del programador. A medida que escriba ms
programas y se vuelva ms experimentado, comenzar a notar las diferentes tcnicas y sus
ventajas y desventajas.

Sangra
En todos los ejemplos puede ver que las instrucciones entre If, Else y EndIf estn sangradas. Este
sangrado no es necesario. El equipo entender el programa perfectamente sin l. Sin embargo, las
sangras ayudan a ver y entender la estructura del programa ms fcilmente. Por lo tanto, se considera
una buena prctica sangrar las instrucciones entre esos bloques.

Par o impar
Ahora que tenemos las instrucciones IfThenElseEndIf en nuestra caja de herramientas, vamos a
escribir un programa que, dado un nmero, nos diga si es par o impar.
TextWindow.Write("Introduzca un nmero: ")
nmero = TextWindow.ReadNumber()
resto = Math.Remainder(nmero, 2)
If (resto = 0) Then
TextWindow.WriteLine("El nmero es par")
Else
TextWindow.WriteLine("El nmero es impar")
EndIf
Y cuando ejecute este programa, ver una salida como:

Pgina 18 de 364

Figura 16 Par o impar

En este programa hemos introducido una nueva operacin muy til, Math.Remainder (resultado de la
divisin). Efectivamente, como ya se podr haber imaginado, Math.Remainder dividir el primer nmero
por el segundo nmero y devolver el resultado.

Bifurcaciones
Recuerde que en el segundo captulo aprendimos que el equipo procesa un programa una instruccin
cada vez de arriba a abajo. No obstante, hay una instruccin especial que puede hacer que el equipo
salte a otra instruccin fuera de orden. Echemos un vistazo al siguiente programa.

Pgina 19 de 364

i = 1
comienzo:
TextWindow.WriteLine(i)
i = i + 1
If (i < 25) Then
Goto comienzo
EndIf

Figura 17 - Usando Goto

En el programa anterior, asignamos un valor 1 a la variable i. Y luego agregamos una nueva instruccin
que termina en dos puntos (:)
comienzo:
Esto es una etiqueta. Las etiquetas son marcadores que el equipo entiende. Puede darle al marcador
cualquier nombre y puede agregar tantas etiquetas como desee en su programa, siempre que los
nombres sean nicos.
Aqu hay otra instruccin interesante:
i = i + 1
Esto dice al equipo que sume 1 a la variable i y asigne el resultado nuevamente a i. Por lo tanto, si el
valor de i era 1 antes de esta instruccin, ser 2 una vez que se ejecute esta instruccin.

Pgina 20 de 364

Y finalmente:
If (i < 25) Then
Goto comienzo
EndIf
Esta es la parte que le dice al equipo que si el valor de i es menor que 25, comience a ejecutar las
instrucciones desde el marcador comienzo.

Ejecucin eterna
Usando la instruccin Goto puede hacer que el equipo repita algo cualquier nmero de veces. Por
ejemplo, puede modificar el programa de pares e impares como aparece ms abajo y el programa se
ejecutar para siempre. Puede detener el programa haciendo clic en el botn Cerrar (X) en la esquina
superior derecha de la ventana.

Pgina 21 de 364

comienzo:
TextWindow.Write("Introduzca un nmero: ")
nmero = TextWindow.ReadNumber()
resto = Math.Remainder(nmero, 2)
If (resto = 0) Then
TextWindow.WriteLine("El nmero es par")
Else
TextWindow.WriteLine("El nmero es impar")
EndIf
Goto comienzo

Figura 18 Par o impar ejecutado eternamente

Pgina 22 de 364

Captulo 5

Bucles
El bucle For
Tomemos el programa que escribimos en el captulo anterior.
i = 1
comienzo:
TextWindow.WriteLine(i)
i = i + 1
If (i < 25) Then
Goto comienzo
EndIf
Este programa imprime en orden los nmeros del 1 al 24. Este proceso de incrementar una variable es
tan comn en programacin que algunos lenguajes proveen un mtodo ms fcil de hacerlo. El
programa anterior es equivalente al siguiente programa:

Pgina 23 de 364

For i = 1 To 24
TextWindow.WriteLine(i)
EndFor
Y la salida es:

Figura 19 - Usando el bucle For

Note que hemos reducido un programa de 8 lneas a un programa de 4, y hace exactamente lo mismo
que el programa de 8 lneas! Recuerda que antes dijimos que habitualmente hay varias formas de
hacer la misma cosa? Este es un gran ejemplo.
For..EndFor se llama, en trminos de programacin, un bucle. Le permite tomar una variable, darle un
valor inicial y un valor final, y dejar que el equipo incremente el valor de la variable por usted. Cada vez
que el equipo incrementa la variable, ejecuta las instrucciones entre For y EndFor.
Pero si desea que la variable se incremente de 2 en 2, en lugar de 1 en 1 (supongamos que desea
imprimir todos los nmeros impares entre 1 y 24), tambin puede usar el bucle para hacerlo.

Pgina 24 de 364

For i = 1 To 24 Step 2
TextWindow.WriteLine(i)
EndFor

Figura 20 - Slo los nmeros impares

El Step 2 que forma la instruccin For dice al equipo que incremente el valor de i en 2 en lugar de 1
como siempre. Usando Step puede especificar cualquier incremento que desee. Hasta puede especificar
un valor negativo y hacer que el equipo cuente hacia atrs, como en el siguiente ejemplo:
For i = 10 To 1 Step -1
TextWindow.WriteLine(i)
EndFor

Figura 21 - Contando hacia atrs

El bucle While
El bucle While (mientras) es otro mtodo de repeticin, que es especialmente til cuando la cantidad de
repeticiones no se conoce por adelantado. Mientras el bucle For se ejecuta una cantidad predefinida de
veces, el bucle While se ejecuta mientras una condicin dada es cierta. En el siguiente ejemplo, estamos
dividiendo a la mitad un nmero mientras el resultado sea mayor que 1.

Pgina 25 de 364

nmero = 100
While (nmero > 1)
TextWindow.WriteLine(nmero)
nmero = nmero / 2
EndWhile

Figura 22 El bucle divisor

En el programa anterior, asignamos el valor 100 a


nmero y ejecutamos el bucle mientras nmero
sea mayor que 1. Dentro del bucle, imprimimos el
nmero y luego lo dividimos entre 2. Como caba
esperar, la salida del programa son nmeros que
progresivamente son la mitad del anterior.

De hecho, el equipo internamente escribe


nuevamente cada bucle While usando
instrucciones que usan If..Then junto con una o
ms instrucciones Goto

Sera realmente difcil escribir este programa


usando un bucle For, porque no sabemos cuntas
veces el bucle se ejecutar. Con un bucle While es fcil evaluar una condicin y preguntar al equipo si
hay que continuar con el bucle o terminarlo.
nmero = 100
etiquetaInicio:
TextWindow.WriteLine(nmero)
nmero = nmero / 2
If (nmero > 1) Then
Goto etiquetaInicio
EndIf

Pgina 26 de 364

Captulo 6

Comenzando con los grficos


Hasta ahora, en nuestros ejemplos hemos usado TextWindow para explicar los fundamentos del
lenguaje Small Basic. No obstante, Small Basic viene con un poderoso conjunto de capacidades grficas
que comenzaremos a explorar en este captulo.

Presentando GraphicsWindow
As como tenemos TextWindow, que nos permite trabajar con texto y nmeros, Small Basic tambin
tiene GraphicsWindow (ventana de grficos), que podemos usar para dibujar cosas. Vamos a comenzar
mostrando la GraphicsWindow.
GraphicsWindow.Show()
Cuando ejecute este programa, notar que en lugar de la habitual ventana negra de texto, obtiene una
ventana blanca como la que se muestra a continuacin. No hay mucho que hacer con esta ventana por
ahora, pero ser la ventana base sobre la cual trabajaremos en este captulo. Puede cerrar esta ventana
haciendo clic en el botn X en la esquina superior derecha.

Pgina 27 de 364

Figura 23 - Una ventana de grficos vaca

Configurando la ventana de grficos


La ventana de grficos le permite cambiar su apariencia como desee. Puede cambiar el ttulo, el fondo y
el tamao. Vamos a seguir adelante y modificarla un poco, slo para familiarizarnos con la ventana.

Pgina 28 de 364

GraphicsWindow.BackgroundColor = "SteelBlue"
GraphicsWindow.Title = "Mi ventana de grficos"
GraphicsWindow.Width = 320
GraphicsWindow.Height = 200
GraphicsWindow.Show()
As es como se ve la ventana configurada. Puede cambiar el color de fondo por uno de los diferentes
valores listados en el Apndice B. Juegue con estas propiedades para ver cmo puede modificar la
apariencia de la ventana.

Figura 24 - Una ventana de grficos a medida

Dibujando lneas
Una vez que tenemos abierta la GraphicsWindow, podemos dibujar figuras, texto y hasta imgenes en
ella. Vamos a comenzar dibujando algunas figuras simples. He aqu un programa que dibuja un par de
lneas en la ventana de grficos.

Pgina 29 de 364

GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
GraphicsWindow.DrawLine(10, 10, 100, 100)
GraphicsWindow.DrawLine(10, 100, 100, 10)

Figura 25 Lneas cruzadas

Las primeras dos lneas del programa configuran la ventana y las siguientes dos lneas dibujan las lneas
cruzadas. Los primeros dos nmeros que siguen a DrawLine (dibujar una lnea) especifican las
coordenadas X e Y iniciales y los otros especifican las coordenadas X e Y finales. Lo interesante de los
grficos de ordenador es que las coordenadas (0, 0) comienzan en la esquina superior izquierda de la
ventana. En efecto, el espacio de coordenadas de la ventana se considera que est en el segundo
cuadrante.

Figura 26 - El mapa de coordenadas

Volviendo al programa de las lneas, es interesante


mencionar que Small Basic le permite modificar las
propiedades de la lnea, tales como su color y su grosor.
Primero vamos a modificar el color de las lneas como
se muestra en el siguiente programa:

En vez de usar nombres para los colores, puede


usar la notacin de colores de la web
(#RRGGBB). Por ejemplo, #FF0000 es el rojo,
#FFFF00 el amarillo, y as sucesivamente.
Aprenderemos ms acerca de los colores en el
captulo Colores.

Pgina 30 de 364

GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
GraphicsWindow.PenColor = "Green"
GraphicsWindow.DrawLine(10, 10, 100, 100)
GraphicsWindow.PenColor = "Gold"
GraphicsWindow.DrawLine(10, 100, 100, 10)

Figura 27 - Cambiando el color de la lnea

Ahora, vamos a modificar tambin el tamao. En el siguiente programa, cambiamos el ancho de la lnea
a 10, en lugar del valor predeterminado, que es 1.
GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
GraphicsWindow.PenWidth = 10
GraphicsWindow.PenColor = "Green"
GraphicsWindow.DrawLine(10, 10, 100, 100)
GraphicsWindow.PenColor = "Gold"
GraphicsWindow.DrawLine(10, 100, 100, 10)

Figura 28 - Lneas gruesas y coloridas

Pgina 31 de 364

PenWidth (ancho del lpiz) y PenColor (color del lpiz) modifican el lpiz que dibuja esas lneas. No
afectan solamente a las lneas, sino a cualquier figura que se dibuje una vez que se modifican las
propiedades.
Usando las instrucciones de bucle que aprendimos en los captulos anteriores, podemos escribir
fcilmente un programa que dibuje mltiples lneas aumentando el grosor del lpiz.
GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.Width = 200
GraphicsWindow.Height = 160
GraphicsWindow.PenColor = "Blue"
For i = 1 To 10
GraphicsWindow.PenWidth = i
GraphicsWindow.DrawLine(20, i * 15, 180, i * 15)
EndFor

Figura 29 - Lpices de mltiples grosores

La parte interesante de este programa es el bucle, donde podemos aumentar PenWidth cada vez que se
ejecuta el bucle y luego dibujar una nueva lnea debajo de la anterior.

Dibujando y rellenando formas


Cuando tenemos que dibujar formas, normalmente hay dos tipos de operaciones para cada una. Son las
operaciones Draw de dibujo y las operaciones Fill de relleno. Las operaciones Draw dibujan el contorno
de la forma usando un lpiz, y las operaciones Fill rellenan la forma usando un lpiz. Por ejemplo, en el
siguiente programa hay dos rectngulos, uno que se dibuja usando un lpiz rojo y otro que se rellena
usando un lpiz verde.

Pgina 32 de 364

GraphicsWindow.Width = 400
GraphicsWindow.Height = 300
GraphicsWindow.PenColor = "Red"
GraphicsWindow.DrawRectangle(20, 20, 300, 60)
GraphicsWindow.BrushColor = "Green"
GraphicsWindow.FillRectangle(60, 100, 300, 60)

Figura 30 - Dibujando y rellenando

Para dibujar o rellenar un rectngulo necesita cuatro nmeros. Los primeros dos nmeros representan
las coordenadas X e Y del vrtice superior izquierdo del rectngulo. El tercer nmero especifica el ancho
del rectngulo, mientras que el cuarto especifica su altura. De hecho, lo mismo se aplica para dibujar y
rellenar elipses, como se muestra en el siguiente programa:

Pgina 33 de 364

GraphicsWindow.Width = 400
GraphicsWindow.Height = 300
GraphicsWindow.PenColor = "Red"
GraphicsWindow.DrawEllipse(20, 20, 300, 60)
GraphicsWindow.BrushColor = "Green"
GraphicsWindow.FillEllipse(60, 100, 300, 60)

Figura 31 - Dibujando y rellenando elipses

Los crculos son un tipo particular de elipse. Si desea dibujar crculos, tendr que especificar el mismo
ancho y alto.

Pgina 34 de 364

GraphicsWindow.Width = 400
GraphicsWindow.Height = 300
GraphicsWindow.PenColor = "Red"
GraphicsWindow.DrawEllipse(20, 20, 100, 100)
GraphicsWindow.BrushColor = "Green"
GraphicsWindow.FillEllipse(100, 100, 100, 100)

Figura 32 Crculos

Pgina 35 de 364

Captulo 7

Diversin con las formas


Vamos a divertirnos un poco en este captulo con lo que hemos aprendido hasta ahora. Este captulo
contiene ejemplos que muestran maneras interesantes de combinar todo lo que ha aprendido hasta
ahora para crear algunos programas atractivos.

Rectangular
Aqu dibujamos mltiples rectngulos en un bucle a la vez que aumentamos su tamao.

Pgina 36 de 364

GraphicsWindow.BackgroundColor = "Black" 'Negro


GraphicsWindow.PenColor = "LightBlue" 'Celeste
GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
For i = 1 To 100 Step 5
GraphicsWindow.DrawRectangle(100 - i, 100 - i, i * 2, i * 2)
EndFor

Figura 33 - Rectangular

Circular
Una variante del programa anterior, dibuja crculos en lugar de cuadrados.

Pgina 37 de 364

GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.PenColor = "LightGreen" 'Verde claro
GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
For i = 1 To 100 Step 5
GraphicsWindow.DrawEllipse(100 - i, 100 - i, i * 2, i * 2)
EndFor

Figura 34 Circular

Aleatorio
Este programa usa la operacin GraphicsWindow.GetRandomColor (obtener color al azar) para asignar
colores aleatorios al lpiz y luego usa Math.GetRandomNumber (obtener nmero al azar) para asignar
las coordenadas X e Y de los crculos. Estas dos operaciones se pueden combinar de maneras
interesantes para crear programas atractivos que dan diferentes resultados cada vez que se ejecutan.

Pgina 38 de 364

GraphicsWindow.BackgroundColor = "Black"
For i = 1 To 1000
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
x = Math.GetRandomNumber(640)
y = Math.GetRandomNumber(480)
GraphicsWindow.FillEllipse(x, y, 10, 10)
EndFor

Figura 35 Aleatorio

Fractales
El siguiente programa dibuja un simple tringulo fractal usando nmeros aleatorios. Un fractal es una
forma geomtrica que se puede subdividir en partes, cada una de las cuales se asemeja a la forma
original. En este caso, el programa dibuja cientos de tringulos cada uno de los cuales se asemeja a su
tringulo original. Y como el programa se ejecuta durante unos pocos segundos, puede ver en realidad
cmo se forman los tringulos a partir de simples puntitos. La lgica en s misma es en cierta forma
difcil de describir y dejaremos como ejercicio que pueda explorarla.

Pgina 39 de 364

GraphicsWindow.BackgroundColor = "Black"
x = 100
y = 100
For i = 1 To 100000
r = Math.GetRandomNumber(3)
ux = 150
uy = 30
If (r = 1) then
ux = 30
uy = 1000
EndIf
If (r = 2) Then
ux = 1000
uy = 1000
EndIf
x = (x + ux) / 2
y = (y + uy) / 2
GraphicsWindow.SetPixel(x, y, "LightGreen")
EndFor

Figura 36 - Tringulos fractales

Pgina 40 de 364

Si realmente desea ver los puntos formando lentamente el fractal, puede introducir un retraso en el
bucle mediante el uso de la operacin Program.Delay. Esta operacin recibe un nmero que especifica
cunto tiempo esperar, en milisegundos. Aqu est el programa modificado, con la lnea cambiada en
negrita.
GraphicsWindow.BackgroundColor = "Black"
x = 100
y = 100
For i = 1 To 100000
r = Math.GetRandomNumber(3)
ux = 150
uy = 30
If (r = 1) Then
ux = 30
uy = 1000
EndIf
If (r = 2) Then
ux = 1000
uy = 1000
EndIf
x = (x + ux) / 2
y = (y + uy) / 2
GraphicsWindow.SetPixel(x, y, "LightGreen") 'Poner pxel
Program.Delay(2) 'Demora
EndFor
Aumentar el retraso hace que el programa sea ms lento. Experimente con los nmeros para ver cul le
gusta ms.
Otra modificacin que puede hacer a este programa es reemplazar la siguiente lnea:
GraphicsWindow.SetPixel(x, y, "LightGreen")
con:

Pgina 41 de 364

color = GraphicsWindow.GetRandomColor()
GraphicsWindow.SetPixel(x, y, color)
Este cambio har que el programa dibuje los pxeles del tringulo usando colores aleatorios.

Pgina 42 de 364

Captulo 8

Tortuga grfica
Logo
En los aos 70, haba un lenguaje de programacin muy simple pero potente, llamado Logo, que era
usado por algunos investigadores. Esto fue hasta que alguien agreg al lenguaje lo que se llam la
tortuga grfica e hizo disponible una tortuga que era visible en la pantalla y responda a comandos
como muvete, ve hacia adelante o gira a la izquierda. Usando la tortuga, las personas eran
capaces de dibujar formas interesantes en la pantalla. Esto hizo que el lenguaje fuera inmediatamente
accesible y atractivo a personas de todas las edades y fue el principal responsable de su gran
popularidad en los aos 80.
Small Basic viene con un objeto Turtle (tortuga) con varios comandos que pueden ser llamados desde
programas de Small Basic. En este captulo, usaremos Turtle para dibujar grficos en la pantalla.

La tortuga
Para comenzar, necesitamos mostrar la tortuga en la pantalla. Esto se puede lograr con un programa de
una sola lnea.
Turtle.Show() 'Mostrar
Cuando ejecute este programa ver una ventana blanca, tal como la que vimos en el captulo anterior,
excepto que esta tiene una tortuga en su centro. Esta es la tortuga que seguir nuestras instrucciones y
dibujar lo que le pidamos.

Pgina 43 de 364

Figura 37 - La tortuga es visible

Moviendo y dibujando
Una de las instrucciones que Turtle entiende es Move (mover). Esta operacin toma un nmero como
entrada. Ese nmero le dice a Turtle cunto tiene que moverse. En el siguiente ejemplo, le pedimos a
Turtle que se mueva 100 pxeles.
Turtle.Move(100)
Cuando ejecute este programa, puede ver la
tortuga realmente moverse lentamente 100
pxeles hacia arriba. Mientras se mueve, tambin
ver que dibuja una lnea detrs de ella. Cuando
la tortuga ha terminado de moverse, el resultado
tendr el mismo aspecto que la siguiente figura.

Cuando use operaciones con Turtle, no es


necesario llamar a Show. La tortuga quedar
visible automticamente cuando se ejecuta
cualquier operacin con Turtle.

Pgina 44 de 364

Figura 38 - Movindose un centenar de pxeles

Dibujando un cuadrado
Un cuadrado tiene cuatro lados, dos verticales y dos horizontales. Para dibujar un cuadrado necesitamos
conseguir que la tortuga dibuje una lnea, gire a la derecha y dibuje otra lnea, y contine as hasta que
los cuatro lados del cuadrado estn terminados. Si traducimos esto en un programa, as es como queda:
Turtle.Move(100)
Turtle.TurnRight() 'Mover a la derecha
Turtle.Move(100)
Turtle.TurnRight()
Turtle.Move(100)
Turtle.TurnRight()
Turtle.Move(100)
Turtle.TurnRight()
Cuando ejecute este programa, puede ver la tortuga dibujando un cuadrado, una lnea cada vez, y el
resultado es igual al de la siguiente figura.

Pgina 45 de 364

Figura 39 - La tortuga dibujando un cuadrado

Es interesante mencionar que estamos realizando las mismas dos operaciones una y otra vez, cuatro
veces para ser ms precisos. Y ya hemos aprendido que tales comandos repetitivos pueden ser
ejecutados usando bucles. Por lo tanto, si tomamos el programa anterior y lo modificamos para usar el
bucle For..EndFor, lograremos un programa mucho ms simple.
For i = 1 To 4
Turtle.Move(100)
Turtle.TurnRight()
EndFor

Cambiando los colores


La tortuga dibuja en la misma GraphicsWindow que vimos en el captulo anterior. Esto significa que
todas las operaciones que aprendimos en el captulo anterior las podemos utilizar con la tortuga. Por
ejemplo, el siguiente programa dibujar un cuadrado con cada lado de un color diferente.

Pgina 46 de 364

For i = 1 To 4
GraphicsWindow.PenColor = GraphicsWindow.GetRandomColor()
'PenColor: color del lpiz; GetRandomColor: obtener color al azar
Turtle.Move(100)
Turtle.TurnRight()
EndFor

Figura 40 - Cambiando los colores

Dibujando formas ms complejas


Turtle, adems de las operaciones TurnRight (girar a la derecha) y TurnLeft (girar a la izquierda), tiene
una operacin Turn (girar). Esta operacin toma una entrada que especifica el ngulo de giro. Usando
esta operacin, es posible dibujar un polgono de cualquier cantidad de lados. El siguiente programa
dibuja un hexgono (un polgono de seis lados).
For i = 1 To 6
Turtle.Move(100)
Turtle.Turn(60)
EndFor
Pruebe este programa para ver si realmente dibuja un hexgono. Observe que como el ngulo entre los
lados es de 60 grados, usamos Turn(60). Para ese polgono, cuyos lados son todos iguales, el ngulo
entre los lados puede ser obtenido fcilmente dividiendo 360 entre el nmero de lados. Sabiendo de

Pgina 47 de 364

esta informacin y usando variables, podemos escribir un programa bastante genrico que dibuje un
polgono de cualquier cantidad de lados.
lados = 12
largo = 400 / lados
ngulo = 360 / lados
For i = 1 To lados
Turtle.Move(largo)
Turtle.Turn(ngulo)
EndFor
Usando este programa, puede dibujar cualquier polgono con slo modificar la variable lados. Poniendo
4 dibujar un cuadrado. Poniendo un valor suficientemente grande, digamos 50, el resultado ser similar
a un crculo.

Figura 41 - Dibujando un polgono de 12 lados

Usando la tcnica que acaba de aprender, puede hacer que la tortuga dibuje mltiples crculos, cada vez
con un pequeo giro, resultando en una salida interesante.

Pgina 48 de 364

lados = 50
largo = 400 / lados
ngulo = 360 / lados
Turtle.Speed = 9
For j = 1 To 20
For i = 1 To lados
Turtle.Move(largo)
Turtle.Turn(ngulo)
EndFor
Turtle.Turn(18)
EndFor
El programa anterior tiene dos bucles For..EndFor, uno dentro del otro. El bucle interior (i = 1 to lados)
es similar al del programa del polgono y es el
responsable de dibujar el crculo. El bucle exterior
En el programa anterior, hicimos que la tortuga
(j = 1 to 20) es el responsable de girar la tortuga
se moviera ms rpido, cambiado Speed
un poco cada vez que se dibuja el crculo. Esto
(velocidad) a 9. Puede asignar esta propiedad
dice a la tortuga que dibuje 20 crculos. Cuando se
con cualquier valor entre 1 y 10 para hacer que
ponen juntos, este programa resulta en un patrn
la tortuga se mueva tan rpido como desee.
muy interesante, como el que se muestra a
continuacin.

Pgina 49 de 364

Figura 42 - Yendo en crculos

Movindose por ah
Puede hacer que la tortuga no dibuje usado la operacin PenUp (subir el lpiz). Esto permite mover la
tortuga a cualquier lado de la pantalla sin que dibuje una lnea. Usando PenDown (bajar el lpiz) har
que la tortuga dibuje nuevamente. Esto se puede utilizar para obtener algunos efectos interesantes,
como por ejemplo, lneas punteadas. He aqu un programa que usa este concepto para dibujar un
polgono de lneas punteadas.

Pgina 50 de 364

lados = 6
largo = 400 / lados
ngulo = 360 / lados
For i = 1 To lados
For j = 1 To 6
Turtle.Move(largo / 12)
Turtle.PenUp()
Turtle.Move(largo / 12)
Turtle.PenDown()
EndFor
Turtle.Turn(ngulo)
EndFor
Nuevamente, este programa tiene dos bucles. El bucle interior dibuja una sola lnea punteada, mientras
que el bucle exterior indica cuntas lneas a dibujar. En nuestro ejemplo, hemos usado 6 para la variable
lados y por lo tanto tenemos un hexgono de lneas punteadas, como el que aparece a continuacin.

Figura 43 Usando PenUp y PenDown

Pgina 51 de 364

Captulo 9

Subrutinas
Muy frecuentemente, mientras escribimos programas encontramos casos donde tenemos que ejecutar
el mismo conjunto de pasos, una y otra vez. En estos casos, probablemente no tenga sentido volver a
escribir las mismas instrucciones varias veces. Es entonces cuando resultan tiles las subrutinas.
Una subrutina es una porcin de cdigo dentro de un programa ms grande que habitualmente hace
algo especfico, y que puede ser invocada desde cualquier parte del programa. Las subrutinas estn
identificadas por un nombre que sigue a la palabra clave Sub y terminan con la palabra clave EndSub.
Por ejemplo, el siguiente fragmento representa una subrutina cuyo nombre es ImprimirHora, y hace el
trabajo de imprimir la hora actual en la TextWindow.
Sub ImprimirHora
TextWindow.WriteLine(Clock.Time)
EndSub
A continuacin hay un programa que incluye la subrutina y la invoca desde varios lugares.

Pgina 52 de 364

ImprimirHora()
TextWindow.Write("Introduzca su nombre: ")
nombre = TextWindow.Read()
TextWindow.Write(nombre + ", la hora es: ")
ImprimirHora()
Sub ImprimirHora
TextWindow.WriteLine(Clock.Time)
EndSub

Figura 44 Invocando una subrutina simple

Usted ejecuta una subrutina invocando


NombreSubrutina(). Como siempre, los parntesis
()son necesarios para indicar al equipo que
quiere ejecutar una subrutina.

Recuerde, puede invocar una subrutina de


Small Basic solo desde el mismo programa. No
puede invocar una subrutina desde otro
programa.

Ventajas de usar subrutinas


Como acabamos de ver, las subrutinas ayudan a reducir la cantidad de cdigo que hay que escribir. Una
vez que tiene la subrutina ImprimirHora escrita, puede llamarla desde cualquier lado del programa, y
ella imprimir la hora actual.
Adems, las subrutinas pueden ayudar a descomponer problemas complejos en tareas ms simples.
Digamos que tiene una ecuacin compleja para resolver, puede escribir varias subrutinas que resuelvan
partes ms pequeas de la ecuacin compleja. Luego puede unir los resultados para obtener la solucin
a la ecuacin original.
Las subrutinas tambin pueden ayudar a mejorar la legibilidad de un programa. En otras palabras, si
utiliza buenos nombres para las partes del programa que se ejecutan frecuentemente, su programa
resulta fcil de leer y comprender. Esto es muy importante si pretende entender el programa de alguien
ms, o si quiere que su programa sea comprendido por otros. A veces, es til tambin cuando quiere
leer su propio programa, digamos una semana despus de escribirlo.

Pgina 53 de 364

Usando variables
Puede acceder y usar cualquier variable que tenga en un programa desde una subrutina. Por ejemplo, el
siguiente programa acepta dos nmeros e imprime el mayor de ellos. Note que la variable mx es usada
tanto dentro de la subrutina como fuera de ella.
TextWindow.Write("Introduzca el primer nmero: ")
nm1 = TextWindow.ReadNumber()
TextWindow.Write("Introduzca el segundo nmero: ")
nm2 = TextWindow.ReadNumber()
FindMax()
TextWindow.WriteLine("El mayor de los dos nmero es: " + mx)
Sub FindMax
If (nm1 > nm2) Then
mx = nm1
Else
mx = nm2
EndIf
EndSub
Y la salida de este programa es como sigue:

Figura 45 - El mayor de dos nmeros usando subrutinas

Tomemos otro ejemplo que ilustrar el uso de subrutinas. Este vez usaremos un programa grfico que
calcula varios puntos, que almacenar en variables x e y. Luego llama a la subrutina
DibujarCirculoUsandoCentro, que es responsable de dibujar un crculo usando x e y como centro.

Pgina 54 de 364

GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.PenColor = "LightBlue"
GraphicsWindow.Width = 480
For i = 0 To 6.4 Step 0.17
x = Math.Sin(i) * 100 + 200 'Seno'
y = Math.Cos(i) * 100 + 200 'Coseno'
DibujarCrculoUsandoCentro()
EndFor
Sub DibujarCrculoUsandoCentro
comienzoX = x - 40
comienzoY = y - 40
GraphicsWindow.DrawEllipse(comienzoX, comienzoY, 120, 120)
EndSub

Figura 46 Ejemplo grfico con subrutinas

Invocando subrutinas dentro de bucles


A veces las subrutinas son invocadas desde dentro de un bucle, durante el cual ejecutan el mismo
conjunto de instrucciones, pero con diferentes valores en una o ms de las variables. Por ejemplo,
digamos que tiene una subrutina llamada ComprobarPrimo y esta subrutina determina si un nmero es

Pgina 55 de 364

primo o no. Puede escribir un programa que permita al usuario introducir un valor y le indique si es
primo o no, usando esta subrutina. El siguiente programa muestra cmo hacerlo.
TextWindow.Write("Introduzca un nmero: ")
i = TextWindow.ReadNumber()
esPrimo = "Cierto"
ComprobarPrimo()
If (esPrimo = "Cierto") Then
TextWindow.WriteLine(i + " es un nmero primo")
Else
TextWindow.WriteLine(i + " no es un nmero primo")
EndIf
Sub ComprobarPrimo
For j = 2 To Math.SquareRoot(i)
If (Math.Remainder(i, j) = 0) Then
esPrimo = "Falso"
Goto FinBucle
EndIf
EndFor
FinBucle:
EndSub
La subrutina ComprobarPrimo toma el valor de i y trata de dividirlo por nmeros menores. Si un nmero
divide a i con resto cero, entonces i no es un nmero primo. En ese momento la subrutina asigna a
esPrimo el valor Falso y termina. Si el nmero no es divisible por nmeros ms pequeos, entonces el
valor de esPrimo permanece como Cierto.

Figura 47 Comprobando nmeros primos

Ahora que tiene una subrutina que puede hacer la prueba de nmeros primos por nosotros, puede
querer usarla para listar todos los nmeros primos menores que, digamos, 100. Es realmente fcil
modificar el programa anterior y hacer la invocacin de ComprobarPrimo dentro del bucle. Esto da a la

Pgina 56 de 364

subrutina diferentes valores para calcular, cada vez que el bucle se ejecuta. Veamos cmo hacer esto en
el siguiente ejemplo.
For i = 3 To 100
esPrimo = "Cierto"
ComprobarPrimo()
If (esPrimo = "Cierto") Then
TextWindow.WriteLine(i)
EndIf
EndFor
Sub ComprobarPrimo
For j = 2 To Math.SquareRoot(i)
If (Math.Remainder(i, j) = 0) Then
esPrimo = "Falso"
Goto FinLoop
EndIf
Endfor
FinLoop:
EndSub
En el programa anterior, se actualiza el valor de i cada vez que el bucle se ejecuta. Dentro del bucle, se
hace una invocacin a la subrutina ComprobarPrimo. La subrutina ComprobarPrimo entonces toma el
valor de i y calcula si i es o no un nmero primo. El resultado es almacenado en la variable esPrimo, a la
que se puede acceder en el bucle fuera de la subrutina. El valor de i se imprime si resulta un nmero
primo. Y como el bucle comienza en 3 y se incrementa hasta 100, tenemos una lista de los primeros
nmeros primos entre 3 y 100. Debajo aparece el resultado del programa.

Figura 48 Nmeros primos

Pgina 57 de 364

Captulo 10

Matrices
Ahora ya conoce a fondo cmo utilizar las variables, al fin y al cabo ha llegado hasta aqu y contina
divirtindose, verdad?
Vamos, por un momento, a volver a visitar el primer programa que escribimos con variables:
TextWindow.Write("Escriba su nombre: ")
nombre = TextWindow.Read()
TextWindow.WriteLine("Hola " + nombre)
En este programa, hemos recibido y almacenado el nombre del usuario en una variable llamada
nombre. A continuacin dijimos "Hola" al usuario. Ahora, imaginemos que hay ms de un usuario, por
ejemplo 5. Cmo almacenaramos todos sus nombres? Una forma de hacerlo sera:

Pgina 58 de 364

TextWindow.Write("Introduczca
nombre1 = TextWindow.Read()
TextWindow.Write("Introduczca
nombre2 = TextWindow.Read()
TextWindow.Write("Introduczca
nombre3 = TextWindow.Read()
TextWindow.Write("Introduczca
nombre4 = TextWindow.Read()
TextWindow.Write("Introduczca
nombre5 = TextWindow.Read()
TextWindow.Write("Hola ")
TextWindow.Write(nombre1 + ",
TextWindow.Write(nombre2 + ",
TextWindow.Write(nombre3 + ",
TextWindow.Write(nombre4 + ",
TextWindow.WriteLine(nombre5)

su nombre, usuario nmero 1: ")


su nombre, usuario nmero 2: ")
su nombre, usuario nmero 3: ")
su nombre, usuario nmero 4: ")
su nombre, usuario nmero 5: ")

")
")
")
")

Cuando ejecute el programa, obtendr el siguiente resultado:

Figura 49 Sin utilizar matrices

Tiene que haber una manera mejor de escribir un programa de este tipo tan sencillo, verdad? Sobre
todo porque el ordenador es realmente bueno ejecutando tareas repetitivas, por qu tenemos que
molestarnos con escribir el mismo cdigo una y otra vez para cada nuevo usuario? El truco est en
almacenar y recuperar el nombre de ms de un usuario utilizando la misma variable. Si podemos hacer
eso, entonces podemos utilizar un bucle For que ya aprendimos en captulos anteriores. Aqu es donde
las matrices vienen al rescate.

Qu es una matriz?
Una matriz es un tipo de variable que puede contener ms de un valor en cada momento. En otras
palabras, lo que esto significa es que en lugar de tener que crear las variables nombre1, nombre2,
name3, name4 y name5 para poder almacenar cinco nombres de usuario, podemos utilizar slo nombre

Pgina 59 de 364

para almacenar el nombre de los cinco usuarios. La forma de almacenar varios valores es utilizando un
"ndice". Por ejemplo, nombre[1], nombre[2], nombre[3], nombre[4] y nombre[5] pueden almacenar
un valor de cada una. Los nmeros 1, 2, 3, 4 y 5 se denominan ndices de la matriz.
A pesar de que nombre[1], nombre[2], nombre[3], nombre[4] y nombre[5] parecen diferentes
variables, en realidad son todas la misma variable. Se puede estar preguntando y cul es la ventaja de
todo esto? Lo mejor de almacenar valores en una matriz es que puede especificar el ndice, utilizando
una variable, lo que permite acceder fcilmente a matrices dentro de bucles.
Ahora, veamos cmo podemos poner nuestros nuevos conocimientos en prctica para reescribir
nuestro programa anterior con matrices.
For i = 1 To 5
TextWindow.Write("Introduczca su nombre, usuario nmero " + i + ": ")
nombre[i] = TextWindow.Read()
EndFor
TextWindow.Write("Hola ")
For i = 1 To 5
TextWindow.Write(nombre[i] + ", ")
EndFor
TextWindow.WriteLine("")
Much easier to read, isnt it? Notice the two bolded lines. The first one stores a value in the array and
the second one reads it from the array. The value you store in name[1] will not be affected by what you
store in name[2]. Hence for most purposes you can treat name[1] and name[2] as two different
variables with the same identity.
Mucho ms fcil de leer, verdad? Tenga en cuenta las dos lneas en negrita. La primera almacena un
valor de la matriz y la segunda lee de la matriz. El valor que se almacena en nombre[1] no se ver
afectado por el que se almacena en nombre[2]. Por lo tanto para la mayora de los propsitos se pueden
tratar nombre[1] y nombre[2] como dos variables distintas con la misma identidad.

Figura 50 Utilizando matrices

Pgina 60 de 364

The above program gives almost the exact same result as the one without arrays, except for the comma
at the end of Mantis. We can fix that by rewriting the printing loop as:
El programa anterior produce casi el mismo resultado que el que escribimos sin matrices, excepto por la
coma al final de Mercedes. Podemos arreglando simplemente reescribiendo el bucle de impresin de
esta forma:
TextWindow.Write("Hola ")
For i = 1 To 5
TextWindow.Write(nombre[i])
If i < 5 Then
TextWindow.Write(", ")
EndIf
EndFor
TextWindow.WriteLine("")

Indexando una matriz


In our previous program you saw that we used numbers as indices to store and retrieve values from the
array. It turns out that the indices are not restricted to just numbers and in practice its very useful to
use textual indices too. For example, in the following program, we ask and store various pieces of
information about a user and then print out the info that the user asks for.
Como vimos en nuestro programa anterior utilizamos nmeros como ndices para almacenar y
recuperar valores de la matriz. Los ndices no se limitan a slo nmeros y en la prctica es tambin muy
til utilizar ndices textuales. Por ejemplo, en el siguiente programa, preguntamos y almacenamos
distinta informacin acerca de un usuario para imprimir despus la informacin que el usuario pida.

Pgina 61 de 364

TextWindow.Write("Escriba su nombre: ")


user["nombre"] = TextWindow.Read()
TextWindow.Write("Escriba su edad: ")
user["edad"] = TextWindow.Read()
TextWindow.Write("Escriba la ciudad donde vive: ")
user["ciudad"] = TextWindow.Read()
TextWindow.Write("Escriba su cdigo postal: ")
user["cdigopostal"] = TextWindow.Read()
TextWindow.Write("Qu informacin desea? ")
ndice = TextWindow.Read()
TextWindow.WriteLine(ndice + " = " + user[ndice])

Figura 51 Utlizando indices no numricos

Ms de una dimensin
Supongamos que desea almacenar el nombre y el nmero de telfono de todos tus amigos para poder
buscar sus nmeros de telfono cuando lo necesite, como si fuera una libreta de telfonos. Cmo
escribiramos un programa de este tipo?
En este caso, tenemos dos conjuntos de ndices (tambin conocidos como dimensin de la matriz).
Supongamos que identificamos a cada amigo por su sobrenombre. Este ser el primer ndice en la
matriz. Una vez que usamos el primer ndice para obtener la variable de nuestro amigo, el segundo de
los ndices, nombre y nmero de telfono nos
ayuda a obtener el nmero de telfono y el
Los ndices de las matrices no distinguen entre
nombre real de ese amigo.
maysculas y minsculas, al igual que las
variables regulares.
The way we store this data would be like this:
Almacenamos los datos de esta manera:

Pgina 62 de 364

amigos["Nuri"]["Nombre"] = "Nuria"
amigos["Nuri"]["Telfono"] = "123-4567"
amigos["Arthur"]["Nombre"] = "Arturo"
amigos["Arthur"]["Telfono"] = "890-1234"
amigos["Fran"]["Nombre"] = "Francisco"
amigos["Fran"]["Telfono"] = "56-7890"
Puesto que tenemos dos ndices en la misma matriz, amigos, esta matriz se conoce como matriz
bidimensional.
Una vez que hemos creado este programa, puede escribir el apodo de un amigo y se le mostrar la
informacin almacenada de cada uno de ellos. Aqu tiene el programa completo que lo hace:
amigos["Nuri"]["Nombre"] = "Nuria"
amigos["Nuri"]["Telfono"] = "123-4567"
amigos["Arthur"]["Nombre"] = "Arturo"
amigos["Arthur"]["Telfono"] = "890-1234"
amigos["Fran"]["Nombre"] = "Francisco"
amigos["Fran"]["Telfono"] = "56-7890"
TextWindow.Write("Escriba el sobrenombre: ")
sobrenombre = TextWindow.Read()
TextWindow.WriteLine("Nombre: " + amigos[sobrenombre]["Nombre"])
TextWindow.WriteLine("Telfono: " + amigos[sobrenombre]["Telfono"])

Figura 52 Una gua de telfono sencilla

Pgina 63 de 364

Utilizar matrices para representar cuadrculas


Un uso muy comn de las matrices multidimensionales es el de representar cuadrculas y tablas. Las
cuadrculas tienen filas y columnas, que pueden encajar perfectamente en un matriz bidimensional. A
continuacin se muestra un programa sencillo que se presenta cuadrados en una cuadrcula:
filas = 8
columnas = 8
tamao = 40
For f = 1 To filas
For c = 1 To columnas
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
cuadrados[f][c] = Shapes.AddRectangle(tamao, tamao)
Shapes.Move(cuadrados[f][c], c * tamao, f * tamao)
EndFor
EndFor
Este programa agrega rectngulos y los coloca para formar una cuadrcula de 8x8. Adems de disear
estos cuadrados, tambin los almacena en una matriz. Esto nos permite poder hacer un seguimiento de
los cuadrados y usarlos de nuevo cuando lo necesitamos.

Figura 53 - Diseo de cuadrados en una cuadrcula

Pgina 64 de 364

Por ejemplo, si agregamos el siguiente cdigo al final del programa anterior har que los cuadrados se
muevan a la esquina superior izquierda.
For f = 1 To filas
For c = 1 To columnas
Shapes.Animate(cuadrados[f][c], 0, 0, 1000)
Program.Delay(300)
EndFor
EndFor

Figura 54 - Seguimiento de los cuadrados en la cuadrcula

Pgina 65 de 364

Captulo 11

Eventos e interactividad
En los primeros dos captulos, introdujimos objetos que tienen propiedades y operaciones. Adems de
las propiedades y operaciones, algunos objetos tienen lo que llamamos eventos. Los eventos son como
seales que se levantan, por ejemplo, en respuesta a acciones del usuario, como el movimiento del
mouse, o hacer clic con l. En cierto sentido, los eventos son opuestos a las operaciones. En el caso de
las operaciones, usted como programador las invoca para hacer que el equipo haga algo, mientras que
en el caso de los eventos, el ordenador le indica cundo ha ocurrido algo interesante.

Cmo son de tiles los eventos?


Los eventos son fundamentales para introducir interactividad a un programa. Si usted desea permitir a
un usuario interactuar con su programa, los eventos son lo que usted usar. Digamos que est
escribiendo un programa de las tres en raya. Desear permitir al usuario elegir su jugada, cierto? Ah es
donde intervienen los eventos: usted recibir la entrada del usuario en su programa usando eventos. Si
esto parece difcil de entender, no se preocupe, vamos a dar una mirada a un ejemplo muy simple que le
ayudar a entender qu son los eventos cmo pueden ser usados.
A continuacin se muestra un programa muy simple que tiene slo una sentencia y una subrutina. La
subrutina usa la operacin ShowMessage (mostrar mensaje) en el objeto GraphicsWindow para mostrar
un cuadro de mensaje al usuario.

Pgina 66 de 364

GraphicsWindow.MouseDown = OnMouseDown 'Al presionar el mouse


Sub OnMouseDown
GraphicsWindow.ShowMessage("Ha hecho clic.", "Hola")
EndSub
La parte interesante a destacar del programa anterior es la lnea donde asignamos el nombre de la
subrutina al evento MouseDown (hace clic con el mouse) del objeto GraphicsWindow. Habr notado
que MouseDown se parece a una propiedad, excepto en que en lugar de asignarle un valor, le asignamos
la subrutina OnMouseDown. Ah est lo especial de los eventos, cuando el evento pasa, se llama a la
subrutina automticamente. En este caso, se llama a la subrutina OnMouseDown cada vez que el
usuario hace clic con el mouse en GraphicsWindow. Adelante, ejecute el programa y prubelo. Siempre
que haga clic en GraphicsWindow con el mouse, aparecer un cuadro de mensaje como el que se
muestra en la siguiente figura.

Figura 55 - Respuesta a un evento

Este tipo de manejo de eventos es muy potente y posibilita programas muy creativos e interesantes. Los
programas escritos de esta forma suelen llamarse programas dirigidos por eventos.
Puede modificar la subrutina OnMouseDown para hacer otras cosas que mostrar un cuadro de mensaje.
Por ejemplo, como en el siguiente programa, puede dibujar grandes crculos azules donde el usuario
hace clic con el mouse.

Pgina 67 de 364

GraphicsWindow.BrushColor = "Blue" 'Azul


GraphicsWindow.MouseDown = OnMouseDown
Sub OnMouseDown
x = GraphicsWindow.MouseX - 10
y = GraphicsWindow.MouseY - 10
GraphicsWindow.FillEllipse(x, y, 20, 20)
EndSub

Figura 56 - Usando el evento OnMouseDown

Note que en el programa anterior, usamos MouseX y MouseY para obtener las coordenadas del mouse.
Luego las usamos para dibujar un crculo con las coordenadas como centro del crculo.

Usando mltiples eventos


En realidad no hay lmite a la cantidad de eventos que puede usar. Hasta puede tener una subrutina que
use mltiples eventos. Sin embargo, puede usar un evento slo una vez. Si trata de asignar dos
subrutinas al mismo evento, la segunda gana.
Para ilustrar esto, tomemos el ejemplo anterior y agreguemos una subrutina que controle si se pulsa
una tecla o no. Adems, hagamos que esta nueva subrutina cambia el color del lpiz, de tal forma que
cuando haga clic con el mouse, obtendr puntos de colores diferentes.

Pgina 68 de 364

GraphicsWindow.BrushColor = "Blue"
GraphicsWindow.MouseDown = OnMouseDown
GraphicsWindow.KeyDown = OnKeyDown 'Al presionar una tecla
Sub OnKeyDown
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
EndSub
Sub OnMouseDown
x = GraphicsWindow.MouseX - 10
y = GraphicsWindow.MouseY - 10
GraphicsWindow.FillEllipse(x, y, 20, 20)
EndSub

Figura 57 - Usando mltiples eventos

Si ejecuta este programa y hace clic en la ventana, obtendr un punto azul. Ahora, si presiona cualquier
tecla una vez y hace clic de nuevo, obtendr un punto de un color diferente. Lo que sucede cuando
presiona una tecla es que la subrutina OnKeyDown (al presionar una tecla) se ejecuta, lo que cambia el
color del lpiz a un color aleatorio. Despus de eso, cuando hace clic con el mouse, un crculo se dibuja
usando el color recin cambiado, resultando en puntos de colores aleatorios.

Pgina 69 de 364

Un programa de dibujo
Ahora que ya conocemos los eventos y subrutinas, podemos escribir un programa que permita al
usuario dibujar en la ventana. Es muy simple escribir dicho programa, dado que podemos separar el
problema en pequeas partes. Como primer paso, vamos a escribir un programa que permita a los
usuarios mover el mouse por cualquier parte de la ventana de grficos, dejando un rastro mientras
mueve el mouse.
GraphicsWindow.MouseMove = OnMouseMove 'Al mover el mouse
Sub OnMouseMove
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
GraphicsWindow.DrawLine(prevX, prevY, x, y)
prevX = x
prevY = y
EndSub
Sin embargo, cuando ejecute este programa, la primera lnea siempre comienza en la esquina superior
izquierda de la ventana (0, 0). Podemos solucionar este problema utilizando el evento MouseDown y
capturando los valores de prevX y prevY cuando ocurra ese evento.
Adems, realmente slo necesitamos dejar el rastro cuando el usuario mantiene el botn presionado.
Las dems veces, no deberamos dibujar una lnea. Para obtener este comportamiento, usaremos la
propiedad IsLeftButtonDown (el botn izquierdo del mouse est presionado) en el objeto Mouse. Esta
propiedad dice si el botn izquierdo del mouse est siendo presionado o no. Si el valor es cierto,
dibujaremos la lnea, de lo contrario, no.

Pgina 70 de 364

GraphicsWindow.MouseMove = OnMouseMove
GraphicsWindow.MouseDown = OnMouseDown
Sub OnMouseDown
prevX = GraphicsWindow.MouseX
prevY = GraphicsWindow.MouseY
EndSub
Sub OnMouseMove
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
If (Mouse.IsLeftButtonDown) Then
GraphicsWindow.DrawLine(prevX, prevY, x, y)
EndIf
prevX = x
prevY = y
EndSub

Pgina 71 de 364

Apndice A

Ejemplos divertidos
Fractal con la tortuga

Figura 58 La tortuga dibuja un fractal con forma de rbol

Pgina 72 de 364

ngulo = 30
delta = 10
distancia = 60
Turtle.Speed = 9
GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.PenColor = "LightGreen"
DrawTree()
Sub DrawTree
If (distancia > 0) Then
Turtle.Move(distancia)
Turtle.Turn(ngulo)
Stack.PushValue("distancia", distancia)
distance = distancia - delta
DrawTree()
Turtle.Turn(-ngulo * 2)
DrawTree()
Turtle.Turn(ngulo)
distancia = Stack.PopValue("distancia")
Turtle.Move(-distancia)
EndIf
EndSub

Fotografas de Flickr

Pgina 73 de 364

Figura 59 Mostrar fotografas de Flickr

Pgina 74 de 364

GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.MouseDown = OnMouseDown
Sub OnMouseDown
foto = Flickr.GetRandomPicture("montaa, ro")
GraphicsWindow.DrawResizedImage(foto, 0, 0, 640, 480)
EndSub

Fondo de escritorio dinmico


For i = 1 To 10
foto = Flickr.GetRandomPicture("montaa")
Desktop.SetWallPaper(foto)
Program.Delay(10000)
EndFor

El juego del Paddle

Figura 60 El juego del Paddle

Pgina 75 de 364

GraphicsWindow.BackgroundColor = "DarkBlue"
paddle = Shapes.AddRectangle(120, 12)
bola = Shapes.AddEllipse(16, 16)
GraphicsWindow.MouseMove = OnMouseMove
x = 0
y = 0
deltaX = 1
deltaY = 1
EjecutarBucle:
x = x + deltaX
y = y + deltaY
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
If (x >= gw - 16 or x <= 0) Then
deltaX = -deltaX
EndIf
If (y <= 0) Then
deltaY = -deltaY
EndIf
padX = Shapes.GetLeft(paddle)
If (y = gh - 28 and x >= padX and x <= padX + 120) Then
deltaY = -deltaY
EndIf
Shapes.Move(bola, x, y)
Program.Delay(5)
If (y < gh) Then
Goto EjecutarBucle
EndIf
GraphicsWindow.ShowMessage("Ha perdido", "Paddle")
Sub OnMouseMove
paddleX = GraphicsWindow.MouseX
Shapes.Move(paddle, paddleX - 60, GraphicsWindow.Height - 12)
EndSub

Pgina 76 de 364

Apndice B

Colores
A continuacin se muestra una lista de nombres de colores compatibles con Small Basic. Estn
clasificados en funcin de su matiz.

Rojos
IndianRed

#CD5C5C

LightCoral

#F08080

Salmon

#FA8072

DarkSalmon

#E9967A

LightSalmon

#FFA07A

Crimson

#DC143C

Red

#FF0000

FireBrick

#B22222

DarkRed

#8B0000

Rosas
Pink

#FFC0CB

LightPink

#FFB6C1

HotPink

#FF69B4

DeepPink

#FF1493

MediumVioletRed

#C71585

Pgina 77 de 364

PaleVioletRed

#DB7093

Naranjas
LightSalmon

#FFA07A

Coral

#FF7F50

Tomato

#FF6347

OrangeRed

#FF4500

DarkOrange

#FF8C00

Orange

#FFA500

Amarillos
Gold

#FFD700

Yellow

#FFFF00

LightYellow

#FFFFE0

LemonChiffon

#FFFACD

LightGoldenrodYellow

#FAFAD2

PapayaWhip

#FFEFD5

Moccasin

#FFE4B5

PeachPuff

#FFDAB9

PaleGoldenrod

#EEE8AA

Khaki

#F0E68C

DarkKhaki

#BDB76B

Prpuras
Lavender

#E6E6FA

Thistle

#D8BFD8

Plum

#DDA0DD

Violet

#EE82EE

Orchid

#DA70D6

Fuchsia

#FF00FF

Magenta

#FF00FF

MediumOrchid

#BA55D3

MediumPurple

#9370DB

Pgina 78 de 364

BlueViolet

#8A2BE2

DarkViolet

#9400D3

DarkOrchid

#9932CC

DarkMagenta

#8B008B

Purple

#800080

Indigo

#4B0082

SlateBlue

#6A5ACD

DarkSlateBlue

#483D8B

MediumSlateBlue

#7B68EE

Verdes
GreenYellow

#ADFF2F

Chartreuse

#7FFF00

LawnGreen

#7CFC00

Lime

#00FF00

LimeGreen

#32CD32

PaleGreen

#98FB98

LightGreen

#90EE90

MediumSpringGreen

#00FA9A

SpringGreen

#00FF7F

MediumSeaGreen

#3CB371

SeaGreen

#2E8B57

ForestGreen

#228B22

Green

#008000

DarkGreen

#006400

YellowGreen

#9ACD32

OliveDrab

#6B8E23

Olive

#808000

DarkOliveGreen

#556B2F

MediumAquamarine

#66CDAA

DarkSeaGreen

#8FBC8F

LightSeaGreen

#20B2AA

Pgina 79 de 364

DarkCyan

#008B8B

Teal

#008080

Azules
Aqua

#00FFFF

Cyan

#00FFFF

LightCyan

#E0FFFF

PaleTurquoise

#AFEEEE

Aquamarine

#7FFFD4

Turquoise

#40E0D0

MediumTurquoise

#48D1CC

DarkTurquoise

#00CED1

CadetBlue

#5F9EA0

SteelBlue

#4682B4

LightSteelBlue

#B0C4DE

PowderBlue

#B0E0E6

LightBlue

#ADD8E6

SkyBlue

#87CEEB

LightSkyBlue

#87CEFA

DeepSkyBlue

#00BFFF

DodgerBlue

#1E90FF

CornflowerBlue

#6495ED

MediumSlateBlue

#7B68EE

RoyalBlue

#4169E1

Blue

#0000FF

MediumBlue

#0000CD

DarkBlue

#00008B

Navy

#000080

MidnightBlue

#191970

Marrones
Cornsilk

#FFF8DC

Pgina 80 de 364

BlanchedAlmond

#FFEBCD

Bisque

#FFE4C4

NavajoWhite

#FFDEAD

Wheat

#F5DEB3

BurlyWood

#DEB887

Tan

#D2B48C

RosyBrown

#BC8F8F

SandyBrown

#F4A460

Goldenrod

#DAA520

DarkGoldenrod

#B8860B

Peru

#CD853F

Chocolate

#D2691E

SaddleBrown

#8B4513

Sienna

#A0522D

Brown

#A52A2A

Maroon

#800000

Blancos
White

#FFFFFF

Snow

#FFFAFA

Honeydew

#F0FFF0

MintCream

#F5FFFA

Azure

#F0FFFF

AliceBlue

#F0F8FF

GhostWhite

#F8F8FF

WhiteSmoke

#F5F5F5

Seashell

#FFF5EE

Beige

#F5F5DC

OldLace

#FDF5E6

FloralWhite

#FFFAF0

Ivory

#FFFFF0

AntiqueWhite

#FAEBD7

Pgina 81 de 364

Linen

#FAF0E6

LavenderBlush

#FFF0F5

MistyRose

#FFE4E1

Grises
Gainsboro

#DCDCDC

LightGray

#D3D3D3

Silver

#C0C0C0

DarkGray

#A9A9A9

Gray

#808080

DimGray

#696969

LightSlateGray

#778899

SlateGray

#708090

DarkSlateGray

#2F4F4F

Black

#000000

Pgina 82 de 364

Pgina 83 de 364

Pgina 84 de 364

Exploremos los diferentes elementos del entorno de programacin , donde tu vas a escribir tus
programas.
Puedes abrir y trabajar con varias ventanas de edicin a la vez.
La ventana de edicin donde esta el programa en el que estas trabajando actualmente es el
Editor activo.
Puedes formatear el codigo de programa que estas escribiendo, seleccionndolo, boton
derecho del raton y pulsando en Formato.
Puedes ejecutar el
programa bien pulsando
RUN /Ejecutar en la
barra de herramientas o
bien presionando la
tecla F5 en el teclado.
En la siguiente leccin
vas a analizar un
programa en detalle
para aprender ms
acerca de el.
Codigo:
TextWindow.WriteLine(
Hola Mundo!")

Pgina 85 de 364

Es conveniente guardar el programa frecuentemente para no perder datos si la


electricidad falla.
Codigo:

TextWindow.WriteLine(Felicidades a todos")

Pgina 86 de 364

Contestaciones:
1. Un Lenguaje de programacin.
2. IntelliSense.
3. Presionando Run o F5.

Pgina 87 de 364

Pgina 88 de 364

Una o mas declaraciones forman un programa en Small Basic. El ordenador ejecuta un


programa leyendo y entendiendo cada una de las declaraciones lnea a lnea.
Por ejemplo, la imagen muestra la declaracin:TextWindow.WriteLine("Hi, Everyone")
Esta declaracin dice al ordenador que escriba la lnea de texto, Hi, Everyone, en la
ventana de texto.
Veamos cmo podemos
mostrar y ocultar la
ventana de texto.
Primero, escribe
TextWindow.Show() en la
ventan del editor, y presina
Run en la barra de
herramientas. El resultado
es que aparece la ventana
de texto .
Igualmente, puedes
esconder la ventana de
texto si escribes la
declaracin
TextWindow.Hide() en la
ventana del editor y
presionas el botn Run de
la barra de herrramientas.

Pgina 89 de 364

En la imagen previa hemos mencionado el objeto TextWindow. Small Basic contiene muchos ms
objetos.
Esos objetos tienen asociados ciertas propiedades, operaciones y sucesos.
Estudiemos las propiedades y operaciones de una ventana de texto y cmo podemos utilizarlas.
En este cdigo establecemos el color del fondo de la ventana de texto a gris y el color de delante a rojo.
Igualmente especificamos un ttulo para la ventana de texto y la situacin dnde queremos que la
ventana de texto aparezca en la pantalla del ordenador.
Para entender mejor el cdigo analicemos la salida del programa cuando lo ejecutas.
Como puedes ver el texto Press any key to continue aparece en rojo sobre un gris de fondo.
Esto es as porque estableciste la propiedad color de fondo(BackgroundColor ) y la propiedad color de
delante (ForegroundColor ) en rojo.
Date cuenta que el ttulo de la ventana es Fun with Small Basic Programming. Tu especificaste este
ttulo usando la propiedad Title en el objeto TextWindow .
La propiedad CursorTop indica la posicin de la lnea del cursor en la ventana de texto, y la propiedad
CursorLeft indica la columna del cursor. Tu has establecido esos valores por medio de las propiedades
CursorTop y CursorLeft .
Igualmente las propiedades Top y Left indican la posicin superior e izquierda de la ventana de texto en
la pantalla del ordenador.
Codigo:

TextWindow.BackgroundColor = "Gray"
TextWindow.ForegroundColor = "Red"
TextWindow.Title = "Fun with Small Basic Programming"
TextWindow.CursorTop = 20
TextWindow.CursorLeft = 30
TextWindow.Top = 300
TextWindow.Left = 300

Pgina 90 de 364

A parte de las
operaciones Show y
Hide , tambien
puedes realizar otras
operaciones sobre un
objeto TextWindow .

You can write text in the text window by using the Write operation of the TextWindow
object.
Puedes escribir testo en la ventana de texto usando la operacin Write del objeto
TextWindow .
Codigo:
TextWindow.Write("Hi, everyone!")
TextWindow.Write("How are you doing?")

Pgina 91 de 364

To write the text on


separate lines, you
use the WriteLine
operation.
Para escribir texto en
lneas separadas usa
la operacin
WriteLine .
Codigo:
TextWindow.WriteLine
("Hi, everyone!")
TextWindow.WriteLine
("How are you
doing?")

La operacin
Read del objeto
TextWindow no
necesita ningn
parmetro. Indica
al ordenador que
espere hasta que
el usuario escriba
algo y presione la
tecla ENTER.
Despues de que se
presione ENTER el
programa lee los
que el usuario ha
escrito y lo guarda
en su memoria. Puedes usar la operacin Write o WriteLine para mostrar la
informacin guardada.
Codigo:
TextWindow.Write("Enter your name: ")
name = TextWindow.Read()
TextWindow.WriteLine("Hello " + name + ".")

Pgina 92 de 364

Cuando el
programa comienza
el ordenador lee la
primera lnea, la
cual contiene la
primera operacin
WriteLine
El ordenador abre
la ventana de texto
y escribe la
palabbra Hi en
ella.
Entonces el
ordenador lee la
segunda lnea, la
cual contiene la
operacin Pause. El ordenador espera a que se introduzca algn dato.
Cuando se introduce algn dato el ordenador lee la tercera lnea, la cual contiene la
operacin Clear. El ordenador borra la palabra Hi de la ventana de texto.
Finalmente el ordenador lee la ltima lnea, la cual contiene la operacin Write Line. El
ordenador escribe la palabra Hello en la ventana de texto
Codigo:
TextWindow.WriteLine("Hi")
TextWindow.Pause()
TextWindow.Clear()
TextWindow.WriteLine("Hello")

Pgina 93 de 364

Solution:
TextWindow.Top = 100
TextWindow.Left = 200
TextWindow.Title = "Small Basic Programming"
TextWindow.CursorTop = 10
TextWindow.CursorLeft = 20
TextWindow.ForegroundColor = "Yellow"
TextWindow.WriteLine("Welcome to the world of Small Basic programming.")

Pgina 94 de 364

Pgina 95 de 364

Una variable un valor que el programa puede usar ms tarde.Si ejecutas el programa
de nuevo pero asignas a la variable un valor diferente, el nuevo valor reemplaza al
antiguo.
When you run a program, the value in the variable is also used as you specify in the
code. You can reuse a variable as many times as your program requires.
Cuando ejecutas un programa el valor de la variable es utilizado como lo indiques en el
cdigo. Puedes rehusar una variable tantas veces como el programa lo requiera.
Codigo:
TextWindow.Write("What is your name? ")
name = TextWindow.Read()
TextWindow.WriteLine("Hello, " + name + ".")

Pgina 96 de 364

Puedes identificar tus variables ms facilmente si les das nombres adecuados.


Codigo:
number_1 = 20
number_2 = 30
number_sum = number_1 + number_2
TextWindow.WriteLine(number_sum)

Pgina 97 de 364

En el ejemplo anterior, usaste una variable para guardar texto, la cual es conocida
tambin como cadena(string). Veamos ahora un ejemplo de cmo guardar valores
numricos en variables.
En este ejemplo utilizas la operacin Write para que el usuario especifique el ancho y
el alto del reptngulo. Creas unas variables que llamas length y width (largo y ancho) y
usas la operacion ReadNumber para que el ordenador guarde lo que escriba el usuario
en esas variables. Despues se crean las variables area y perimeter y el programa
calcula sus valores y los guarda en sus correspondientes variables. Finalmente se usa la
operacin WriteLine para mostrar el resultado.
Despus de escribir el programa, puedes ejecutarlo presionando la tecla Run o
presionando la tecla F5
Codigo:
TextWindow.Title = "Area and Perimeter"
TextWindow.Write("How long is the rectangle? ")
length = TextWindow.ReadNumber()
TextWindow.Write("How wide is the rectangle? ")
width = TextWindow.ReadNumber()
area = length * width
perimeter = 2 * length + 2 * width
TextWindow.WriteLine("The area of the rectangle is " + area + ".")
TextWindow.WriteLine("The perimeter of the rectangle is " + perimeter + ".")

Pgina 98 de 364

Si quieres guardar varios valores del mismo tipo, puedes usar un array en vez de crear
multiples variables.
Entonces puedes realizar varias operaciones a los valores en grupo.
En este ejemplo, defines un array que contendr nombre de estudiantes. Luego usars
una operacin del objeto Array para buscar un valor especfico dentro del array.
Codigo:
TextWindow.Title = "Array Object"
TextWindow.Write("What is the name of the first student? ")
students[1] = TextWindow.Read()
TextWindow.Write("What is the name of the second student? ")
students[2] = TextWindow.Read()
TextWindow.Write("What is the name of the third student? ")
students[3] = TextWindow.Read()
Textwindow.WriteLine("Is Robin' here? " + Array.ContainsValue(students, "Robin"))

Pgina 99 de 364

Puedes utilizar las siguientes frmulas para hacer los clculos:


radius = diameter / 2
area = (3.14) * radius * radius
circumference = (3.14) * 2 * radius

Pgina 100 de 364

Solucin:
TextWindow.Write("What is the diameter of the circle? ")
diameter = TextWindow.ReadNumber()
radius = diameter / 2
area = (3.14) * radius * radius
circumference = (3.14) * 2 * radius
TextWindow.WriteLine("The area of the circle is " + area + ".")
TextWindow.WriteLine("The circumference of the circle is " + circumference + ".")

Pgina 101 de 364

Pgina 102 de 364

En Small Basic se usa el objeto Clock para conocer la fecha y hora actual.
Usas la palabra clave If para especificar una condicin que el ordenador evalua y
determinar si una operacin particular hay que ejecutarla o no. Entonces se usa la
palabra clave Then para especificar que operaciones se deben ejecutar si la condicin
es verdadera. Si la condicin es falsa el ordenador salta a la siguiente lnea del
programa. Usamos la palabra clave EndIf para indicar al ordenador que debe continuar
en la siguiente lnea del programa independientemente si la condicin es verdadera o
falsa.
In this example, you use the If keyword specify the condition that today is the first day
of the first month of the year (January). You use the Then keyword to specify that, if
today is the first day of the first month, the computer should run the WriteLine
operation. If today is not the first day of the first month, the computer should skip the
operation and proceed to the EndIf line of the program.
En este ejemplo usamos If para especificar la condicin de que hoy sea 1 de Enero.
Usamos Then para especificar que si hoy es 1 de Enero el ordenador debe realizar la
operacin WriteLine. Si hoy no es 1 de Enero, el ordenador se salta esa operacin y
continua en la linea del programa donde aparece EndIf.
Codigo:
If Clock.Day = 1 And Clock.Month = 1 Then
TextWindow.WriteLine("Happy New Year")
EndIf

Pgina 103 de 364

Codigo:
If Clock.Hour < 12 then
TextWindow.WriteLine("Did you have your breakfast?")
EndIf
If Clock.Hour > 12 then
TextWindow.WriteLine("Did you have your lunch?")
EndIf

Pgina 104 de 364

En este programa especificas una condicin y la accin a realizar si esa condicin es


verdadera. Entonces se especifica una segunda condicin y una segunda operacin a
realizar si la segunda condicines verdadera. Sin embargo la primera condicin solo es
verdadera si la segunda condicin es falsa, y la segunda condicin es verdadera solo si
la primeara condicin es falsa. Por tanto no tienes por qu especificar la segunda
condicin ya que el ordenador puede determinar que operacin realizar basandose
solo en la primera condicin.. En vez de proporcionar al ordenador dos condiciones
para evaluar, puedes especificar que el ordenador realice la primera operacin si la
primera condicin es verdadera y que realice la segunda operacin si la primera
condicin es falsa.
El resultado en las dos formas de escribir el cdigo es el mismo. Es te ejemplo te
ensea que puedes hacer la misma tarea de dos formas distintas. Tu elijes!
Codigo:
If Clock.Hour < 12 Then
TextWindow.WriteLine("Did you have your breakfast?")
Else
TextWindow.WriteLine("Did you have your lunch?")
EndIf

Pgina 105 de 364

En este programa, primero pides que el usuario escriba un nmero. Despus creas un
avariable para guardar ese nmero, y usa la operacin ReadNumber para determinar el
nmero escrito por el usuario.
Seguidamente creas una variable para guardar el resto despus de dividir el nmero
entre dos, y usas la operacin MathRemainder para averiguar si el resto es 0.
Finalmente afirmas que el nmero es par si el resto es 0 y que es impar si el resto no es
0.
Codigo:
TextWindow.Write("Enter a number: ")
number = TextWindow.ReadNumber()
remainder = Math.Remainder(number, 2)
If remainder = 0 Then
TextWindow.WriteLine("The number is even.")
Else
TextWindow.WriteLine("The number is odd.")
EndIf

Pgina 106 de 364

Codigo:
TextWindow.WriteLine("What is the current temperature in degrees Celsius? ")
temp = TextWindow.Read()
If temp <= 5 Then
TextWindow.WriteLine("Its very cold today.")
ElseIf temp <= 15 Then
TextWindow.WriteLine("Its cool today.")
ElseIf temp <= 25 Then
TextWindow.WriteLine("Its warm today.")
Else
TextWindow.WriteLine("Its quite hot today.")
EndIf

Pgina 107 de 364

Codigo:
For a = 1 to 10
TextWindow.WriteLine(a)
EndFor

Pgina 108 de 364

In this program, you first use the WriteLine operation to display "Multiplication Table"
on the screen.
Then you create the variable number to store the value of 5.
Then you create a For loop with the variable a to ensure the WriteLine operation will
run 10 times.
You use the WriteLine operation to display the following elements in this order:
--the value that is stored in the a variable
--the multiplication sign
--the value that is stored in the number variable
--the equals sign
--the products of the values of the a and number variables
Code:
TextWindow.WriteLine("Multiplication Table")
number = 5
For a = 1 to 10
TextWindow.WriteLine(a + " x " + number + " = " + a * number)
EndFor

Pgina 109 de 364

Incluso puedes disminuir el valor de la variable contador si usas la palabra clave Step
especificando un valor negativo. Por ejemplo puedes escribir un programa que cuente
hacia atrs desde 10 a 1 en la pantalla si asignas el valor -1 conla palabra clave Step
Codigo:
TextWindow.WriteLine("Multiply odd numbers by 5:")
number = 5
For a = 1 to 10 Step 2
TextWindow.WriteLine(a + " x " + number + " = " + a * number)
EndFor

Pgina 110 de 364

Primero creamos la variable a y le asignamos el valor 10.


Seguidamente creamos un ciclo While con la condicin de que el valor de a es
menoro igual a 100. Ya que has justo inicializado esa variable con el valor igual a 10 , la
condicin es verdadera cuando el ciclo comienza.
Usas la operacion WriteLine para mostrar el valor de a cada vez que el ciclo se repite.
En la siguiente orden incrementas el valor de a en 10 cada vez que el ciclo se repite.
El ciclo se detiene despues de 10 repiticiones, ya que el valor de la variabla a llega a
ser mayor que 100.
Codigo:
a = 10
While (a <= 100)
TextWindow.WriteLine(a)
a = a +10
EndWhile

Pgina 111 de 364

Pgina 112 de 364

Solucion:
TextWindow.Write("How many student grades would you like to calculate? ")
number = TextWindow.Read()
n=1
While n <= number
TextWindow.Write("What is the students percentage? ")
percentage = TextWindow.Read()
If percentage >= 75 Then
TextWindow.WriteLine("The students grade is A.")
ElseIf percentage < 75 And percentage >= 60 Then
TextWindow.WriteLine("The students grade is B.")
ElseIf percentage < 60 And percentage >= 35 Then
TextWindow.WriteLine("The students grade is C.")
Else
TextWindow.WriteLine("The students grade is D.")
EndIf
n=n+1
EndWhile

Pgina 113 de 364

Pgina 114 de 364

Codigo:
j=1
lineQ:
TextWindow.WriteLine(j)
j= j+1
If j < 30 Then
Goto lineQ
EndIf

Pgina 115 de 364

En la primera lnea del programa creas un avariable j y le das el valor 1.


Entonces creas una etiqueta llamada lineQ: con dos puntos :al final.
En la siguiente lnea se hace que el ordenador muestre el valor de la variable j en la
pantalla.
Entonces incrementa sel valor d ela variable j en 1.
En la cuarta lnea, se comprueba si el valor de j es menor que 10.
--Si lo es, la parte del cdigo que sigue a la etiqueta lineQ: se repite. En otras palabras,
haces que el ordenador muestre el valor de la variable j, incrementa su valor en 1 y
entonces se comprueba si su valor es ms pequeo que 10.
--Si el valor no es menor que 10, ordenas al ordenaddor que continue en la siguiente
seccin del programa (o parar el programa si no hay mas cdigo).
Codigo:
j=1
lineQ:
TextWindow.WriteLine(j)
j= j+1
If j < 10 Then
Goto lineQ
EndIf

Pgina 116 de 364

Atencin. Si utilizas muchas veces la instruccin Goto tu programa ser dificil de entender y de corregir.
Aunque estas instrucciones son tiles en algunas ocasiones, debes intentar estructurar tus programas de
forma que la instruccin Goto se utilice lo menos posible.
Codigo:

start:
TextWindow.WriteLine("How many members are in your family?")
number = TextWindow.ReadNumber()
remainder = Math.Remainder(number, 2)
If remainder = 0 Then
TextWindow.WriteLine("Your family has an even number of members.")
Else
TextWindow.WriteLine("Your family has an odd number of members.")
EndIf
Goto start

Pgina 117 de 364

Si usas subrutinas tus programas sern ms sencillos de leer y de entender que si usas
intrucciones Goto

Pgina 118 de 364

En este programa, tu escribes la subrutina Divide una vez, pero puedes ejecutarla
desde cualquier punto del programa.
Cuando ordenas al ordenador que ejecute un asubrutina, usas una instruccin que
contiene el nombre de la subrutina seguido de parentesis. Cuando usas este tipo de
instrucciones , estas llamando a la subrutina.
Codigo:
While i < 5
TextWindow.WriteLine("Enter Dividend: ")
Dividend = TextWindow.Read()
TextWindow.WriteLine("Enter Divisor: ")
Divisor = TextWindow.Read()
Divide()
TextWindow.WriteLine("Your answer is: " + Answer)
i=i+1
EndWhile
Sub Divide
Answer = Dividend / Divisor
EndSub

Pgina 119 de 364

Solucion:
up:
If i < 10 then
TextWindow.WriteLine("")
TextWindow.Write("What is the name of a city? ")
city = TextWindow.Read()
TextWindow.Write("How warm is that city (in degrees Celsius)? ")
temp = TextWindow.Read()
TextWindow.Write("Is it rainy (Y/N)? ")
rainy = TextWindow.Read()
TextWindow.Write("Is it windy (Y/N)? ")
windy = TextWindow.Read()
'Calling subroutines
subtempCount()
subrainyCount()
subwindyCount()
i=i+1

Pgina 120 de 364

If i = 10 Then
subOutput()
EndIf
EndIf
Goto up
Sub subtempCount
If temp <= 5 Then
ColdCount = ColdCount + 1
ElseIf temp <= 15 Then
CoolCount = CoolCount + 1
ElseIf temp <= 25 Then
WarmCount = WarmCount + 1
Else
HotCount = HotCount + 1
EndIf
EndSub
Sub subRainyCount
If Rainy = "y" Or Rainy = "Y" Then
RainyCount = RainyCount + 1
EndIf
EndSub

Pgina 121 de 364

Pgina 122 de 364

Puedes mostrar la
ventana grfica
escribiendo la
orden statement
GraphicsWindow.S
how() en la ventana
del editor.
Igualmente puedes
esconderla usando
la orden
GraphicsWindow.Hi
de().
Puedes modificar la
apariencia de la
ventana grfica especificando algunas de sus propiedades. Por ejemplo, puedes
ponerle un ttulo con la propiedad Title. Igualmente puedes modificar su altura,
anchura color de fondo con las propiedades Height, Width, and BackgroundColor .

Pgina 123 de 364

Puedes usar algunas popiedades del objeto GraphicsWindow solo para mostrar
formas, pero puedes usar otras propiedades (como MouseX y MouseY) cuando
necesites trabajar con el ratn y el teclado . Estudiars ms de estas propiedades, junto
con eventos e interactividad en Small Basic, ms adelante.
Codigo:
GraphicsWindow.PenColor = "Purple"
GraphicsWindow.PenWidth = 3
GraphicsWindow.BrushColor = "Green"
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY

Pgina 124 de 364

En este ejemplo:
1. Comienzas fijando el ttulo, la anchura, altura de la ventana grfica. Cuando
fijas la anchura y altura rten en cuenta especificar un area que sea lo

Pgina 125 de 364

sufientemente grade para contener todas las formas que quieras dibujar
ms tarde.
2. Usas las propieddes PenColor y PenWidth para especificar color del borde
y su anchura de la forma que quieres dibujar. Puedes volver a utilizar estas
propiedades ms tarde para especificar la anchura y color del borde en la
siguiente forma que quieras dibujar.
3. Para dibujar un reptngulo usas la operacin DrawRectangle y especifcas
sus parmetros que son valores que determinan como aparecer el
reptngulo. Estos parmetros iincluyen , no solo la coordinada x y la
coordinada y del ractangulo( que determina la situacin de lae squina
superior izquierda), si no tambin la anchura y altura del reptngulo( que
determinan su tamao y proporciones).
1. Para rellenar un reptngulo con un color usamos la operacin FillRectangle
, y especificas los mismos parmetros que especificamos cuando usamos la
aperacin DrawRectangle . Si no especificas un color de relleno con la
propiedad BrushColor, las formas son rellenadas con azul(como muestra la
figura).
2. Para dibujar una elipse y rellenarla con un color diferente, especificas el
color usando la propiedad BrushColor, dibuja la elipse usando la operacin
DrawEllipse, y rellena la elipse con la operacin FillEllipse.
Igual que cuando dibujamos un reptngulo, especificas los parametros para
determinar su posicin, tamao, forma de la elipse. Por ejemplo, puedes
dibujar un crculo especificando el mismo valor para la anchura que para la
altura. Puedes especificar los mismos valores para los parmetros de la
operacin FillEllipse, como hicistes cuando utilizastes la operacion DrawElipse.
1. Para dibujar una lnea, especificas el color de la lnea utilizando la propiedad
PenColor , y especificas su situacin, longitud y angulo de la lnea utilizando
la operacin DrawLIne y sus parametros.
Para especificar los parmetros de la operacin DrawLine , debes incluir la
coordinada x y la coordenada y de ambos extremos de la lnea.
Para comprobar el resultado de tu programa ejectalo. Las formas que aparecen en la
ventana grfica reflejan el tipo, tamao situacin y colores que has especificado en tu
cdigo.
Codigo:
GraphicsWindow.Title = "Graphics Window"
GraphicsWindow.Height = 300
GraphicsWindow.Width = 300
GraphicsWindow.PenColor = "Black"
GraphicsWindow.PenWidth = 3
GraphicsWindow.DrawRectangle(70, 60, 100, 150)
GraphicsWindow.FillRectangle(70, 60, 100, 150)
GraphicsWindow.BrushColor = "Green"

Pgina 126 de 364

GraphicsWindow.DrawEllipse(200, 150, 50, 100)


GraphicsWindow.FillEllipse(200, 150, 50, 100)
GraphicsWindow.PenColor = "Gold"
GraphicsWindow.DrawLine(10, 200, 250, 200)

Puedes elegir entre un avariedad de colores en Small Basic. En tu cdigo puedes especificar los
colores por su nombre o por su cdigo de color , que es un nmero hexadecimal (base 16).

Pgina 127 de 364

Adems de dibujar formas, tambin puedes crear diseos atractivos usando las
condiciones(if) y los ciclos(loop). En este ejemplo creas un diseo de codigo de barras
de colores usando un ciclo For. Tambien puedes aleatorizar los colores de las lneas
usando la operacin GetRandomColor.
Puedes mostrar una caja de mensage utilizando la operacin ShowMessage del objeto
GraphicsWindow.Para esto, solo debes proporcionar dos parmetros el mensage que
aparece en la caja y el ttulo que aparece en la caja.
Para ejecutar el programa presiona F5 o presiona el boton Run.
Codigo:
GraphicsWindow.Title = "Graphics Window"
GraphicsWindow.BackgroundColor = "White"
GraphicsWindow.Width = 325
GraphicsWindow.Height = 200
For i = 1 To 15
GraphicsWindow.PenColor = GraphicsWindow.GetRandomColor()
GraphicsWindow.PenWidth = i
GraphicsWindow.DrawLine(i * 20, 20, i * 20, 180)
EndFor
GraphicsWindow.ShowMessage("Create wonderful designs and shapes in Small Basic",
"Message")

Pgina 128 de 364

Para ambas operacines DrawImage y DrawResizedImage debes especificar no solo el


nombre del fichero d ela imagen sino tambin su ruta. Si el fichero esta alojado en tu
ordenador puedes especificar la ruta local. Si el fichero est guardado en la Web o en
un servidor debes especificar la ruta obsoluta o URL. Las imagenes de este ejemplo se
facilitan con Small Basic y estn guardadas en tu ordenador.
Debes especificar donde quieres que aparezca la imagen en la ventana grfica.Esto lo
haces especificando lacoordenadas x e y de la esquina superior izquierda de la imagen.
Para la operacin DrawResizedImage debes especificar cuanto de grande quires que
aparezca la imagen, incluyendo la nueva anchura y altura.
Para ejecutar el programa presiona F5 o presiona el boton Run.
Tambien puedes utilizar la operacin SetPixel para dibujar un pixel en la ventana
grfica, especificando las coordenadas x e y.
Codigo:
GraphicsWindow.Title = "Graphics Window"
GraphicsWindow.Width = 800
GraphicsWindow.Height = 600
image1 = "C:\Small Basic\Sunset.jpg"
GraphicsWindow.DrawImage(image1, 0, 0)
image2 = "C:\Small Basic\Winter.jpg"
GraphicsWindow.DrawResizedImage(image2, 100, 100, 200, 200)

Pgina 129 de 364

Ensure that you specify the correct path and file name for the image that you want to
display.

Pgina 130 de 364

Solution:
GraphicsWindow.Show()
GraphicsWindow.Title = "A Graphics Window"
GraphicsWindow.Height = 640
GraphicsWindow.Width = 800
GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.PenWidth = 10
GraphicsWindow.PenColor = "Gold"
GraphicsWindow.DrawLine(65, 100, 65, 370)
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Cyan"
GraphicsWindow.DrawEllipse(70, 250, 100, 100)
GraphicsWindow.FillEllipse(70, 250, 100, 100)
For i = 1 To 10
GraphicsWindow.PenColor = GraphicsWindow.GetRandomColor()
GraphicsWindow.PenWidth = 2
GraphicsWindow.Drawrectangle(100, i * 20, 50, 10)
EndFor
image1 = "C:\Small Basic\Winter.jpg"
GraphicsWindow.DrawResizedImage(image1, 200, 100, 500, 500)
GraphicsWindow.ShowMessage("Have a nice day!", "Message")

Pgina 131 de 364

Pgina 132 de 364

Has aprendido como utilizar la ventana de textos y la ventana grfica. Tambin has
aprendido como utilizar varias rdenes,, propiedades y operaciones. Ahora, encuentra
tu nuevo amigo en Small Basic., la tortuga. Con su ayuda, puedes dibujar formas y
grficos en la pantalla. Puedes ocultar la tortuga con la operacion Hide.
Codigo:
Turtle.Show()

Pgina 133 de 364

Para especificar la posicin de la tortuga o la posicin a la que la tortuga a de moverse,


incluyes la coordenadas x e y que deses.
Codigo:
Turtle.X = 50
Turtle.Y = 200
Turtle.Move(150)
Turtle.MoveTo(50, 200)
Turtle.PenUp()
Turtle.PenDown()

Pgina 134 de 364

Puedes girar la tortuga para que encare una direccin determinada, especificando un
valor para la propiedad Angle, usando la operacion Turn, o usando las operacines
TurnRight y TurnLeft. por ejemplo puedes rotar la tortuga para que mire hacia la
izquierda de la ventana grfica usando cualquiera de las siguientes estrategias:
-- Puedes especificar el valor de la propiedad Angle.
-- Puedes utilizar la operacin Turn y especificar los siguientes valores para sus
parmetros:
--270 si la tortuga ya est mirando hacia la parte superior de la ventana.
--180 si la tortuga est mirando hacia la derecha.
--90 si la tortuga est mirando hacia abajo de la ventana.
Si usas esta operacin la tortuga siempre gira hacia la derecha ( en el sentido de las
agujas del reloj).
--Puedes utilizar la operacion TurnRight tres veces si la tortuga ya est mirando hacia
arriba, dos veces si la tortuga est mirando a la derecha , y una si la tortuga est
mirando hacia abajo.
--Puedes usar la operacion TurnLeft una vez si la tortuga est mirando hacia arriba, dos
veces si la tortuga est mirando hacia la derecha y tres veces si la tortuga est mirando
hacia
Codigo:
Turtle.Speed = 8
Turtle.Turn(90)
Turtle.TurnLeft()
Turtle.TurnRight()
Turtle.Angle = 90

Pgina 135 de 364

En este ejemplo , la tortuga dibuja un tringulo en la pantalla. Estudiemos el cdigo en


detalle:
1. En las tres primeras lneas del cdigo, establecemos la anchura, altura y el
ttulo de la ventana grfica.
2. En las dos siguientes lneas hacemos que la tortuga aparezca en una
determinada posicin en la ventana grfica.
Para especificar su localizacin establecemos el valor de la propiedad X a un
determinado nmero de pixeles desde el lado izquierdo de la pantalla, y
establecemos el valor de la prooiedad Y a un determinado nmero de pixeles
desde la parte superior de la pantalla
1. Especificamos la velocidad a la que queremos que la tortuga se mueva.,
especificando un valor entre 1 y 10 (inclusive) para la propiedad Speed.
Para hacer que la tortuga se mueva lo ms rpido posible especificamos el valor
en 10. Para hacer que la tortuga se mueva lo mas lenta posible establecemos el
valor en 1.
1. Para hacer que la Tortuga dibuje el lado vertical del tringulo usamos la
operacion Move para indicar a la tortuga que se desplace 150 pixeles desde
su posicin original y en su direccin por defecto. (hacia arriba).
Por defecto La tortuga dibuja cuando usas la operacion Move. Si quieres que se
mueva sin dibujar usas la operacin PenUp.
1. Para hacer que la tortuga dibuje el lado horizontal del triangulo, usamos
primero la operacin Turn para rotar la tortuga 90 grados y mire hacia la

Pgina 136 de 364

derecha. Despues utilizas la operacin Move para ordenar a la tortuga que


se mueva 150 pixeles desde su nueva posicin y en su nueva direccin.
2. Para hacer que la tortuga dibuje la diagonal del tringulo, usamos la
operacin MoveTo y especificamos la locolizacin a donde queremos que
se mueva.
Para especificar la localizacin, establecemos el valor para la propiedad X con
un determinado valor en pixeles desde el lado izquierdo de la ventana, y
establecemos el valor de la propiedad Y en pixeles desde el lado superior de la
ventana.
1. Ahora que el tringulo esta completado, rotamos la tortuga estableciendo el
valor para la propiedad Angle en 45 grados.
Codigo:
GraphicsWindow.Width = 250
GraphicsWindow.Height = 250
GraphicsWindow.Title = "Turtle Graphics"
Turtle.X = 50
Turtle.Y = 200
Turtle.Speed = 5
Turtle.Move(150)
Turtle.Turn(90)
Turtle.Move(150)
Turtle.MoveTo(50, 200)
Turtle.Angle = 45

Pgina 137 de 364

Cuando presionas Run o la tecla F5 la tortuga dibuja un colorido recuadro en la ventana


grfica.
Codigo:
GraphicsWindow.Title = "Turtle Graphics"
GraphicsWindow.Height = 320
GraphicsWindow.Width = 300
GraphicsWindow.PenColor = "Purple"
Turtle.Show()
Turtle.Speed = 8
Turtle.X = 150
Turtle.Y = 150
For i = 0 To 200 Step 5
Turtle.Move(i)
Turtle.Turn(90)
EndFor

Pgina 138 de 364

En el ejemplo anterior dibujamos un conjunto de cuadrados del mismo color. Sin


embargo puedes dibujar mas que una sola forma en la misma ventana grfica, usando
PenUp y PenDown. Tambien puedes crear el mismo dibujo usando triangulos, por
ejemplo , asignando un ciclo For y cambiando la distancia y los angulos. Ademas
tambien puedes crear formas en una variedad de colores usando GetRandomColor
para establecer el valor de la propiedad PenColor.
Cuando haces click en el boton Run de la barra de herramientas o presinas la tecla F5,
la tortuga dibuja dos coloridos diseos en la ventana grfica.
Codigo:
GraphicsWindow.Title = "Turtle Graphics"
GraphicsWindow.Height = 300
GraphicsWindow.Width = 500
Turtle.Show()
Turtle.Speed = 10
Turtle.X = 150
Turtle.Y = 150
For i = 0 To 200 Step 5
GraphicsWindow.PenColor = GraphicsWindow.GetRandomColor()
Turtle.Move(i)
Turtle.Turn(90)
EndFor

Pgina 139 de 364

Turtle.PenUp()
Turtle.Move(260)
Turtle.Turn(60)
Turtle.Move(120)
Turtle.PenDown()
For i = 0 To 200 Step 5
GraphicsWindow.PenColor = GraphicsWindow.GetRandomColor()
Turtle.Move(i)
Turtle.Turn(120)
EndFor

Pgina 140 de 364

Solucion:
GraphicsWindow.Height = 400
GraphicsWindow.Width = 400
GraphicsWindow.Title = "Turtle Graphics"
Turtle.Show()
Turtle.Speed = 10
Turtle.X = 100
Turtle.Y = 200
For i = 0 To 200 Step 5
GraphicsWindow.PenColor = GraphicsWindow.GetRandomColor()
Turtle.Move(i)
Turtle.Turn(150)
EndFor
Turtle.PenUp()
Turtle.Move(300)
Turtle.Turn(105)
Turtle.Move(150)
Turtle.PenDown()

Pgina 141 de 364

For i = 0 To 200 Step 5


GraphicsWindow.PenColor = GraphicsWindow.GetRandomColor()
Turtle.Move(i)
Turtle.Turn(150)
EndFor

Pgina 142 de 364

Pgina 143 de 364

Pgina 144 de 364

Como muestra este ejemplo, puedes insertar un aforma en la ventana grfica usando el
objeto Shapes. Para insertar un reptngulo, puedes utilizar la operacin AddReptangle.
Entonces puedes realizar acciones sobre el reptngulo utilizando varias de las
operaciones del objeto Shapes. Por ejemplo, puedes mostrar o esconder el reptngulo
usando las operaciones ShowShape y HideShape, y puedes cambiar la opacidad del
reptngulo usando la operacin SetOpacity
Para verificar la salida e tu programa presiona Run o presiona F5. Una forma
reptngulo aparecer y desaparecer despues de que transcurra un segundo. Cuando
el reptngulo reaparece su opacidad est reducida. Esta accin continua hasta que el
reptngulo es completamente transparente.
Codigo:
rectangle = Shapes.AddRectangle(400, 300)
Shapes.Move(rectangle, 100, 50)
For i = 1 To 10
Shapes.ShowShape(rectangle)
Program.Delay(1000)
Shapes.HideShape(rectangle)
Shapes.SetOpacity(rectangle, 100 - i * 10)
Program.Delay(800)
EndFor

Pgina 145 de 364

Para hacer una forma completamente opaca, debes especificar como 100 el parametro
de la operacin SetOpacity.
Para hacer una forma completamente transparente, debes especificar como 0 el
parametro de la operacin SetOpacity.
Codigo:
rectangle = Shapes.AddRectangle(150, 100)
Shapes.HideShape(rectangle)
Shapes.ShowShape(rectangle)
Shapes.SetOpacity(rectangle, 50)
Shapes.GetOpacity(rectangle)

Pgina 146 de 364

Tambien puedes mostrar imagenes utilizando el objeto Shapes.. Para mostrar una
imagen puedes usar la operacin AddImage. Posteriormente puedes realizar algunas
acciones sobre la forma usando algunas operaciones del objeto Shape. Por ejemplo,
mover una forma en la ventana con la operacin Move. Para animar una forma puedes
utilizar la operacin Animate. Igualmente para aumentar una forma en la ventana
puedes usar la operacin Zoom.
Para comprobar la salida del programa pulsa Run o la tecla F5. Una imagen aparece en
la ventana. La imagen se mueve a una posicin distinta y es animada. Finmalmente la
imagen aumentada hasta cubrir toda la ventana grfica.
Codigo:
imagepath = "C:\Small Basic\Water lilies.jpg"
image=Shapes.AddImage(imagepath)
Shapes.Move(image, 5, 5)
Shapes.Animate(image, 20, 20, 1000)
Shapes.Zoom(image, 0.1, 0.1)
For i=0 To 1 Step 0.1
Program.Delay(1000)
Shapes.Zoom(image, 0.1 + i, 0.1 + i)
EndFor

Pgina 147 de 364

Codigo:
rectangle = Shapes.AddRectangle(150, 100)
Shapes.Move(rectangle, 125, 125)

Puedes crear formas usando el objeto Shape. En este ejemplo:

Pgina 148 de 364

1. Usas las propiedades PenWidth, PenColor, y BrushColor del objeto


GraphicsWindow para establecer el color y anchura del boligrafo que
utilizars para dibujar el contorno de la forma y el color del pincel para
rellenar el interior de la forma.
2. Para dibujar dos reptngulos del mismo tamao usamos la operacion
AddRectangle del objeto Shapes y especificamos la anchura y altura del
reptngulo como parametros.
3. Para establecer la situacin de los reptngulos usamos la operacin Move, y
especificamos las coordenadas x e y del punto al que queremos mover los
reptngulos.
4. Para fijar la opacidad del reptngulo usamos la operacin SetOpacity
operation, especificando el nombre de la forma y el nivel de opacidad como
parmetros.
5. Para aumentar un reptngulo, usamos la operacin Zoom especificando el
nombre del reptngulo especificando el nivel aumento tanto
horizontalmente como verticalmente.
Para comprobar la salida del programa pulsa Run o la tecla F5. Fijate en la diferencia
entre los dos reptgulos despues de haber aplicado una operacin Shape a uno de
ellos.
Code:
GraphicsWindow.Title = "Exploring Shapes"
GraphicsWindow.Height = 350
GraphicsWindow.Width = 450
GraphicsWindow.PenWidth = 2
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Purple"
rectangle1 = Shapes.AddRectangle(100, 100)
Shapes.Move(rectangle1, 50, 80)
rectangle2 = Shapes.AddRectangle(100, 100)
Shapes.Move(rectangle2, 300, 80)
For i = 1 To 4
Program.Delay(1000)
Shapes.Zoom(rectangle1, i * 0.4, i * 0.4)
Shapes.SetOpacity(rectangle1, i * 5)
EndFor

Pgina 149 de 364

Puedes animar formas usando la operacin Animate. Por ejemplo, puedes querer
mover una bola de una posicin a otra. Primero creamos la forma bola usando la
operacion AddEllipse y establecemos la posicin original de la bola usando la
operacion Move. Seguidamente defines una variable con una nueva coordenada x.
Usars esa variable cuando animes la bola usando la oparacin Animate. Tambin
creas un reptngulo contra el cual vas a animar la bola. Defines una simple condicional
para animar la bola contra el reptngulo.
Para comprobar la salida del programa pulsa Run o la tecla F5.
Cuando el programa se ejecuta , la bola es animada contra el reptngulo.
Codigo:
GraphicsWindow.Title = "Exploring Shapes"
shape1 = Shapes.AddRectangle(100, 100)
Sball = Shapes.AddEllipse(100, 100)
Shapes.Move(Sball, 0, 340)
x = 450
GraphicsWindow.DrawRectangle(550, 0, 80, 450)
GraphicsWindow.BrushColor = "Purple"
GraphicsWindow.FillRectangle(550, 0, 80, 450)
Shapes.Animate(Sball, x, 40, 490)
Program.Delay(500)
If (Shapes.GetLeft(Sball) = x) Then

Pgina 150 de 364

Shapes.Animate(Sball, 0, 340, 500)


EndIf

Puedes girar formas usando condicionales y ciclos (bucles). Por ejemplo, puedes querer
rotar un reptngulo en su posicin original.. Primero creas la forma usando la
operacin AddRectangle, y estableces su posicin original con la operacion Move.
Seguidamente usas un ciclo For para girar la forma de su posicin original a una nueva
posicin.
Para comprobar la salida del programa pulsa Run o la tecla F5.
Cuando el programa se ejecuta el reptngulo gira y se mueve de posicin.
Codigo:
GraphicsWindow.Title = "Exploring Shapes"
GraphicsWindow.BrushColor = "Purple"
rotateshape = Shapes.AddRectangle(150, 100)
Shapes.Move(rotateshape, 200, 150)
For i = 0 To 12
Shapes.Rotate(rotateshape, 30 * i)
Program.Delay(1000)
EndFor

Pgina 151 de 364

En este ejemplo usas un bucle o ciclo For para crear varios reptngulos, posicionarlos
en orden ascendente segn tamao. Usamos tambin GetRandomColor para
aleatorizar el color de los reptngulos.
Para comprobar la salida del programa pulsa Run o la tecla F5. Cuando el programa se
ejecuta aparecen en la pantalla un montn de coloridos reptngulos.
Codigo:
GraphicsWindow.Title = "Exploring Shapes"
GraphicsWindow.Height = 500
GraphicsWindow.Width = 700
For i = 0 To 20
GraphicsWindow.PenWidth = 0.5
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
rectangle1 = Shapes.AddRectangle(i * 20, i * 10)
Shapes.Move(rectangle1, i * 10, i * 10)
EndFor

Pgina 152 de 364

Pgina 153 de 364

Solucion:
GraphicsWindow.Title = "Exploring Shapes"
GraphicsWindow.Height = 200
GraphicsWindow.Width = 300
GraphicsWindow.PenColor = "Purple"
base = Shapes.AddLine(0, 0, 300, 0)
Shapes.Move(base, 0, 100)
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Cyan"
circle = Shapes.AddEllipse(50, 50)
Shapes.Move(circle, 0, 50)
Shapes.Animate(circle, 250, 50, 1000)

Pgina 154 de 364

Pgina 155 de 364

Puedes controlar como se ejecutan los programas usando el objeto Program.


1. Primero usas la operacin Directory para mostrar el directorio actual donde
el programa est ejecutndose.
2. Segundo, atrasas el commienzo del programa en 5 segundos usando la
operacin Delay y especificando ese parmetro en milisegundos.
3. Tercero. Usas la operacion End para forzar que el programa se termmine.
Para comprobar la salida dell programa pulsa Run o F5 . La ventana de texto muestra
el directorio donde se est ejecutando el programa y posteriormente se detiene a los 5
segundos.

Pgina 156 de 364

Tambien puedes usar operaciones en un programa para determinar informacin acerca


de los argumentos que son pasados a ese programa.
Por ejemplo, puedes utilizar la operacin ArgumentCount para encontrar cuntos
lneas de comandos son pasadas al programa. Igualmente puedes utilizar la operacin
GetArgument para averiguar un argumento especfico.
Debes facilitar un valor ndice del argumento que nos interesa como parmetro de la
operacin.

Pgina 157 de 364

Puedes reproducir un sonido con la operacin Play del objeto Sound. Tienes que
especificar la ruta del fichero de sonido que quieres reproducir o la URL del sonido en
la Web , como parametro para poder reproducir el sonido..
Igualemente usa la operacin Pause con la ruta del fichero de sonido como parmetro.
Se para de reproducir el sonido con la operacin Stop.
Observa tambien el uso de la operacin Delay. La operacin Delay permite posponer la
ejecucin de los comandos.
Puedes usar ficheros de sonido en varios formatos ( mp3, .wav, .wma).

Pgina 158 de 364

En este ejemplo vemos como reproducir un sonido especificando la ruta del fichero.
Este ejemplo explica como incluir sonidos ya establecidos , como una campana, un
timbre y un click.
Despues de un segundo, el programa ejecuta la operacin PlayBellRing. Despus de
otro segundo la operacin PlayChime se ejecuta y un timbre se escucha. Despes de
otro segundo, la operacin PlayClick se ejecuta y se escucha un click.
La operacin PlayAndWait reproduce un archivo de sonido y espera hasta que se
termina de reproducir. Si la reproducin es detenida momentaneamente, la
reproducin se reanudara desde el punto dnde haba sido detenida.

Pgina 159 de 364

When you work in Small Basic, you can perform operations on text by typing a
statement that contains the Text object.
In this example:
1. First, you ask for the users first name and last name by using the Write and
Read operations of the TextWindow object.
2. You then append the last name to the first name by using the Append
operation of the Text object.
3. Next, you convert the appended text into uppercase letters by using the
ConvertToUpperCase operation of the Text object.
You must specify the name of the variable that is holding the assigned text as a
parameter. Similarly, you can also use the ConvertToLowerCase operation to
convert the text to lowercase letters.
To verify the output of your program, click Run on the toolbar, or press F5 on the
keyboard.
Cuando trabajas en Small Basic puedes realizar operaciones sobre un texto escribiendo una orden que
contenga el objeto Text.
En este ejemplo:
1. Primero, preguntas por el nombre y apellidos del usuario usando la operacin Write y
Read del objeto TextWindow.
2. Despus, aades el apellido al nombre utilzando la operacin Append del objeto Text.
3. Seguidamente, conviertes a mayusculas usando la operacin ConvertToUpperCase del
objeto Text.Debes especificar el nombre de la variable que guarda el texto como
parametro. Igualmente puedes convertir el texto a minusculoas usando la operacin
ConvertToLowerCase
Para comprobar el programa presiona Run o F5

Pgina 160 de 364

Puedes utilizar operaciones del objeto Text para verificar si un texto concreto o si un
caracter forma parte de un texto ms largo.
Para demostrar esta tcnuica, usamos las operaciones Write y Read del objeto
TextWindow para obtener una direccin de correo electronico del usuario. Despus
usamos la operacin IsSubText del objeto Text para determinar si el usuario ha
especificado una direccin vlida.

Pgina 161 de 364

Pgina 162 de 364

Solucion:
TextWindow.Title = "Lets take a quiz"
TextWindow.WriteLine("Name the third planet from the Sun: ")
answer = TextWindow.Read()
If (Text.StartsWith(answer, "Earth") Or Text.StartsWith(answer, "earth")) Then
Sound.PlayChime()
TextWindow.WriteLine("You are absolutely right!")
Else
TextWindow.WriteLine("That is incorrect.")
Sound.PlayBellRing()
EndIf

Pgina 163 de 364

Pgina 164 de 364

En este ejemplo hemos usado la operacin DrawnBoundText del objeto


GraphicsWindow. Esta operacin muestra un lnea de texto en la posicin que le

Pgina 165 de 364

indiques (especificando las coordenadas x e y). En este ejemplo el texto comienza en la


posicin 40 horizontalmente y verticlamente.
Codigo:
date = Clock.Date
weekday = Clock.WeekDay
time = Clock.Time
display = ("Current Date: " + date + "," + "Current Weekday: " + weekday + "," + "
Current Time: " + time)
GraphicsWindow.DrawBoundText(40, 40, GraphicsWindow.Width, display)

Codigo:
TextWindow.WriteLine("Enter the year of your birth:")
birthyear = TextWindow.Read()
age = Clock.Year - birthyear
TextWindow.WriteLine("Your age is " + age + ".")

Pgina 166 de 364

Codigo:
TextWindow.Write("Enter the month of your birthday:")
birthdaymonth = TextWindow.ReadNumber()
TextWindow.Write("Enter the date of your birthday:")
Birthdaydate = TextWindow.ReadNumber()
If (birthdaymonth = Clock.month And birthdaydate =Clock.Day) Then
TextWindow.WriteLine("Hey! Wish You A Very Happy Birthday!")
EndIf

Pgina 167 de 364

En este ejemplo usamos las proiedades Hour, Minute y Second del objeto Clock para
mostrar un reloj digital. Marcamos como PM si la hora es igual o mayor que 12. Al
contrario marcariamos el reloj como AM.
Para hacer que el reloj funciones sin interrupcin, usamos Goto para saltar a up
despus de 1000 milisegundos.
Codigo:
GraphicsWindow.FontSize = 26
GraphicsWindow.BrushColor = "Green"
up:
If Clock.Hour >= 12 Then
status = "PM"
Else
status = "AM"
EndIf
CurrentTime = Clock.Hour + " : " + Clock.Minute + " : " + Clock.Second + " " + status
GraphicsWindow.DrawBoundText(100, 100, 400, "Time: " + CurrentTime)
Program.Delay(1000)
GraphicsWindow.Clear()
Goto up

Pgina 168 de 364

Codigo:
ImagePath = Program.Directory + "\Blue.jpg"
Desktop.SetWallPaper(ImagePath)

Las proiedades Height y Width del objeto Desktop son muy tiles cuando quieres
mostrar texto o grficos en una ventana en las mismas posiciones relativas a la esquina
superior izquierda independientemente del tamao del escritorio.

Pgina 169 de 364

En este ejemplo la vantana grfica es de 400 pixeles de alta y 500 de ancha. Para
mostrar esa ventana en el centro del escritorio , resta la altura y anchura de la ventana
de la altura y anchura del escritorio y divide el resultado entre 2.
Codigo:
GraphicsWindow.Height = 400
GraphicsWindow.Width = 500
GraphicsWindow.Top = (Desktop.Height - GraphicsWindow.Height) / 2
GraphicsWindow.Left = (Desktop.Width - GraphicsWindow.Width) / 2

Debes estar conectado a Internet para usar el objeto Dictionary

Pgina 170 de 364

Codigo:
txt = "Magnanimous"
GraphicsWindow.FontName = "verdana"
GraphicsWindow.FontSize = 24
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(10, 10, txt)
defn = Dictionary.GetDefinition(txt)
GraphicsWindow.FontSize = 12
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(10, 60, defn)

Pgina 171 de 364

Pgina 172 de 364

Solucion:
subSetAlarm()
imagePath = program.Directory + "\desk.jpg"
up:
If Clock.Time = alarm Then
Desktop.SetWallPaper(imagePath)
Sound.PlayBellRing()
EndIf
Program.Delay(1000)
Goto up
Sub subSetAlarm
TextWindow.WriteLine("Set Alarm")
TextWindow.Write("Enter Hour: ")
hour = TextWindow.Read()
TextWindow.Write("Enter Minute: ")
minute = TextWindow.Read()
TextWindow.Write("AM/PM?: ")
AmPmStatus = TextWindow.Read()
alarm = hour + ":" + minute + ":00 " + AmPmStatus
TextWindow.WriteLine("Alarm Time: " + alarm)
EndSub

Pgina 173 de 364

Pgina 174 de 364

Debes estar conectado a Internet para usar el objeto Flickr

Pgina 175 de 364

Codigo:
GraphicsWindow.BackgroundColor = "Black"
Pic = Flickr.GetPictureOfMoment()
GraphicsWindow.DrawResizedImage(Pic, 0, 0, 600, 400)

Codigo:
For image = 1 to 5
pic = Flickr.GetRandomPicture("landscape")
Desktop.SetWallPaper(pic)
Program.Delay(10000)
EndFor

Pgina 176 de 364

Codigo:

ImagePath = "C:\Microsoft Small Basic\Sunset.jpg"

Pgina 177 de 364

Image = ImageList.LoadImage(ImagePath)
Width = ImageList.GetWidthOfImage(ImagePath)
Height= ImageList.GetHeightOfImage(ImagePath)
GraphicsWindow.Width = Width
GraphicsWindow.Height= Height
GraphicsWindow.DrawImage(Image, 0, 0)

Pgina 178 de 364

Codigo:
FilePath="http://www.microsoft.com/"
DownloadFile = Network.DownloadFile(FilePath)
TextWindow.WriteLine("Downloaded File:" + DownloadFile)

Codigo:
FilePath = "http://www.microsoft.com/"
WebPageContent = Network.GetWebPageContents(FilePath)
TextWindow.WriteLine("Page Content: ")
TextWindow.WriteLine(WebPageContent)

Pgina 179 de 364

Pgina 180 de 364

Solucion:
While picture < 10
ImagePath = Flickr.GetRandomPicture("Animals")
Images = ImageList.LoadImage(ImagePath)
GraphicsWindow.Height = ImageList.GetHeightOfImage(Images)
GraphicsWindow.Width = ImageList.GetWidthOfImage(Images)
GraphicsWindow.DrawImage(Images, 0, 0)
Program.Delay(2000)
picture = picture + 1
EndWhile

Pgina 181 de 364

Pgina 182 de 364

Usando el objeto File, tambien puedes guardar y cargar diferentes configuraciones en


distintas sesiones de tu programa.

Pgina 183 de 364

Si las operaciones WriteLine o AppendContents se realizan con xito el mensage


SUCCESS aparece en la ventana de salida, si no es as aprarece FAILED
La operacion WriteLine sobreescribir el contenido previo de la lnea especificada.
La operacin ReadContents muestra todo el contenido del fichero indicado en la
ventana de salida. Esta operacin es mas rpida cuando el fichero es menor que un 1
MB. Segn el tamao del fichero aumenta la operacin de leerlo ser ms lenta,
especialmente lenta si el fichero es ms grande que 10 MB.
Codigo:
Writeline:
File.WriteLine("C:\Small Basic.txt", 1, "Hello")
AppendContents:
File.AppendContents("C:\Small Basic.txt","Take Care")
ReadContents:
File.ReadContents("C:\Small Basic.txt")

Codigo:
FilePath = "C:\temp\TempSubdirectory\my.txt"
TextWindow.WriteLine("Write Content = " + File.WriteLine(FilePath, 1, "Shakespeare
was a great writer."))
TextWindow.WriteLine("Append Content = " + File.AppendContents(FilePath, "He wrote
many plays."))
TextWindow.WriteLine("Read Content = " + File.ReadContents(FilePath))

Pgina 184 de 364

Si especificas un destino que no existe, la operacin CopyFile intentar crearlo. Si ya


existe un fichero del mismo nombre, el fichero se sobreescribe. Antes de usar esta
operacin tienes que comprobar que no existe un fichero con el mismo nombre.
Si ha sido posible copiar el fichero un mensage de SUCCESS aparece, o si ha habido
problemas un mensage de FAILED.
Si la operacin GetFile es existosa aparecer un mensage de SUCCESS , sino
aparecer FAILED.
If the CopyFile operation succeeds, SUCCESS appears; otherwise, FAILED appears.
Codigo:
CopyFile:
File.CopyFile("C:\Small Basic.txt", "C:\temp")
GetFiles:
File.GetFiles("C:\Documents and Settings")

Pgina 185 de 364

Codigo:

sourcefilepath = "C:\temp\TempSubdirectory\my.txt"
destinationfilepath ="C:\temp\TempSubdirectory\Move"
directorypath = "C:\temp\"
TextWindow.WriteLine("Copy file Operation:" + File.CopyFile(sourcefilepath,
destinationfilepath))
TextWindow.WriteLine("Files in the directory: " + File.GetFiles(directorypath))

Pgina 186 de 364

Si la operacion CreateDirectory es exitosa aparace el mensage SUCCESS, si no


FAILED
Si la operacin GetDirectories es exitosa aparece una lista de todos los directorios
como un array en la ventana de salida, sino aparece FAILED
Codigo:
CreateDirectory:
File.CreateDirectory("C:\File Object")
GetDirectories:
File.GetDirectories("C:\Documents and Settings")

Pgina 187 de 364

Codigo:
directorypath1 = "C:\temp\Small Basic"
TextWindow.WriteLine("Create Directory: " + File.CreateDirectory(directorypath1))
directorypath2 = "C:\temp"
TextWindow.WriteLine("Directories: " + File.GetDirectories(directorypath2))

Pgina 188 de 364

Codigo:
FilePath = "C:\temp\TempSubdirect\my.txt"
TextWindow.WriteLine("Write Line Operation: " + File.WriteLine(FilePath, 1, "How are
you?"))
If File.LastError = "" Then
TextWindow.WriteLine("Operation Successful")
Else
TextWindow.WriteLine(File.LastError)
EndIf

Pgina 189 de 364

Pgina 190 de 364

This solution requires the file to exist with the specified name in the specified location.
La solucin requiere que exista un fichero con el nombre escpecifico y en la localizacin
oportunas.
Solucion:
TextWindow.Write("Enter the name of the new directory: ")
DirectoryName = TextWindow.Read()
File.CreateDirectory(DirectoryName)
filepath = "\\myserver\Share\FileIO.txt"
downloadpath = Network.DownloadFile(filepath)
If File.CopyFile(downloadpath, DirectoryName) = "SUCCESS" Then
TextWindow.WriteLine("File has been downloaded from the network and copied to: "
+ DirectoryName)
files = File.GetFiles(DirectoryName)
TextWindow.WriteLine("This is the content in the file: ")
TextWindow.WriteLine(File.ReadContents(files[1]))
TextWindow.Write("Enter data to be added in the file:")
AppendedData = TextWindow.Read()
File.AppendContents(files[1]," " + AppendedData)
TextWindow.WriteLine("File content after adding data is as follows: ")
TextWindow.WriteLine(File.ReadContents(files[1]))
EndIf

Pgina 191 de 364

Pgina 192 de 364

Pgina 193 de 364

Si una de estas operaciones es exitosa aparece TRUE en la ventana de texto, sino


aparece FALSE.

Pgina 194 de 364

Codigo:
Subjects[1] = "English"
Subjects[2] = "History"
Subjects[3] = "Computers"
Subjects[4] = "Science"
Subjects[5] = "Math
TextWindow.WriteLine("Subjects is an array: " + Array.IsArray(Subjects))
TextWindow.WriteLine("Subjects[4] is available: " + Array.ContainsIndex(Subjects, 4))
TextWindow.WriteLine("Math is available: " + Array.ContainsValue(Subjects, "Math"))
Array.GetItemCount(Subjects)

Puedes usar GetAllIndices para conseguir todos los ndices de un array con el formato
de otro array. Esto es especialmente til cuando no conoces los ndices del array. Esta
operacin muestra un array junto coon todos los ndices del array. Los ndices de un
array comienzan siempre en 1.
Puedes usar la operacin GetItemCount para conocer el nmero total de valores que
estn guardados en un array.
Esta operacin muestra el nmero de elementos del array.
Codigo:
Employee["Name"] = "John"
Employee["City"] = "New York"
Employee["Email-ID"] = "John@example.com"

Pgina 195 de 364

Employee["Mobile"] = "06482624"
Emplist = Array.GetAllIndices(Employee)
For i = 1 To Array.GetItemCount(Employee)
TextWindow.WriteLine(Emplist[i] + ":" + Employee[Emplist[i]])
EndFor

Pgina 196 de 364

La operacin PushValue no devuelve ningn valor


La operacin PopValue devuelve el dato quke se extrae de la pila( stack)
La operacin GetCount devuelve el numero de elementos en la pila.

Pgina 197 de 364

Codigo:
container = "empty"
For i = 0 To 50
Stack.PushValue(container , "plate number " + i)
EndFor
TextWindow.WriteLine("The number of plates in the container is " +
Stack.GetCount(container))
For i = 0 To 8
Stack.PopValue(container)
EndFor
TextWindow.WriteLine("After taking away 8 plates, the total number of plates is " +
Stack.GetCount(container))
TextWindow.WriteLine("The top most plate in the container is " +
Stack.PopValue(container))

Pgina 198 de 364

Pgina 199 de 364

Solucion:
TextWindow.WriteLine("Flight Reservations")
TotalSeats = 10
For i = 1 To TotalSeats
TextWindow.Write("Enter Passenger Name: ")
Name[i] = TextWindow.Read()
TextWindow.WriteLine("Seat number " + i + " is reserved by " + Name[i])
GetDetails()
EndFor
Sub GetDetails
If Array.GetItemCount(Name) = TotalSeats Then
TextWindow.WriteLine("No more seats are available!")
Else
Array.GetItemCount(Name)
AvailableSeats = TotalSeats - Array.GetItemCount(Name)
TextWindow.WriteLine("Number of available seats is: " + AvailableSeats)
TextWindow.WriteLine("")
EndIf
EndSub

Pgina 200 de 364

Pgina 201 de 364

Puedes usar la operacin Sin para averiguar el sino de un angulo en radianes.


Puedes usar la operacin ArcSin para averiguar el ngulo en radianes, dado el valor del
seno.

Pgina 202 de 364

Puedes usar la operacin GetDegrees para convertir el valor de un ngulo desde


radianes a grados.
Puedes usar la operacin Cos para conseguir el coseno de un angulo especificado en
radianes.
Codigo:
TextWindow.WriteLine("Enter the angle in degrees and get the sine of the angle:")
number = TextWindow.Read()
TextWindow.WriteLine("The sine of the angle is " + Math.Sin(number))
TextWindow.WriteLine("The arcsine of the angle is " + Math.ArcSin(Math.Sin(number)))
TextWindow.WriteLine("The angle in degrees is " +
Math.GetDegrees(Math.ArcSin(Math.Sin(number))))
TextWindow.WriteLine("Enter the angle in degrees and get the cosine of the angle:")
number = TextWindow.Read()
TextWindow.WriteLine("The cosine of the angle is " + Math.Cos(number))

La propiedad Pi del objeto Math devuelve el valor de pi , el cual es 3,14


Codigo:
TextWindow.Write("Enter the radius of the circle:")
Radius = TextWindow.Read()
Area = Math.Pi * Math.Power(Radius, 2)
TextWindow.WriteLine("Area of the Circle is " + Area)

Pgina 203 de 364

Puedes usar la operacin Abs para conseguir el valor absoluto de un nmero. Por
ejemplo si el nmero es -50 , la operacin Abs devuelve el valor como 50.
Codigo:
TextWindow.WriteLine("Enter two numbers for subtraction: ")
Number1 = TextWindow.Read()
Number2 = TextWindow.Read()
Substraction = Number1 - Number2
Textwindow.WriteLine("The answer is " + Math.Abs(substraction))

Pgina 204 de 364

Codigo:
TextWindow.Write("Enter the name of the student: ")
Name = TextWindow.Read()
TextWindow.WriteLine("Enter the student's marks in six subjects:")
For I = 0 To 5
Subject[i] = TextWindow.Read()
Total = Total + Subject[i]
EndFor
Percentage = Total / 6
TextWindow.WriteLine("Total Marks:" + Total)
TextWindow.WriteLine("Percentage:" + Math.Floor(percentage))

Pgina 205 de 364

Codigo:
TextWindow.WriteLine("Enter number to get its log value: ")
Number = TextWindow.Read()
TextWindow.WriteLine("Log value of " + Number + " is: " + Math.Log(Number))

Pgina 206 de 364

Codigo:
GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.Width = 600
GraphicsWindow.Height = 500
For i = 0 To 800
GraphicsWindow.FontSize = Math.GetRandomNumber(30)
x = Math.GetRandomNumber(GraphicsWindow.Width)
y = Math.GetRandomNumber(GraphicsWindow.Height)
GraphicsWindow.DrawText(x, y, "*")
Program.Delay(10)
EndFor

Pgina 207 de 364

Codigo:
TextWindow.WriteLine("Enter the first number:")
Number1 = TextWindow.Read()
TextWindow.WriteLine("Enter the second number:")
Number2 = TextWindow.Read()
min = Math.Min(Number1, Number2)
If (Number1 = Number2) Then
TextWindow.WriteLine("These numbers are the same")
Else
TextWindow.WriteLine("The smaller number is:" + min)
EndIf

Pgina 208 de 364

Codigo:
TextWindow.Write("Enter a number to get its square root: ")
Number = TextWindow.Read()
TextWindow.WriteLine("Square root of the entered number is " +
Math.SquareRoot(Number))

Pgina 209 de 364

Codigo:
start:
TextWindow.Write("Enter a number to check if it is even or odd: ")
number = TextWindow.Read()
If Math.Remainder(number, 2) = 0 Then
TextWindow.WriteLine(number + " is an even number.")
Else
TextWindow.WriteLine(number + " is an odd number.")
EndIf
Goto start

Pgina 210 de 364

Pgina 211 de 364

Solucion 1:
Rectangle = Shapes.AddRectangle(100, 100)
Shapes.Move(Rectangle, 250, 150)
For i = 0 To Math.GetRandomNumber(30)
Program.Delay(500)
Shapes.Rotate(Rectangle, i * 25)
EndFor
Solucion 2:
start:
GraphicsWindow.Width = 600
GraphicsWindow.Height = 450
TextWindow.Write("Enter a radius for the circle: ")
Radius = TextWindow.Read()
Area = Math.Pi * Radius * Radius
Height = Area / 2
Width = Area / 2
x = Math.GetRandomNumber(GraphicsWindow.Width / 2)
y = Math.GetRandomNumber(GraphicsWindow.Height / 2)
GraphicsWindow.DrawEllipse(x, y, Height, Width)
Goto start

Pgina 212 de 364

Pgina 213 de 364

Codigo:
Sub keyup
If GraphicsWindow.LastKey = return then
Shapes.Rotate(shape1, 0)
EndIf

Pgina 214 de 364

EndSub
Sub keydown
If GraphicsWindow.LastKey = return then
Shapes.Rotate(shape1, 90)
EndIf
EndSub

1. Aades un reptangulo usando la oeracin AddRectangle.


2. Fijas la situacin del reptangulo con la operacin Move.
3. Identificas la tecla con la que el reptangulo va a girar. Declaras la tecla y
asignas un nombre de variable.
4. Usas el suceso KeyDown y declaras una subrutina para girar la forma
cuando se presiona la tecla.
5. Usas , igualmente el suceso KeyUp y declaras una subrutina para girar la
forma a su posicin original cuando se libera la tecla.
Cuando presionas RUN aparace una ventana grafica con un reptangulo en el centro.
Cuando presinas RETURN el rectangulo gira. Cuando liberas la tecla RETURN
elreptangulo vuelve a su posicin original.
Codigo:
GraphicsWindow.Height = 300
GraphicsWindow.Width = 300
GraphicsWindow.Title = "Graphics Window"
shape1 = Shapes.AddRectangle(100, 50)

Pgina 215 de 364

Shapes.Move(shape1, 100, 125)


return = "Return"
GraphicsWindow.KeyDown = keydown
GraphicsWindow.KeyUp = keyup
Sub keydown
If GraphicsWindow.LastKey = return then
Shapes.Rotate(shape1, 90)
EndIf
EndSub
Sub keyup
If GraphicsWindow.LastKey = return then
Shapes.Rotate(shape1, 0)
EndIf
EndSub

Debes declara rlos eventos del raton en tu programa. Hay tres tipos de eventos de
raton. MouseDown, MouseUp y MouseMove. Debes tambien asignar una subrutina a
cada uno de esos eventos. Cuando el evento es lanzado se llama a esa subrutina..
Puedes usar los eventos de raton sobre controles o formas.
Codigo:
GraphicsWindow.MouseDown = MouseClick

Pgina 216 de 364

GraphicsWindow.MouseMove = MouseDrag
GraphicsWindow.MouseUp = MouseUp
Sub MouseClick
OrgX = GraphicsWindow.MouseX
OrgY = GraphicsWindow.MouseY
EndSub
Sub MouseDrag
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
If (Mouse.IsLeftButtonDown) then
GraphicsWindow.DrawLine(OrgX, OrgY, x, y)
Endif
EndSub
Sub MouseUp
GraphicsWindow.PenColor=GraphicsWindow.GetRandomColor()
GraphicsWindow.PenWidth=Math.GetRandomNumber(5)
EndSub

Pgina 217 de 364

Solucion:
GraphicsWindow.Hide()
w = 620
h = 450
GraphicsWindow.CanResize = "False"
GraphicsWindow.Width = w
GraphicsWindow.Height = h
GraphicsWindow.Top = (Desktop.Height-h) / 2
GraphicsWindow.Left = (Desktop.Width-w) / 2
GraphicsWindow.Show()
GraphicsWindow.Title = "Events and interactivity"
GUI()
Controls.ButtonClicked = MouseAction
Sub GUI
GraphicsWindow.DrawRectangle(10, 10, 600, 320)
GraphicsWindow.DrawRectangle(10, 340, 200, 100)
GraphicsWindow.DrawRectangle(10, 340, 600, 100)
GraphicsWindow.DrawRectangle(370, 340, 150, 100)
Triangle = Controls.AddButton("Triangle", 40, 345)

Pgina 218 de 364

Controls.SetSize(Triangle, 120, 30)


Rectangle = Controls.AddButton("Rectangle",40,375)
Controls.SetSize(Rectangle, 120, 30)
Circle = Controls.AddButton("Circle", 40, 405)
Controls.SetSize(Circle, 120, 30)
Rotate = Controls.AddButton("Rotate", 230, 360)
Controls.SetSize(Rotate, 60, 60)
Zoom = Controls.AddButton("Zoom", 290, 360)
Controls.SetSize(Zoom, 60, 60)
FreeHand = Controls.AddButton("Draw", 390, 360)
Controls.SetSize(FreeHand, 60, 60)
Clear = Controls.AddButton("Clear", 450, 360)
Controls.SetSize(Clear, 60, 60)
Exit = Controls.AddButton("Exit", 530, 360)
Controls.SetSize(Exit, 60, 60)
EndSub
Sub MouseAction
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
GraphicsWindow.PenWidth = 1
If x > 40 And x < 160 Then
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
If y > 345 And y < 375 Then
draw = 0
j=0
z=1
tri = Shapes.AddTriangle(20, 20, 100, 100, 150, 20)
Shapes.Move(tri, 80, 100)
EndIf
If y > 375 And y < 405 Then
draw = 0
j=0
z=2
rect = Shapes.AddRectangle(100, 100)
Shapes.Move(rect, 250, 150)
EndIf
If y > 405 And y < 435 Then

Pgina 219 de 364

draw = 0
j=0
z=3
circ = Shapes.AddEllipse(100, 100)
Shapes.Move(circ, 400, 150)
EndIf
EndIf
If y > 360 And y < 420 Then
If x > 230 And x < 290 Then
draw = 0
If z = 1 Then
Shapes.Rotate(tri, 30 + m)
Else
If z = 2 Then
Shapes.Rotate(rect,30 + m)
Else
If z = 3 Then
Shapes.Rotate(circ, 30 + m)
Endif
Endif
Endif
m = m + 30
EndIf
If x > 290 And x < 390 Then
draw = 0
i = 0.1 + j
If i < 0.4 Then
If z = 1 Then
Shapes.Zoom(tri, 1 + i, 1 + i)
Else
If z = 2 Then
Shapes.Zoom(rect, 1 + i, 1 + i)
Else
If z = 3 Then
Shapes.Zoom(circ, 1 + i, 1 + i)
EndIf
EndIf

Pgina 220 de 364

EndIf
j = j + 0.1
EndIf
EndIf
If x > 390 And x < 450 Then
draw = 1
Paint()
EndIf
If x > 450 And x < 510 Then
draw = 0
j=0
GraphicsWindow.Clear()
GraphicsWindow.BrushColor = "Blue"
GUI()
draw = 0
EndIf
If x > 530 And x < 590 Then
draw = 0
Program.End()
EndIf
EndIf
EndSub
Sub Paint
If draw = 1 Then
GraphicsWindow.MouseMove = MouseDrag
Else
If Mouse.IsLeftButtonDown Then
MouseAction()
EndIf
EndIf
EndSub
Sub MouseDrag
If draw = 1 then
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
If x > 10 And x < 600 And y > 10 And y < 320 Then
If Mouse.IsLeftButtonDown Then

Pgina 221 de 364

GraphicsWindow.DrawLine(OrgX, OrgY, x, y)
EndIf
EndIf
OrgX = x
OrgY = y
EndIf
EndSub

Pgina 222 de 364

Pgina 223 de 364

Codigo:
textbox = Controls.AddTextBox(200, 150)
button = Controls.AddButton("Button", 150, 200)

Pgina 224 de 364

Codigo:
Controls.GetButtonCaption(button)
Controls.SetButtonCaption(button, "Click")
Controls.GetTextBoxText(textbox)
Controls.SetTextBoxText(textbox, "Hello World!")

Pgina 225 de 364

Puedes aadir controles en la ventana escribiendo una instruccin que contenga una
operacin del Objeto Controls.Miremos al ejempo de la imagen:
Primero usamos la operacin AddTextBox para aadir cajas de texto que aceptan el
primero y ultimo nombre del usuario.. Debes especificar las coordinadas x e y como
parmetros.
Seguidamente usamos la operacin AddButtom para aadir un botn en la ventana
grfica. Ademas de las coordenadas x e y , debemos especificar tambien como
parametros la etiqueta del botn.
Luego, usas la operacin AddMultiLineTextBox para aadir otra caja de texto. Debes
especificar como parametros las coordenadas x e y.
En este ejemplo quieres mostrar un mensage en la caja de texto multilinea cuando el
usuario pulsa Show Message. Usas el evento ButtonClicked y creas una subrutina para
mostrar ese mensage en la caja de texto multi linea.
Para ejecutar el programa pulsa Run o F5
Codigo:
GraphicsWindow.DrawText(50, 100, "Enter your first name:")
firstname = Controls.AddTextBox(200, 100)
GraphicsWindow.DrawText(50, 150, "Enter your last name:")
lastname = Controls.AddTextBox(200, 150)
showbutton = Controls.AddButton("Show Message", 150, 200)
message = Controls.AddMultiLineTextBox(50, 250)

Pgina 226 de 364

Controls.SetSize(message, 310, 50)


Controls.ButtonClicked = ShowMessage
Sub ShowMessage
If Controls.GetButtonCaption(showbutton) = "Show Message" Then
Controls.SetTextBoxText(message,"Hello " + Controls.GetTextBoxText(firstname) + " "
+ Controls.GetTextBoxText(lastname))
EndIf
EndSub

Codigo:
Controls.HideControl(textbox)
Controls.ShowControl(button)
Controls.Remove(textbox)

Pgina 227 de 364

Codigo:
Controls.SetSize(textbox, 300, 50)
Controls.Move(textbox, 100, 150)

Puedes usar los controles en tus programas, por ejemplo cajas de texto y botones.
Fjate en el programa propuesto. En este programa se muestran dos cajas de texto y un
boton Search. En la primera caja de texto el ususaio escribe un mundo. Cuando se

Pgina 228 de 364

pulsa el boton Search, la definicin del mundo aparece en la segunda caja de texto
multiolinea. Usamos el Objeto Dictionary para encontrar elsignificado del mundo en la
caja de texto multilinea.
Codigo:
GraphicsWindow.Title = "Dictionary"
GraphicsWindow.Height = 600
GraphicsWindow.Width = 600
GraphicsWindow.DrawText(50, 80, "Enter Text: ")
textbox = Controls.AddTextBox(50, 100)
Controls.SetSize(textbox, 100, 30)
Controls.SetTextBoxText(textbox, "")
GraphicsWindow.DrawText(50, 140, "Dictionary Meanings: ")
multitxt = Controls.AddMultiLineTextBox(50, 160)
Controls.SetSize(multitxt, 500, 400)
Getdfn = Controls.AddButton("Search", 200, 100)
GraphicsWindow.DrawText(80, 80, "")
meaning = Dictionary.GetDefinition(Controls.GetTextBoxText(textbox))
Controls.SetTextBoxText(multitxt, meaning)
Controls.ButtonClicked = Showmeaning
Sub Showmeaning
If Controls.GetButtonCaption(Getdfn) = "Search" Then
meaning = Dictionary.GetDefinition(Controls.GetTextBoxText(textbox))
Controls.SetTextBoxText(multitxt, meaning)
EndIf
EndSub

Pgina 229 de 364

Estudiemos los eventos de control con un a simle calculadora. Popdemos crearla


usando el control TextBox, el control Button y el evento ButtonCLicked. El usuario
puede introducir dos nmeros y mostrar el resultado de la suma, resta, multiplicacin y
division.
Primero creamos la interfaz de usuari en la ventana grfica, usando el objeto
GraphicsWindow e insertando las cajas de texto y botones usando los objetos
Controls. Seguidamente usamos el evento ButtonClicked y una subrutina que contiene
las acciones que generaran la suma, resta, multiplicacin y divisin de los dos nmeros.
Cuando ejecutes el programa se mostraran tres cajas de texto, Dos para la entrada de
lso dos nmeros y una tercera para el resultado. Cuando se presina el botn,
elresultado aparece en la caja de texto del resultado. La calculadora tambien contiene
un botn para borrar el texto de las tres cajas de texto.
Codigo:
w = 350
h = 290
GraphicsWindow.CanResize = "False"
GraphicsWindow.Width = w
GraphicsWindow.Height = h
GraphicsWindow.Top = (Desktop.Height-h) / 2
GraphicsWindow.Left = (Desktop.Width-w) / 2
GraphicsWindow.Title = "Calculator"

Pgina 230 de 364

CreateGUI()
Controls.ButtonClicked = ButtonDown
Sub CreateGUI
GraphicsWindow.DrawRectangle(10, 10, 330, 270)
GraphicsWindow.DrawText(50, 70, "Enter first Number: ")
Ftextbox = Controls.AddTextBox(200, 60)
Controls.SetSize(Ftextbox, 60, 30)
GraphicsWindow.DrawText(50, 120, "Enter Second Number: ")
Stextbox = Controls.AddTextBox(200, 110)
Controls.SetSize(Stextbox, 60, 30)
GraphicsWindow.DrawText(50, 170,"Answer is:")
Atextbox=Controls.AddTextBox(200, 160)
Controls.SetSize(Atextbox, 60, 30)
GraphicsWindow.FontSize = 15
Plus = Controls.AddButton("+", 20, 210)
Controls.SetSize(Plus, 40, 40)
Minus = Controls.AddButton("-", 70, 210)
Controls.SetSize(Minus, 40, 40)
Asterisk = Controls.AddButton("*", 120, 210)
Controls.SetSize(Asterisk, 40, 40)
Division = Controls.AddButton("/", 170, 210)
Controls.SetSize(Division, 40, 40)
Clear = Controls.AddButton("C", 220, 210)
Controls.SetSize(Clear, 40, 40)
EndSub
Sub ButtonDown
FtxtValue = controls.GetTextBoxText(Ftextbox)
StxtValue = controls.GetTextBoxText(Stextbox)
operator = Controls.GetButtonCaption(Controls.LastClickedButton)
If operator = "C" Then
Controls.SetTextBoxText(Ftextbox, "")
Controls.SetTextBoxText(Stextbox, "")
Controls.SetTextBoxText(Atextbox, "")
ElseIf operator = "+" Then
AtxtValue = FtxtValue + StxtValue
Controls.SetTextBoxText(Atextbox, AtxtValue)
ElseIf operator = "-" Then

Pgina 231 de 364

AtxtValue = FtxtValue - StxtValue


Controls.SetTextBoxText(Atextbox, AtxtValue)
ElseIf operator = "*" Then
AtxtValue=FtxtValue*StxtValue
Controls.SetTextBoxText(Atextbox,AtxtValue)
Else
AtxtValue=FtxtValue/StxtValue
Controls.SetTextBoxText(Atextbox,AtxtValue)
EndIf
EndSub

Pgina 232 de 364

Solucion:
GraphicsWindow.Show()
GraphicsWindow.Width = 300
GraphicsWindow.Height = 250
GraphicsWindow.Top = (Desktop.Height - 450) / 2
GraphicsWindow.left = (Desktop.Width - 600) / 2
GraphicsWindow.Title = "Application Form:"
x = 30
y = 37
'Enter Name
GraphicsWindow.DrawText(x, y, "Name:")
NameTxtBox = Controls.AddTextBox(120, 35)
Controls.SetSize(NameTxtBox, 150, 20)
'Address
GraphicsWindow.DrawText(x, y + 40, "Address:")
AddressTxtBox = Controls.AddMultiLineTextBox(120, 70)

Pgina 233 de 364

Controls.SetSize(AddressTxtBox, 150, 40)

'Telephone details
GraphicsWindow.DrawText(x, y + 90, "Telephone:")
TelphoneTxtBox = Controls.AddTextBox(120, 125)
Controls.SetSize(TelphoneTxtBox, 150, 20)
'Email -id
GraphicsWindow.DrawText(x, y + 125, "E-mail ID:")
EmailTxtBox = Controls.AddTextBox(120, 160)
Controls.SetSize(EmailTxtBox, 150, 20)
'Submit
SubmitButton = Controls.AddButton("Submit", x + 30, y + 160)
Controls.SetSize(SubmitButton, 70, 30)
'Cancel
CancelButton = Controls.AddButton("Cancel", x + 130, y + 160)
Controls.SetSize(CancelButton, 70, 30)
Controls.ButtonClicked = SubmitForm
Sub SubmitForm
Name = controls.GetTextBoxText(NameTxtBox)
Address = controls.GetTextBoxText(AddressTxtBox)
Telphone = controls.GetTextBoxText(TelphoneTxtBox)
Email = controls.GetTextBoxText(EmailTxtBox)
If Controls.GetButtonCaption(Controls.LastClickedButton) = "Submit" Then
If Name = "" or Address = "" or Telphone = "" or Email = "" Then
GraphicsWindow.ShowMessage("Please fill in all the details.", "Error Message")
Else
GraphicsWindow.ShowMessage("Your details have been submitted successfully!",
"Congratulations!")
EndIf
ElseIf Controls.GetButtonCaption(Controls.LastClickedButton) = "Cancel" Then
Program.End()

Pgina 234 de 364

EndIf
EndSub

Pgina 235 de 364

Pgina 236 de 364

Pgina 237 de 364

En este programa dibujas una elipse. A continuacin estableces su opacidad con la


operacin SetOpacity del objeto Shapes. Se coloca este cdigo dentro de un bucle
For..EndFor, para cambiar la oopacidad en cada interaccin.. Igualmente estableces el
zoom dentro del mismo bucle.
Codigo:
GraphicsWindow.Height = 400
GraphicsWindow.Width = 600
Ellipse = Shapes.AddEllipse(200,200)
Shapes.Move(Ellipse,200,100)
For i = 1 To 5
Program.Delay(1000)
Shapes.SetOpacity(Ellipse,5*i)
Shapes.Zoom(Ellipse,i * 0.4,i * 0.4)
TextWindow.WriteLine("Value of i at this moment is " + i)
EndFor

Pgina 238 de 364

Codigo:
GraphicsWindow.Show()
GraphicsWindow.DrawImage(Flickr.GetPictureOfMoment(), 0, 0)
Program.Delay(2000)
GraphicsWindow.Clear()

Pgina 239 de 364

Codigo:
GraphicsWindow.Show()
GraphicsWindow.DrawImage(Flickr.GetPictureOfMoment(), 0, 0)
TextWindow.WriteLine("The path of image from flickr" + Flickr.GetPictureOfMoment())
Program.Delay(2000)
GraphicsWindow.Clear()

Pgina 240 de 364

Codigo:
Sourcepath = Program.Directory+"\Source\data.txt"
Destpath = Program.Directory+"\dest"
file.CopyFile(Sourcepath,Destpath)
TextWindow.WriteLine(File.ReadContents(File.ReadContents(destPath+"\data.txt")))

Pgina 241 de 364

Codigo:
Sourcepath = Program.Directory+"\Source\data.txt"
Destpath = Program.Directory+"\dest"
TextWindow.WriteLine(file.CopyFile(Sourcepath,Destpath))
TextWindow.WriteLine(File.ReadContents(File.ReadContents(destPath+"\data.txt")))

Pgina 242 de 364

Solucion:
Please Note: Ensure that a folder containing the images exists at the path specified in
the program.
ImagePath = program.Directory + "\img"
i=1
GraphicsWindow.Width = 600
GraphicsWindow.Height = 450
GraphicsWindow.Top = (Desktop.Height-450) / 2
GraphicsWindow.left = (Desktop.Width-600) / 2
GUI()
SmallBasicImage = File.GetFiles(ImagePath)
GraphicsWindow.DrawResizedImage(SmallBasicImage[i], 50, 50, 500, 300)
Controls.ButtonClicked = SlideShow
Sub GUI
GraphicsWindow.BackgroundColor="LightSlateGray"
GraphicsWindow.FontSize=25
nxtBtn = Controls.AddButton("<",50,370)
bckBtn = Controls.AddButton(">",500,370)

Pgina 243 de 364

Controls.SetSize(nxtBtn, 50, 50)


Controls.SetSize(bckBtn, 50, 50)
EndSub
Sub SlideShow
If Controls.GetButtonCaption(Controls.LastClickedButton) = ">" Then
If i < Array.GetItemCount(SmallBasicImage) Then
i=i+1
images[i] = ImageList.LoadImage(SmallBasicImage[i])
GraphicsWindow.DrawResizedImage(images[i], 50, 50, 500, 300)
TextWindow.WriteLine("Image Name:" + SmallBasicImage[i])
EndIf
EndIf
If Controls.GetButtonCaption(Controls.LastClickedButton) = "<" Then
If i > 1 Then
i=i-1
images[i] = ImageList.LoadImage(SmallBasicImage[i])
GraphicsWindow.DrawResizedImage(images[i], 50, 50, 500, 300)
TextWindow.WriteLine("Image Name:" + SmallBasicImage[i])
EndIf
EndIf
EndSub

Pgina 244 de 364

Pgina 245 de 364

Pgina 246 de 364

Pgina 247 de 364

Codigo:
' Copyright (c) Microsoft Corporation. All rights reserved.
gw = 450
gh = 400
tx = 225
ty = 320
score = 0
angle = 0
ballDirection = -1
ballSpeed = 0.3
acceleration = 1.001
power = 1.2
gameStarted = "False"
ballX = 210
ballY = 280
GraphicsWindow.KeyDown = OnKeyDown
CreateUI()
gameOver = "False"
While gameStarted = "False"
Program.Delay(300)
EndWhile
gameStartTime = Clock.ElapsedMilliseconds
Shapes.Remove(directions)
While gameOver = "False"
Shapes.Rotate(paddle, angle)
power = 1 + Math.Abs(angle) / 200
Shapes.Rotate(paddle, angle)
CalculateBallMetrics()
Shapes.Move(ball, ballX, ballY)
WriteTime()
Program.Delay(20)
If ballX < 105 Or ballX > 315 Then
gameOver = "True"

Pgina 248 de 364

EndIf
EndWhile
GraphicsWindow.ShowMessage("You survived for " + timeDisplayText + ".", "Game
Over")
Sub CreateUI
GraphicsWindow.CanResize = "False"
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.Top = (Desktop.Height - gh) / 2
GraphicsWindow.Left = (Desktop.Width - gw) / 2
GraphicsWindow.DrawRectangle(10, 10, 430, 380)
GraphicsWindow.BrushColor = "Violet"
tri = Shapes.AddTriangle(tx, ty, tx - 50, ty + 50, tx + 50, ty + 50)
GraphicsWindow.BrushColor = "Purple"
paddle = Shapes.AddRectangle(210, 10)
Shapes.Move(paddle, 120, 310)
GraphicsWindow.BrushColor = "Red"
ball = Shapes.AddEllipse(30, 30)
Shapes.Move(ball, ballX, ballY)
GraphicsWindow.FontSize = 16
GraphicsWindow.FontName = "Verdana"
directions = Shapes.AddText("Press ENTER to start the game!")
Shapes.Move(directions, 80, 150)
GraphicsWindow.BrushColor = "Blue"
timeText = Shapes.AddText("Time: 00:00")
Shapes.Move(timeText, 310, 16)
EndSub
Sub OnKeyDown
If gameStarted = "True" Then
If GraphicsWindow.LastKey = "Left" Then
angle = Math.Max(-40, angle - 1)

Pgina 249 de 364

ElseIf GraphicsWindow.LastKey = "Right" Then


angle = Math.Min(40, angle + 1)
EndIf
Else
If GraphicsWindow.LastKey = "Return" Then
gameStarted = "True"
EndIf
EndIf
EndSub
Sub CalculateBallMetrics
If ballDirection = angle / Math.Abs(angle) Then
ballSpeed = Math.Min(2, ballSpeed * power)
Else
ballSpeed = Math.Max(0.1, ballSpeed / power)
If ballSpeed < 0.2 Then
ballDirection = -1 * ballDirection
ballSpeed = 0.2
EndIf
EndIf
ballX = ballX + ballDirection * ballSpeed
deltaX = ballX - 210
deltaY = deltaX * Math.Sin(Math.GetRadians(angle))
ballY = 280 + deltaY
EndSub
Sub WriteTime
elapsedTime = Clock.ElapsedMilliseconds - gameStartTime
totalSeconds = Math.Round(elapsedTime / 1000)
seconds = Math.Remainder(totalSeconds, 60)
minutes = Math.Round(totalSeconds / 60)
If (seconds < 10) Then
seconds = Text.Append("0", seconds)
EndIf
If (minutes < 10) Then
minutes = Text.Append("0", minutes)
EndIf

Pgina 250 de 364

timeDisplayText = minutes + ":" + seconds


Shapes.SetText(timeText, "Time: " + timeDisplayText)
EndSub

Pgina 251 de 364

Codigo:
' Copyright (c) Microsoft Corporation. All rights reserved.
GraphicsWindow.Hide()
gw = 620
gh = 400
GraphicsWindow.CanResize = "False"
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.Top = ( Desktop.Height - gh ) / 2
GraphicsWindow.Left = ( Desktop.Width - gw ) / 2
GraphicsWindow.Title = "Hit the Right Shape"
GraphicsWindow.Show()
sec = 50
Score = 0
ScoreboxX = 420
delayspeed = 15
GraphicsWindow.MouseDown = MouseClick
shapeNames[0] = ""
shapeNames[1] = "Square"

Pgina 252 de 364

shapeNames[2] = "Rectangle"
shapeNames[3] = "Ellipse"
shapeNames[4] = "Circle"
textBox = Controls.AddTextBox(200, 0)
Controls.SetTextBoxText(textBox, "Square")
ShowScore()
GraphicsWindow.BrushColor = "Pink"
GraphicsWindow.DrawRectangle(-2, 25, GraphicsWindow.Width + 2,
GraphicsWindow.Height - 50)
GraphicsWindow.FillRectangle(-2, 25, GraphicsWindow.Width + 2,
GraphicsWindow.Height - 50)
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
elli = Shapes.AddEllipse(60, 40)
Shapes.Move(elli, -90, 50)
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
rect = Shapes.AddRectangle(60, 40)
Shapes.Move(rect, -20, 50)
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
circle = Shapes.AddEllipse(80, 80)
Shapes.Move(circle, 20, 50)
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
square1 = Shapes.AddRectangle(40, 40)
Shapes.Move(square1, 230, 50)
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
rect1 = Shapes.AddRectangle(40, 80)
Shapes.Move(rect1, 300, 250)
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
elli1 = Shapes.AddEllipse(35, 60)
Shapes.Move(elli1, 100, 250)
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
square2 = Shapes.AddRectangle(20, 20)
Shapes.Move(square2, 250, 250)
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
circle1 = Shapes.AddEllipse(80, 80)
Shapes.Move(circle1, 450, 210)
i=1
prevSec = 0

Pgina 253 de 364

currSec = Clock.ElapsedMilliseconds
eSec = currSec
While 1 = 1
Shapes.Move(elli, Shapes.GetLeft(elli) + 4, 50)
If Shapes.GetLeft(elli) > 650 Then
shapes.ShowShape(square1)
Shapes.Move(elli, -90, 300)
EndIf
Shapes.Move(rect, Shapes.GetLeft(rect) + 5, 50)
If Shapes.GetLeft(rect) > 600 Then
shapes.ShowShape(rect)
Shapes.Move(rect, -20, 50)
EndIf
Shapes.Move(circle, Shapes.GetLeft(circle) + 4, 50)
If Shapes.GetLeft(circle) > 600 Then
shapes.ShowShape(circle)
Shapes.Move(circle, -110, 100)
EndIf
Shapes.Move(square1, Shapes.GetLeft(square1) + 3, 50)
If Shapes.GetLeft(square1) > 600 Then
shapes.ShowShape(square1)
Shapes.Move(square1, -200, 100)
EndIf
Shapes.Move(rect1, Shapes.GetLeft(rect1) + 6, 250)
If Shapes.GetLeft(rect1) > 600 Then
shapes.ShowShape(rect1)
Shapes.Move(rect1, -100, 180)
EndIf
Shapes.Move(elli1, Shapes.GetLeft(elli1) + 2, 250)
If Shapes.GetLeft(elli1) > 600 Then
shapes.ShowShape(elli1)
Shapes.Move(elli1, -60, 70)

Pgina 254 de 364

EndIf
Shapes.Move(square2, Shapes.GetLeft(square2)+3, 250)
If Shapes.GetLeft(square2) > 600 Then
shapes.ShowShape(square2)
Shapes.Move(square2, -250, 300)
EndIf
Shapes.Move(circle1, Shapes.GetLeft(circle1) + 5, 210)
If Shapes.GetLeft(circle1) > 600 Then
Shapes.ShowShape(circle1)
Shapes.Move(circle1, -50, 210)
EndIf
sec = sec - 0.01
GraphicsWindow.BrushColor = "Blue"
GraphicsWindow.FillRectangle(ScoreboxX+60, 0, 100, 25)
GraphicsWindow.BrushColor = "White"
GraphicsWindow.DrawText(ScoreboxX + 62, 5, "Time:")
If sec >= 10 Then
GraphicsWindow.DrawText(ScoreboxX + 110, 5,"00:" + Math.Floor(sec))
ElseIf sec > 0 Then
GraphicsWindow.DrawText(ScoreboxX + 110, 5,"00:0" + Math.Floor(sec))
EndIf
If sec <= 0 Then
Goto out
EndIf
Program.Delay(delayspeed)
currentSec = Clock.ElapsedMilliseconds
If (currentSec - prevSec) >= 5000 Then
i = Math.GetRandomNumber(4)
If i <> 0 Then
Controls.SetTextBoxText(textBox, shapeNames[i])
EndIf
prevSec = currentSec
EndIf

Pgina 255 de 364

currSec = Clock.ElapsedMilliseconds
EndWhile
out:
GraphicsWindow.DrawText(ScoreboxX + 110, 5,"00:0" + Math.Floor(sec))
GraphicsWindow.ShowMessage("Your score is: " + Score, "Game Over")
Program.End()
Sub MouseClick
leftPos_square1 = Shapes.GetLeft(square1)
topPos_square1 = Shapes.GetTop(square1)
leftPos_square2 = Shapes.GetLeft(square2)
topPos_square2 = Shapes.GetTop(square2)
leftPos_rect = Shapes.GetLeft(rect)
topPos_rect

= Shapes.GetTop(rect)

leftPos_rect1 = Shapes.GetLeft(rect1)
topPos_rect1 = Shapes.GetTop(rect1)
leftPos_elli = Shapes.GetLeft(elli)
topPos_elli

= Shapes.GetTop(elli)

leftPos_elli1 = Shapes.GetLeft(elli1)
topPos_elli1 = Shapes.GetTop(elli1)
leftPos_circle = Shapes.GetLeft(circle)
topPos_circle = Shapes.GetTop(circle)
leftPos_circle1 = Shapes.GetLeft(circle1)
topPos_circle1 = Shapes.GetTop(circle1)
If Controls.GetTextBoxText(textBox) = "Square" Then
If (GraphicsWindow.MouseX >= leftPos_square1) And (GraphicsWindow.MouseX
<= leftPos_square1 + 40) Then
If (GraphicsWindow.MouseY >= topPos_square1) And (GraphicsWindow.MouseY
<= topPos_square1 + 40) Then
Shapes.HideShape(square1)
Score = Score + 1
EndIf
EndIf
If (GraphicsWindow.MouseX >= leftPos_square2) And (GraphicsWindow.MouseX
<= leftPos_square2 + 20) Then
If (GraphicsWindow.MouseY >= topPos_square2) And (GraphicsWindow.MouseY
<= topPos_square2 + 20) Then

Pgina 256 de 364

Shapes.HideShape(square2)
Score = Score + 1
EndIf
EndIf
EndIf
If Controls.GetTextBoxText(textBox) = "Rectangle" Then
If (GraphicsWindow.MouseX >= leftPos_rect) And (GraphicsWindow.MouseX <=
leftPos_rect + 40) Then
If (GraphicsWindow.MouseY >= topPos_rect) And (GraphicsWindow.MouseY <=
topPos_rect + 40) Then
Shapes.HideShape(rect)
Score = Score + 1
EndIf
EndIf
If (GraphicsWindow.MouseX >= leftPos_rect1) And (GraphicsWindow.MouseX <=
leftPos_rect1 + 40) Then
If (GraphicsWindow.MouseY >= topPos_rect1) And (GraphicsWindow.MouseY <=
topPos_rect1 + 80) Then
Shapes.HideShape(rect1)
Score = Score + 1
EndIf
EndIf
EndIf
If Controls.GetTextBoxText(textBox) = "Ellipse" Then
If (GraphicsWindow.MouseX >= leftPos_elli) And (GraphicsWindow.MouseX <=
leftPos_elli + 60) Then
If (GraphicsWindow.MouseY >= topPos_elli) And (GraphicsWindow.MouseY <=
topPos_elli + 40) Then
Shapes.HideShape(elli)
Score = Score + 1
EndIf
EndIf
If (GraphicsWindow.MouseX >= leftPos_elli1) And (GraphicsWindow.MouseX <=
leftPos_elli1 + 60) Then

Pgina 257 de 364

If (GraphicsWindow.MouseY >= topPos_elli1) And (GraphicsWindow.MouseY <=


topPos_elli1 + 40) Then
Shapes.HideShape(elli1)
Score = Score + 1
EndIf
EndIf
EndIf
If Controls.GetTextBoxText(textBox) = "Circle" Then
If (GraphicsWindow.MouseX >= leftPos_circle) And (GraphicsWindow.MouseX <=
leftPos_circle + 80) Then
If (GraphicsWindow.MouseY >= topPos_circle) And (GraphicsWindow.MouseY <=
topPos_circle + 80) Then
Shapes.HideShape(circle)
Score = Score + 1
EndIf
EndIf
If (GraphicsWindow.MouseX >= leftPos_circle1) And (GraphicsWindow.MouseX <=
leftPos_circle1 + 40) Then
If (GraphicsWindow.MouseY >= topPos_circle1) And (GraphicsWindow.MouseY <=
topPos_circle1 + 40) Then
Shapes.HideShape(circle1)
Score = Score + 1
EndIf
EndIf
EndIf
ShowScore()
EndSub
Sub ShowScore
GraphicsWindow.FontName = "Verdana"
GraphicsWindow.FontSize = 14
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(0, 0, 100, 20)
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(10, 5, "Score: " + Score)
EndSub

Pgina 258 de 364

Pgina 259 de 364

Solucion:
' Copyright (c) Microsoft Corporation. All rights reserved.
GraphicsWindow.Hide()
gw = 620
gh = 450
endtime = Clock.ElapsedMilliseconds
starttime = Clock.ElapsedMilliseconds
blinktime = Clock.ElapsedMilliseconds
gamestarttime = Clock.ElapsedMilliseconds
GraphicsWindow.CanResize = "False"
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.Top = ( Desktop.Height - gh ) / 2
GraphicsWindow.Left = ( Desktop.Width - gw ) / 2
GraphicsWindow.Title = "Flower"
GraphicsWindow.BrushColor ="Pink"
GraphicsWindow.Show()
CreateUI()
GraphicsWindow.MouseDown = MouseAction
Controls.ButtonClicked = OnclickButton
starttimer()
Sub MouseAction
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
GraphicsWindow.MouseMove = MouseMove
If x > px And x < px + 180 And y > py And y < py + 400 Then
GraphicsWindow.MouseUp = onMouseUpEvent
If x < px + 90 and y < py + 100 Then
sh = leaf1
bsh = leafs[1]
GetShapeXY()
ElseIf x < px + 200 And y < py + 100 Then
sh = petal1
bsh = petals[1]
GetShapeXY()
ElseIf x < px + 90 and y < py + 200 Then

Pgina 260 de 364

sh = stik
bsh = stick
GetShapeXY()
ElseIf x < px + 200 And y < py + 200 Then
sh = circle
bsh = circ
GetShapeXY()
ElseIf x < px + 90 And y < py + 300 Then
sh = petal2
bsh = petals[2]
GetShapeXY()
ElseIf x < px + 200 And y < py + 300 then
sh = petal3
bsh = petals[3]
GetShapeXY()
ElseIf x < px+90 And y < py + 400 Then
sh = petal4
bsh = petals[4]
GetShapeXY()
ElseIf x < px + 200 And y < py + 400 Then
sh = leaf2
bsh = leafs[2]
GetShapeXY()
EndIf
EndIf
EndSub
Sub GetShapeXY
shx = shapes.GetLeft(sh)
shy = shapes.GetTop(sh)
EndSub
Sub CreateUI
GraphicsWindow.DrawRectangle(10, 10, 380, 420)
GraphicsWindow.DrawRectangle(410, 10, 200, 420)
GraphicsWindow.BrushColor = "Brown"
stick = Shapes.AddRectangle(5, 180)

Pgina 261 de 364

Shapes.Move(stick, 174, 238)


GraphicsWindow.BrushColor = "Pink"
petals[1] = Shapes.AddEllipse(70, 55)
Shapes.Move( petals[1], 93, 115)
Shapes.Rotate( petals[1], 15)
petals[2] = Shapes.AddEllipse(70, 55)
Shapes.Move(petals[2], 148, 81)
Shapes.Rotate(petals[2], 105)

petals[3] = Shapes.AddEllipse(75, 55)


Shapes.Move( petals[3], 185, 135 )
Shapes.Rotate( petals[3], 200 )
petals[4] = Shapes.AddEllipse(75, 55)
Shapes.Move( petals[4], 135, 175)
Shapes.Rotate( petals[4], 90)
GraphicsWindow.BrushColor = "Yellow"
circ = Shapes.AddEllipse(25, 25)
Shapes.Move(circ, 162, 140)
GraphicsWindow.BrushColor = "Green"
For i = 1 To 2
leafs[i] = Shapes.AddEllipse(50, 25)
Shapes.Move(leafs[i], 223 -(i * 48), 258)
Shapes.Rotate(leafs[i], 180 * i)
EndFor
Hide()
px = 420
py = 20
pw = 90
ph = 100
GraphicsWindow.DrawRectangle(px, py, 180, 200)

Pgina 262 de 364

GraphicsWindow.DrawRectangle(px, 220, 180, 200)


GraphicsWindow.DrawRectangle(px, py, pw, ph)
GraphicsWindow.DrawRectangle(px + 90, py, pw, ph)
GraphicsWindow.DrawRectangle(px, py + 100, pw, ph)
GraphicsWindow.DrawRectangle(px + 90, py + 100, pw, ph)
GraphicsWindow.DrawRectangle(px, py + 200, pw, ph)
GraphicsWindow.DrawRectangle(px + 90, py + 200, pw, ph)
GraphicsWindow.DrawRectangle(px, py + 300, pw, ph)
GraphicsWindow.DrawRectangle(px + 90, py + 300, pw, ph)
GraphicsWindow.BrushColor = "Green"
leaf1 = Shapes.AddEllipse(50, 25)
Shapes.Move(leaf1, px + 20, py + 40)
leaf2 = Shapes.AddEllipse(50, 25)
Shapes.Move(leaf2, px + 115, py + 340)
GraphicsWindow.BrushColor = "Pink"
petal1 = Shapes.AddEllipse(65, 50)
Shapes.Move(petal1, px + 105, py + 30)
Shapes.Rotate(petal1, 15)
petal2 = Shapes.AddEllipse(65, 50)
Shapes.Move(petal2, px + 20, py + 230)
Shapes.Rotate(petal2, 105)
petal3=Shapes.AddEllipse(65, 50)
Shapes.Move(petal3, px + 105, py + 230)
Shapes.Rotate(petal3, 200)
petal4 = Shapes.AddEllipse(65, 50)
Shapes.Move(petal4, px + 20, py + 330)
Shapes.Rotate(petal4, 90)
GraphicsWindow.BrushColor = "Brown"
stik = Shapes.AddRectangle(5, 50)

Pgina 263 de 364

Shapes.Move(stik, px + 40, py + 130)


GraphicsWindow.BrushColor = "Yellow"
circle = Shapes.AddEllipse(25, 25)
Shapes.Move(circle, px + 120, py + 130)
EndSub
Sub Hide
For i = 1 To 8
Shapes.SetOpacity(petals[i], 10)
EndFor
For i = 1 To 2
Shapes.SetOpacity(leafs[i], 10)
EndFor
Shapes.SetOpacity(circ, 10)
Shapes.SetOpacity(stick, 10)
EndSub
Sub MouseMove
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
If Mouse.IsLeftButtonDown Then
Shapes.Move(sh, x, y)
EndIf
EndSub
Sub onMouseUpEvent
If bsh = stick Then
If (Shapes.GetLeft(sh) + 10) >= Shapes.GetLeft(bsh) And (Shapes.GetLeft(sh) - 10)
<= Shapes.GetLeft(bsh) Then
Shapes.SetOpacity(bsh, 100)
Shapes.Remove(sh)
dropped = dropped + 1
Else
Shapes.Move(sh, shx, shy)
EndIf
EndIf

Pgina 264 de 364

If (Shapes.GetLeft(sh) + 10) >= Shapes.GetLeft(bsh) And (Shapes.GetLeft(sh) - 10) <=


Shapes.GetLeft(bsh) And (Shapes.GetTop(sh) + 10) >= Shapes.GetTop(bsh) And
(Shapes.GetTop(sh) - 10) <= Shapes.GetTop(bsh) Then
Shapes.SetOpacity(bsh, 100)
Shapes.Remove(sh)
dropped=dropped + 1
Else
Shapes.Move(sh, shx, shy)
EndIf
EndSub
Sub starttimer
GraphicsWindow.BrushColor = "Black"
Submitbtn = Controls.AddButton("Submit", 300, 390)
Controls.SetSize(Submitbtn, 70, 35)
end = Clock.ElapsedMilliseconds
start = Clock.ElapsedMilliseconds
blink = Clock.ElapsedMilliseconds
gamestart = Clock.ElapsedMilliseconds
init = 0
While init < 1
game = Clock.ElapsedMilliseconds - start
GraphicsWindow.BrushColor = "#3975e5"
GraphicsWindow.FontSize = 15
GraphicsWindow.FillRectangle(250, 20, 120, 25)
GraphicsWindow.BrushColor = "Black"
tsecamt = Math.Round(game / 1000)
tsec = Math.Remainder(tsecamt, 60)
tming = Math.Floor(tsecamt / 60)
tmin = Math.Remainder(tming, 60)
thour = Math.Floor(tming / 60)
If tsec < 10 Then
strSec = Text.Append(":0", tsec)
Else
strSec = Text.Append( ":", tsec)
EndIf

Pgina 265 de 364

If tmin < 10 Then


strMin = Text.Append( "0", tmin)
Else
strMin = Text.Append( "", tmin)
EndIf
sec = Text.Append(strMin, strSec)
GraphicsWindow.DrawText(250, 22, " Time: " + thour + ":" + sec )
GraphicsWindow.FontSize = 10
end = Clock.ElapsedMilliseconds
fps = 0
Program.Delay(1000)
EndWhile
EndSub
Sub OnclickButton
If Controls.GetButtonCaption(Controls.LastClickedButton) = "Submit" Then
IF dropped = 8 Then
init = 2
GraphicsWindow.ShowMessage("Congratulations! You took " + thour +":"+ tsec + "
seconds to complete the flower.","Result")
Program.End()
EndIf
EndIf
EndSub

Pgina 266 de 364

Pgina 267 de 364

Pgina 268 de 364

Code:
' Copyright (c) Microsoft Corporation. All rights reserved.

Pgina 269 de 364

GraphicsWindow.Hide()
gw = 600
gh = 450
GraphicsWindow.CanResize = "False"
GraphicsWindow.Top = (Desktop.Height - gh) / 2
GraphicsWindow.Left = (Desktop.Width - gw) / 2
GraphicsWindow.Title = "Drawing Shapes Using Turtle"
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.Show()
CreateUI()
Controls.ButtonClicked = OnButtonClicked
GraphicsWindow.MouseDown = OnMouseDown
Sub CreateUI
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(100, 25, "Enter the sides:")
sidesTextBox = Controls.AddTextBox(200, 20)
Controls.SetSize(sidesTextBox, 50, 30)
drawButton = Controls.AddButton("DrawShape", 280, 20)
Controls.SetSize(drawButton, 100, 30)
clearButton = Controls.AddButton("Clear", 390, 20)
Controls.SetSize(clearButton, 100, 30)
GraphicsWindow.PenColor = "Black"
GraphicsWindow.DrawRectangle(55, 55, 490, 380)
DrawPalette()
EndSub
Sub OnButtonClicked
clickedButton = Controls.LastClickedButton
If clickedButton = drawButton Then
sides = Controls.GetTextBoxText(sidesTextBox)
If sides < 3 or sides > 35 Then
Controls.SetTextBoxText(sidesTextBox, "")

Pgina 270 de 364

Else
DrawShape()
EndIf
ElseIf clickedButton = clearButton Then
Controls.SetTextBoxText(sidesTextBox, "")
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(55, 55, 490, 380)
GraphicsWindow.PenColor = "Black"
GraphicsWindow.DrawRectangle(55, 55, 490, 380)
EndIf
EndSub
Sub DrawPalette
color[1] = "Red"
color[2] = "DeepPink"
color[3] = "Magenta"
color[4] = "BlueViolet"
color[5] = "MediumSlateBlue"
color[6] = "LimeGreen"
color[7] = "DeepSkyBlue"
color[8] = "Blue"
color[9] = "DarkGreen"
color[10] = "Aqua"
color[11] = "Green"
color[12] = "SpringGreen"
color[13] = "Yellow"
color[14] = "YellowGreen"
color[15] = "SteelBlue"
color[16] = "DarkSlateBlue"
color[17] = "Black"
color[18] = "Orange"
GraphicsWindow.PenColor = "Black"
For i = 1 To 9
GraphicsWindow.Brushcolor = color[i]
paletteColor = Shapes.AddRectangle(40, 40)
Shapes.Move(paletteColor, 4, i * 44 + 6)

Pgina 271 de 364

Endfor
For i = 1 To 9
GraphicsWindow.Brushcolor = color[i + 9]
paletteColor = Shapes.AddRectangle(40, 40)
Shapes.Move(paletteColor, 554, i * 44 + 6)
EndFor
EndSub
Sub DrawShape
GraphicsWindow.DrawRectangle(55, 55, 490, 380)
Turtle.Show()
Program.Delay(500)
length = 500 / sides
angle = 360 / sides
Turtle.Speed = 10
Turtle.X = 300
Turtle.Y = 240
For j = 1 To 10
For i = 1 To sides
Turtle.Move(length)
Turtle.Turn(angle)
EndFor
Turtle.Turn(36)
EndFor
EndSub
Sub OnMouseDown
x = GraphicsWindow.MouseX
y = GraphicsWindow.MouseY
If y > 50 And y < 446 Then
If Math.Remainder((y - 6), 44) <= 40 Then
paletteIndex = Math.Floor((y - 6) / 44)
If x > 4 And x < 44 Then

Pgina 272 de 364

' Left Palette


GraphicsWindow.PenColor = color[paletteIndex]
Controls.SetTextBoxText(sidesTextBox, "")
ElseIf x > 554 And x < 594 Then
' Right Palette
GraphicsWindow.PenColor = color[paletteIndex + 9]
Controls.SetTextBoxText(sidesTextBox, "")
EndIf
GraphicsWindow.DrawRectangle(55, 55, 490, 380)
EndIf
EndIf
EndSub

Pgina 273 de 364

Codigo:
' Copyright (c) Microsoft Corporation. All rights reserved.
GraphicsWindow.Hide()

Pgina 274 de 364

gw = 450
gh = 400
GraphicsWindow.CanResize = "False"
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.Top = (Desktop.Height - gh) / 2
GraphicsWindow.Left = (Desktop.Width - gw) / 2
GraphicsWindow.Title = "Bounce the Ball"
GraphicsWindow.Show()
speed = 15
imagepathBase = Program.Directory + "\ground.png"
ballimage = Program.Directory + "\ball.png"
GraphicsWindow.FontSize = 14
Controls.ButtonClicked = OnClicked
angle = 30
sec = 0
min = 0
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
y = gh - 86
x = 210
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(10, 10, "Time: 00:00")
itxt = Shapes.AddText("Click on the ball to start the game!")
Shapes.Move(itxt, 100,130)
ball = Shapes.AddImage(ballimage)
base = Shapes.AddImage(imagepathBase)
Shapes.Move(base, 0, gh - 50)
ballbtn = Controls.AddButton("", x, y)
Controls.SetSize(ballbtn, 36, 36)
Shapes.Move(ball, x, y)
Shapes.Move(ballbtn, x, y)
Shapes.SetOpacity(ballbtn, 0)
Sub Onstart
bX = 1
bY = -2
rndNum = Math.GetRandomNumber(200)

Pgina 275 de 364

topy = rndnum
Loop:
y = y + bY
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
If x >= gw - 16 Or x <= 0 Then
bX = -bX
EndIf
If y <= rndNum Then
bY = -bY
EndIf
Shapes.Move(ball, x, y)
Shapes.Rotate(ball, angle + 30)
Shapes.Move(ballbtn, x, y)
Program.Delay(speed)
ShowScore()
If (y < gh - 86) Then
Goto Loop
EndIf
EndGame:
GraphicsWindow.ShowMessage("You bounced the ball for " + strMin + ":" + strSec + "
seconds.", "Game Over")
Program.End()
EndSub
Sub OnClicked
Shapes.HideShape(itxt)
speed = speed - 0.5
ShowScore()
Onstart()
EndSub
Sub ShowScore

Pgina 276 de 364

sec = sec + 0.01


If sec < 60 And min < 1 Then
strMin = "00"
If sec < 10 Then
strSec = Text.Append("0" , Math.Floor(sec))
ElseIf sec > 10 Then
strSec = Text.Append("" , Math.Floor(sec))
EndIf
Else
If min < 10 Then
strMin = Text.Append("0" , min)
ElseIf min > 10 Then
strMin = Text.Append("" , min)
EndIf
If sec < 10 Then
strSec = Text.Append("0" , Math.Floor(sec))
ElseIf sec > 10 Then
strSec = Text.Append("" , Math.Floor(sec))
EndIf
EndIf
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(50, 10, 200, 20)
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(54, 10,"" + strMin + ":" + strSec)
EndSub

Pgina 277 de 364

Pgina 278 de 364

Solucion:
' Copyright (c) Microsoft Corporation. All rights reserved.
GraphicsWindow.Hide()
gw = 500
gh = 350
scoreBoxLeft = 200
passedQuestion = 0
score = 0
Clicked = ""
i=1
Q[1] = "Nile is the longest river in the world."
Q[2] = "The highest mountain in the world is Mount Everest."
Q[3] = "Zambia is also known as the 'Country of Copper'."
Q[4] = "The coldest place on the earth is in Siberia."
Q[5] = "Sydney is the capital of the USA."
Q[6] = "The river Jordan flows out into the Dead sea."
Q[7] = "Mumbai is the capital of India."
Q[8] = "Africa is the largest coffee growing continent in the world."
Q[9] = "The largest desert in the world is Sahara Desert."
Q[10] = "London is the capital of the UK."
A[1] = "True"
A[2] = "True"
A[3] = "True"
A[4] = "True"
A[5] = "False"
A[6] = "True"
A[7] = "False"
A[8] = "False"
A[9] = "True"
A[10] = "True"
ArrayRandom[1] = "5234162"
ArrayRandom[2] = "1896523"
ArrayRandom[3] = "5974216"
ArrayRandom[4] = "2756194"
randomNumber = Math.GetRandomNumber(Array.GetItemCount(ArrayRandom))
GraphicsWindow.CanResize = "False"
GraphicsWindow.Width = gw

Pgina 279 de 364

GraphicsWindow.Height = gh
GraphicsWindow.Top = (Desktop.Height - gh) / 2
GraphicsWindow.Left = (Desktop.Width - gw) / 2
GraphicsWindow.Title = "True or False"
GraphicsWindow.Show()
Controls.ButtonClicked = OnButtonClicked
CreateUI()
Sub CreateUI
GraphicsWindow.BrushColor = "Purple"
GraphicsWindow.FontName = "Verdana"
GraphicsWindow.FontSize = 14
GraphicsWindow.DrawRectangle(10, 10, 480, 330)
trueButton = Controls.AddButton("True", 30, 210)
falseButton = Controls.AddButton("False", 320, 210)
Controls.SetSize(trueButton, 150, 100)
Controls.SetSize(falseButton, 150, 100)
GraphicsWindow.DrawText(220, 300, "Result")
resultTextBox = Shapes.AddText("")
Shapes.Move(resultTextBox, 220, 250)
scoreTextBox = Shapes.AddText("Score: 0")
Shapes.Move(scoreTextBox, 404, 15)
StartGame()
EndSub
Sub StartGame
passedQuestion = Text.GetSubText(ArrayRandom[randomNumber], i, 1)
If i <= 7 Then
qx = 60
qy = 90
GraphicsWindow.BrushColor = "LightBlue"
GraphicsWindow.FillRectangle(200, 220, 100, 80)
GraphicsWindow.FillRectangle(20, 50, 460, 100)
GraphicsWindow.BrushColor = "Blue"
GraphicsWindow.DrawBoundText(qx - 20, qy, 420 "" + Q[passedQuestion])
currentAnswer = A[passedQuestion]

Pgina 280 de 364

Else
Program.Delay(1000)
GraphicsWindow.ShowMessage("Your Score is " + score, "Game Over")
Program.End()
EndIf
i=i+1
EndSub
Sub OnButtonClicked
clickedButtonCaption = Controls.GetButtonCaption(Controls.LastClickedButton)
If currentAnswer = clickedButtonCaption Then
lastAnswer = "Correct"
Shapes.Move(resultTextBox, 220, 250)
score = score + 1
Else
lastAnswer = "Incorrect"
Shapes.Move(resultTextBox, 212, 250)
EndIf
Shapes.SetText(resultTextBox, lastAnswer)
Shapes.SetText(scoreTextBox, "Score: " + score)
StartGame()
EndSub

Pgina 281 de 364

Pgina 282 de 364

Pgina 283 de 364

Pgina 284 de 364

Code:
' Copyright (c) Microsoft Corporation. All rights reserved.
GraphicsWindow.Hide()
gw = 620
gh = 450
GraphicsWindow.BackgroundColor = "LightBlue"
GraphicsWindow.CanResize = "False"
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.Top = ( Desktop.Height - gh ) / 2
GraphicsWindow.Left = ( Desktop.Width - gw ) / 2
GraphicsWindow.Title = "Hit the Target"
GraphicsWindow.Show()
Turtle.Hide()
rx = 40
ry = 20
turtlex = 315
turtley = 300
width = 550

Pgina 285 de 364

height = 390
ScoreboxX = 400
Enterkey = "Return"
target = 10
life = 3
score = 0
GraphicsWindow.FontSize = 30
GraphicsWindow.DrawText(100, 200, "Press ENTER to start the game!")
GraphicsWindow.KeyDown = Onpress
Sub Onpress
enter = enter + 1
If GraphicsWindow.LastKey = Enterkey And enter = 1 Then
GraphicsWindow.Clear()
GraphicsWindow.FontSize = 12
GUI()
MovingShape()
ScoreShow()
Controls.ButtonClicked = hitClick
EndIf
EndSub
Sub hitClick
angle = Math.Round(Controls.GetTextBoxText(angletxt))
distance = Math.Round(Controls.GetTextBoxText(distancetxt))
clicked = Controls.GetButtonCaption(Controls.LastClickedButton)
If clicked = "Hit" Then
GraphicsWindow.PenWidth = 0
Turtle.Angle = angle
Turtle.Move(distance)
If Turtle.x > x and Turtle.x < x + 93 and Turtle.y > y and Turtle.y < y + 96 Then
Shapes.HideShape(target)
score = score + 10
scoreshow()
Program.Delay(500)
If target = score Then
GameEnd()
EndIf
Controls.SetTextBoxText(angletxt, "")

Pgina 286 de 364

Controls.SetTextBoxText(distancetxt, "")
MovingShape()
Else
Program.Delay(1000)
If life > 1 Then
GraphicsWindow.ShowMessage("Click Ok to continue the game","Reset")
clicked = "Reset"
Else
GameEnd()
EndIf
EndIf
EndIf
If clicked = "Reset" Then
life = life - 1
If score >= 10 Then
score = score - 5
EndIf
scoreshow()
Controls.SetTextBoxText(angletxt, "")
Controls.SetTextBoxText(distancetxt, "")
MovingShape()
If life < 1 Then
GameEnd()
EndIf
EndIf
EndSub
Sub GUI
image = Program.Directory + "\cartoon.gif"
GraphicsWindow.DrawRectangle(rx, ry, width, height)
target = Shapes.AddImage(image)
GraphicsWindow.BrushColor = "Black"
Shapes.Move(target, 100, 50)
Turtle.Show()
Turtle.X = turtlex
Turtle.y = turtley
Turtle.Angle = 0

Pgina 287 de 364

GraphicsWindow.DrawText(rx + 5, height - 10, "Enter Angle:")


angletxt = Controls.AddTextBox(turtlex - 190, Turtley + 70)
Controls.SetSize(angletxt, 40, 30)
GraphicsWindow.DrawText(rx + 130, height - 10, "Enter Distance:")
distancetxt = Controls.AddTextBox(turtlex - 50, Turtley + 70)
Controls.SetSize(distancetxt, 40, 30)
firebutton = Controls.AddButton("Hit", turtlex + 20, Turtley + 70)
Controls.SetSize(firebutton, 80, 30)
Endsub
Sub MovingShape
Shapes.ShowShape(target)
Turtle.x = turtlex
Turtle.Y = turtley
Turtle.Angle = 0
x = Math.GetRandomNumber(450)
y = Math.GetRandomNumber(80)
If x <= 40 Then
x = 40
Shapes.Animate(target, x, y, 1000)
ElseIf y <= 20 Then
y = 20
Shapes.Animate(target, x, y, 1000)
Else
Shapes.Animate(target, x, y, 1000)
EndIf
EndSub
Sub GameEnd
GraphicsWindow.ShowMessage("Your score is:" + score, "Game Over")
Program.End()
EndSub
Sub ScoreShow
GraphicsWindow.FontSize = 14
GraphicsWindow.BrushColor = "Gray"
GraphicsWindow.FillRectangle(ScoreboxX + 50, ScoreboxX - 65, 135, 70)
GraphicsWindow.BrushColor = "White"
GraphicsWindow.DrawText(ScoreboxX + 60, ScoreboxX - 55, "Score :")
GraphicsWindow.DrawText(ScoreboxX + 110, ScoreboxX - 55, score)

Pgina 288 de 364

GraphicsWindow.DrawText(ScoreboxX + 60, ScoreboxX - 20, "Life :")


GraphicsWindow.DrawText(ScoreboxX + 110, ScoreboxX - 20, life)
EndSub

Pgina 289 de 364

Codigo:
' Copyright (c) Microsoft Corporation. All rights reserved.
GraphicsWindow.Hide()
gw = 620
gh = 450
GraphicsWindow.CanResize = "False"
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.Top = (Desktop.Height - gh) / 2
GraphicsWindow.Left = (Desktop.Width - gw) / 2
GraphicsWindow.Title = "Catch the Apples!"
GraphicsWindow.Show()
applesLeft = 30
gameScore = 0
catcherImage = Program.Directory + "\catcher.jpg"
appleimage = Program.Directory + "\apple.jpg"
GraphicsWindow.MouseMove = OnMouseMove
CreateUI()
While applesLeft > 0
DropApple()
applesLeft = applesLeft - 1
Shapes.SetText(applesLeftTextBox, "Apples Left: " + applesLeft)
EndWhile
GraphicsWindow.ShowMessage("Your Score is: " + gameScore, "GameOver")
Program.End()
Sub CreateUI
GraphicsWindow.BackgroundColor = "LightBlue"
catcher = Shapes.AddImage(catcherImage)
apple = Shapes.AddImage(appleimage)
GraphicsWindow.BrushColor = "Gray"
GraphicsWindow.FillRectangle(1, 1, gw, 40)
GraphicsWindow.FontName = "Verdana"
GraphicsWindow.FontSize = 18

Pgina 290 de 364

GraphicsWindow.BrushColor = "White"
GraphicsWindow.DrawText(220, 5, "Catch the Apples!")
scoreTextBox = Shapes.AddText("Score: 0")
Shapes.Move(scoreTextBox, 480, 5)
applesLeftTextBox = Shapes.AddText("Apples Left: " + applesLeft)
Shapes.Move(applesLeftTextBox, 5, 5)
GraphicsWindow.PenColor = "Black"
GraphicsWindow.DrawLine(0, 50, 620, 50)
Shapes.Move(catcher, 0, gh - 40)
Mouse.HideCursor()
EndSub
Sub OnMouseMove
catcherX = Math.Min(GraphicsWindow.MouseX, 570)
Shapes.Move(catcher, catcherX, gh - 40)
EndSub
Sub DropApple
appleX = Math.GetRandomNumber(600)
appleY = 50
While (appleY < gh + 20)
Shapes.Move(apple, appleX, appleY)
Program.Delay(15)
DetectCatch()
appleY = appleY + 5
EndWhile
EndSub
Sub DetectCatch
If appleY >= gh - 40 And appleX < catcherX + 50 And appleX >= catcherX Then
gameScore = gameScore + 1
Shapes.SetText(scoreTextBox, "Score: " + gameScore)
appleY = gh + 20
EndIf
EndSub

Pgina 291 de 364

Pgina 292 de 364

Pgina 293 de 364

Codigo:
' Copyright (c) Microsoft Corporation. All rights reserved.

Pgina 294 de 364

GraphicsWindow.Hide()
gw = 350
gh = 350
gridX = 25
gridY = 25
cellSize = 100
GraphicsWindow.CanResize = "False"
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.Top = (Desktop.Height - gh) / 2
GraphicsWindow.Left = (Desktop.Width - gw) / 2
GraphicsWindow.Title = "Tic-Tac-Toe"
GraphicsWindow.Show()
playerTurn = "True"
GraphicsWindow.MouseMove = OnMouseMove
GraphicsWindow.MouseDown = OnMouseDown
SetupBoard()
gameLoop:
CheckGameOver()
If gameOver = "True" Then
Goto endGame
EndIf
If playerTurn = "True" Then
Program.Delay(1000)
Goto gameLoop
EndIf
TryWin()
If compRow <> -1 And compCol <> -1 Then
PlayComputerTurn()
Goto gameCheck
EndIf
TryBlock()
If compRow <> -1 And compCol <> -1 Then
PlayComputerTurn()
Goto gameCheck
EndIf
' Play Center

Pgina 295 de 364

If cells[1][1] = "" Then


compRow = 1
compCol = 1
PlayComputerTurn()
Goto gameCheck
EndIf
' Pick a corner
PickCorner()
If compRow <> -1 And compCol <> -1 Then
PlayComputerTurn()
Goto gameCheck
EndIf
' Pick any empty cell
PickAny()
If compRow <> -1 And compCol <> -1 Then
PlayComputerTurn()
Goto gameCheck
EndIf
gameCheck:
CheckGameOver()
If gameOver <> "True" Then
Goto gameLoop
EndIf
endGame:
If playerWins = "True" Then
GraphicsWindow.ShowMessage("You win! Nice work.", "Game Over")
Program.End()
ElseIf computerWins = "True" Then
GraphicsWindow.ShowMessage("Computer wins! Better luck next time.", "Game
Over")
Program.End()
Else
GraphicsWindow.ShowMessage("Tie game!", "Game Over")
Program.End()
EndIf
Sub TryWin
compRow = -1

Pgina 296 de 364

compCol = -1
For i = 0 to 2
If cells[i][0] = "O" And cells[i][1] = "O" And cells[i][2] = "" Then
compRow = i
compCol = 2
ElseIf cells[i][0] = "O" And cells[i][1] = "" And cells[i][2] = "O" Then
compRow = i
compCol = 1
ElseIf cells[i][0] = "" And cells[i][1] = "O" And cells[i][2] = "O" Then
compRow = i
compCol = 0
ElseIf cells[0][i] = "O" And cells[1][i] = "O" And cells[2][i] = "" Then
compCol = i
compRow = 2
ElseIf cells[0][i] = "O" And cells[1][i] = "" And cells[2][i] = "O" Then
compCol = i
compRow = 1
ElseIf cells[0][i] = "" And cells[1][i] = "O" And cells[2][i] = "O" Then
compCol = i
compRow = 0
EndIf
EndFor
If cells[0][0] = "O" And cells[1][1] = "O" And cells[2][2] = "" Then
compCol = 2
compRow = 2
ElseIf cells[0][0] = "O" And cells[1][1] = "" And cells[2][2] = "O" Then
compCol = 1
compRow = 1
ElseIf cells[0][0] = "" And cells[1][1] = "O" And cells[2][2] = "O" Then
compCol = 0
compRow = 0
EndIf
EndSub
Sub TryBlock
compRow = -1
compCol = -1
For i = 0 to 2

Pgina 297 de 364

If cells[i][0] = "X" And cells[i][1] = "X" And cells[i][2] = "" Then


compRow = i
compCol = 2
ElseIf cells[i][0] = "X" And cells[i][1] = "" And cells[i][2] = "X" Then
compRow = i
compCol = 1
ElseIf cells[i][0] = "" And cells[i][1] = "X" And cells[i][2] = "X" Then
compRow = i
compCol = 0
ElseIf cells[0][i] = "X" And cells[1][i] = "X" And cells[2][i] = "" Then
compCol = i
compRow = 2
ElseIf cells[0][i] = "X" And cells[1][i] = "" And cells[2][i] = "X" Then
compCol = i
compRow = 1
ElseIf cells[0][i] = "" And cells[1][i] = "X" And cells[2][i] = "X" Then
compCol = i
compRow = 0
EndIf
EndFor
If cells[0][0] = "X" And cells[1][1] = "X" And cells[2][2] = "" Then
compCol = 2
compRow = 2
ElseIf cells[0][0] = "X" And cells[1][1] = "" And cells[2][2] = "X" Then
compCol = 1
compRow = 1
ElseIf cells[0][0] = "" And cells[1][1] = "X" And cells[2][2] = "X" Then
compCol = 0
compRow = 0
EndIf
EndSub
Sub CheckGameOver
For i = 0 to 2
If cells[i][0] = "X" And cells[i][1] = "X" And cells[i][2] = "X" Then
playerWins = "True"
gameOver = "True"
ElseIf cells[i][0] = "O" And cells[i][1] = "O" And cells[i][2] = "O" Then

Pgina 298 de 364

computerWins = "True"
gameOver = "True"
ElseIf cells[0][i] = "X" And cells[1][i] = "X" And cells[2][i] = "X" Then
playerWins = "True"
gameOver = "True"
ElseIf cells[0][i] = "O" And cells[1][i] = "O" And cells[2][i] = "O" Then
computerWins = "True"
gameOver = "True"
EndIf
EndFor
If cells[0][0] = "X" And cells[1][1] = "X" And cells[2][2] = "X" Then
playerWins = "True"
gameOver = "True"
ElseIf cells[0][0] = "O" And cells[1][1] = "O" And cells[2][2] = "O" Then
computerWins = "True"
gameOver = "True"
ElseIf cells[0][2] = "O" And cells[1][1] = "O" And cells[2][0] = "O" Then
computerWins = "True"
gameOver = "True"
ElseIf cells[0][2] = "X" And cells[1][1] = "X" And cells[2][0] = "X" Then
playerWins = "True"
gameOver = "True"
EndIf
If gameOver <> "True" Then
gameOver = "True"
For i = 0 to 2
For j = 0 To 2
If cells[i][j] = "" Then
gameOver = "False"
EndIf
EndFor
EndFor
EndIf
EndSub
Sub PickCorner
If cells[0][0] = "X" And cells[2][2] = "" Then

Pgina 299 de 364

compRow = 2
compCol = 2
ElseIf cells[0][2] = "X" And cells[2][0] = "" Then
compRow = 2
compCol = 0
ElseIf cells[2][0] = "X" And cells[0][2] = "" Then
compRow = 0
compCol = 2
ElseIf cells[2][2] = "X" And cells[0][0] = "" Then
compRow = 2
compCol = 2
ElseIf cells[0][0] = "" Then
compRow = 0
compCol = 0
ElseIf cells[0][2] = "" Then
compRow = 0
compCol = 2
ElseIf cells[2][0] = "" Then
compRow = 2
compCol = 0
ElseIf cells[2][2] = "" Then
compRow = 2
compCol = 2
EndIf
EndSub
Sub PickAny
For i = 0 to 2
For j = 0 To 2
If cells[i][j] = "" Then
compRow = i
compCol = j
Goto endPickAny
EndIf
EndFor
EndFor
endPickAny:
EndSub

Pgina 300 de 364

Sub PlayComputerTurn
r = compRow
c = compCol
cells[r][c] = "O"
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.FontSize = 40
GraphicsWindow.FontBold = "False"
cellText = Shapes.AddText("O")
Shapes.Move(cellText, c * cellSize + gridX + 40, r * cellSize + gridY + 26)
playerTurn = "True"
EndSub
Sub OnMouseDown
If playerTurn = "True" Then
mx = GraphicsWindow.MouseX
my = GraphicsWindow.MouseY
If mx > gridX And my > gridY And mx < (gridX + 3 * cellSize) And my < (gridY + 3 *
cellSize) Then
c = Math.Floor((mx - gridX) / cellSize)
r = Math.Floor((my - gridY) / cellSize)
If cells[r][c] = "" Then
cells[r][c] = "X"
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.FontSize = 40
GraphicsWindow.FontBold = "False"
cellText = Shapes.AddText("X")
Shapes.Move(cellText, c * cellSize + gridX + 40, r * cellSize + gridY + 26)
playerTurn = "False"
EndIf
EndIf
EndIf
EndSub
Sub OnMouseMove
If playerTurn = "True" Then

Pgina 301 de 364

hover = "False"
DrawCell()
mx = GraphicsWindow.MouseX
my = GraphicsWindow.MouseY
If mx > gridX And my > gridY And mx < (gridX + 3 * cellSize) And my < (gridY + 3 *
cellSize) Then
col = Math.Floor((mx - gridX) / cellSize)
row = Math.Floor((my - gridY) / cellSize)
hover = "True"
DrawCell()
EndIf
EndIf
EndSub
Sub SetupBoard
hover = "False"
For col = 0 to 2
For row = 0 To 2
DrawCell()
EndFor
EndFor
row = -1
col = -1
EndSub
Sub DrawCell
If row >= 0 And col >= 0 And row <= 2 And col <=2 Then
x = col * cellSize + gridX
y = row * cellSize + gridY
If hover = "True" Then
GraphicsWindow.BrushColor = "Azure"
Else
GraphicsWindow.BrushColor = "White"
EndIf
GraphicsWindow.FillRectangle(x, y, cellSize, cellSize)

Pgina 302 de 364

GraphicsWindow.PenColor = "Black"
GraphicsWindow.DrawRectangle(x, y, cellSize, cellSize)
EndIf
EndSub

Pgina 303 de 364

Solucion:
' Copyright (c) Microsoft Corporation. All rights reserved.
GraphicsWindow.Hide()
GraphicsWindow.Height = 450
GraphicsWindow.Width = 600
GraphicsWindow.Top = ( Desktop.Height - 450 ) / 2
GraphicsWindow.Left = ( Desktop.Width - 600 ) / 2
GraphicsWindow.CanResize = "False"
GraphicsWindow.Show()
paddleImage = Program.Directory + "\rectangle.png"
ballImage = Program.Directory + "\circle.png"
Left = 42
bStartY = 35
CreatUI()
hitCount = 0
GraphicsWindow.MouseMove = MouseAction
For index = 0 To 15
Array.SetValue("PinkBricks", Index, 1)
Array.SetValue("VioletBricks", Index, 1)
Array.SetValue("AquaBricks", Index, 1)
Endfor
InitBricks()
score = 0
ShowScore()
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
y = gh - 28
Shapes.Move(ball, x, y)
dX= 1
dY =-2
Loop:
x = x + dX
y = y + dY
If x >= gw - 16 Or x <= 0 Then
dX= -dX
EndIf
If y <= 0 Then

Pgina 304 de 364

dY = -dY
EndIf
padX = Shapes.GetLeft(paddle)
If y >= gh - 28 + 2 And x >= padX And x <= padX + 70 Then
y = gh - 28 + 2
hitCount = hitCount + 1
If Math.Remainder(hitCount, 3) = 0 Then
For Index = 0 To 15
HidePinkBrick()
HideVioletBrick()
HideAquaBrick()
Endfor
bStartY = bStartY + 20
InitBricks()
EndIf
TestAqua:
For Index = 0 To 15
If Array.GetValue("AquaBricks", Index) = 1 Then
If bStartY > gh - 160 Then
Goto EndGame
EndIf
EndIf
EndFor
TestViolet:
For Index = 0 To 15
If Array.GetValue("VioletBricks", Index) = 1 Then
If bStartY > gh - 100 Then
Goto EndGame
EndIf
EndIf
EndFor
TestPink:
For Index = 0 To 15
If Array.GetValue("PinkBricks", Index) = 1 Then
If bStartY > gh - 40 Then

Pgina 305 de 364

Goto EndGame
EndIf
EndIf
EndFor
EndTest:
dX= dX- 2 + (x - padX) / 30
If score = oldScore Then
If score <> 0 Then
score = score - 1
EndIf
EndIf
oldScore = score
ShowScore()
dY = -dY
EndIf
Shapes.Move(ball, x, y)
Program.Delay(5)
If y > bStartY - 16 And y < bStartY + 20 Then
Index = (x+8) / 40
Index = Math.Floor(Index)
If Array.GetValue("PinkBricks", Index) = 1 Then
If Index=8 Then
Else
Array.SetValue("PinkBricks", Index, 0)
HidePinkBrick()
Left = Left - 1
score = score + 15
ShowScore()
EndIf
dY = -dY
gameFinish()
EndIf
EndIf
If y > bStartY + 44 And y < bStartY + 80 Then
Index = (x + 8) / 40
Index = Math.Floor(Index)
If Array.GetValue("VioletBricks", Index) = 1 Then

Pgina 306 de 364

If Index=4 Or Index=11 Then


Else
Array.SetValue("VioletBricks", Index, 0)
HideVioletBrick()
Left = Left - 1
score = score + 10
ShowScore()
EndIf
dY = -dY
gameFinish()
EndIf
EndIf
If y > bStartY + 104 And y < bStartY + 140 Then
Index = (x + 8) / 40
Index = Math.Floor(Index)
If Array.GetValue("AquaBricks", Index) = 1 Then
If Index = 2 Or Index = 7 Or Index = 13 Then
Else
Array.SetValue("AquaBricks", Index, 0)
HideAquaBrick()
score = score + 5
ShowScore()
Left = Left - 1
EndIf
dY = -dY
gameFinish()
EndIf
EndIf
If y < gh Then
Goto Loop
EndIf
EndGame:
GraphicsWindow.ShowMessage("Your score is: " + score, "Game Over")
Program.End()
Sub CreatUI
GraphicsWindow.Title = "Paddle Game"
GraphicsWindow.FontSize = 14

Pgina 307 de 364

paddle = Shapes.AddImage(paddleimage)
ball = Shapes.AddImage(ballimage)
EndSub
Sub MouseAction
paddleX = GraphicsWindow.MouseX
Shapes.Move(paddle, paddleX - 10, GraphicsWindow.Height - 14)
EndSub
Sub ShowScore
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(520, 10, 200, 20)
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(500, 10, "Score: " + score)
EndSub
Sub InitBricks
For Index = 0 To 15
If Index = 8 Then
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Gray"
Else
If Array.GetValue("PinkBricks", Index) = 1 Then
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Pink"
Else
GraphicsWindow.PenColor = "White"
GraphicsWindow.BrushColor = "White"
EndIf
EndIf
GraphicsWindow.FillRectangle(Index * 40, bStartY, 40, 20)
GraphicsWindow.DrawRectangle(Index * 40, bStartY, 40, 20)
GraphicsWindow.BrushColor = "Violet"
If Index = 4 Or Index=11 Then
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Gray"
Else

Pgina 308 de 364

If Array.GetValue("VioletBricks", Index) = 1 Then


GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Violet"
Else
GraphicsWindow.PenColor = "White"
GraphicsWindow.BrushColor = "White"
EndIf
EndIf
GraphicsWindow.FillRectangle(Index * 40, bStartY + 60, 40, 20)
GraphicsWindow.DrawRectangle(Index * 40, bStartY + 60, 40, 20)
GraphicsWindow.BrushColor = "Aqua"
If Index = 2 Or Index = 7 Or Index = 13 Then
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Gray"
Else
If Array.GetValue("AquaBricks", Index) = 1 Then
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Aqua"
Else
GraphicsWindow.PenColor = "White"
GraphicsWindow.BrushColor = "White"
EndIf
EndIf
GraphicsWindow.FillRectangle(Index * 40, bStartY + 120, 40, 20)
GraphicsWindow.DrawRectangle(Index * 40, bStartY + 120, 40, 20)
EndFor
EndSub
Sub HidePinkBrick
GraphicsWindow.PenColor = "White"
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(Index * 40, bStartY, 40, 20)
GraphicsWindow.DrawRectangle(Index * 40, bStartY, 40, 20)
EndSub
Sub HideVioletBrick
GraphicsWindow.PenColor = "White"

Pgina 309 de 364

GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(Index * 40, bStartY + 60, 40, 20)
GraphicsWindow.DrawRectangle(Index * 40, bStartY + 60, 40, 20)
EndSub
Sub HideAquaBrick
GraphicsWindow.PenColor = "White"
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(Index * 40, bStartY + 120, 40, 20)
GraphicsWindow.DrawRectangle(Index * 40, bStartY + 120, 40, 20)
EndSub
Sub gameFinish
If Left = 0 Then
GraphicsWindow.ShowMessage("Well Done! Your score is: " + score, "Game Over")
Program.End()
EndIf
EndSub

Pgina 310 de 364

Pgina 311 de 364

Codigo:
GraphicsWindow.Title = "Fun with the Turtle"
GraphicsWindow.Height = 300
GraphicsWindow.Width = 500
Turtle.Show()
Turtle.Speed = 10
Turtle.X = 150
Turtle.Y = 150
For i = 0 To 200 Step 5
GraphicsWindow.PenColor = GraphicsWindow.GetRandomColor()
Turtle.Move(i)
Turtle.Turn(90)
EndFor
Turtle.PenUp()
Turtle.Move(260)
Turtle.Turn(60)
Turtle.Move(120)
Turtle.PenDown()
For i = 0 To 200 Step 5

Pgina 312 de 364

GraphicsWindow.PenColor = GraphicsWindow.GetRandomColor()
Turtle.Move(i)
Turtle.Turn(120)
EndFor

Exploremos como podemos conpartir programas.


Despues de crear un program lo puedes compartir pulsando en el boton Publish de la
barra de herramientas. Puedes especificar algunos detalles como el nombre,
descripcin y categoria, Tu program es accesible en estos momentos onl line. Puedes
compartir ese programa con tus amigos por medio de el identificador nico ID que es
asignado a tu programa.

Pgina 313 de 364

Para importar un programa debes estar conectado a internet.


Puedes acceder a tu programa pulsando en el boton Import en la barrade
herramientas,Despues escribes elidentificador ID. Cuando pulsas en Ok tu programa
aparece en la ventana del editor.

Despues de importarlo puedes ejecutarlo editarlo y guardarlo.

Pgina 314 de 364

Antes de poder acceder a tu programa publicado , Silverlight debe ser instalado en tu


explorador.

Pgina 315 de 364

Solucion:
1. Presionando Publish en la barra de herramientas
2. Presionando Import y especificando el ID.

Pgina 316 de 364

Pgina 317 de 364

http://www.microsoft.com/express/Windows

Pgina 318 de 364

Pgina 319 de 364

http://msdn.microsoft.com/en-us/beginner/

Pgina 320 de 364

Pgina 321 de 364

API

Pgina 322 de 364

Arguments
El objeto Arguments (argumentos) proporciona operaciones para acceder a los argumentos de
la lnea de comando proporcionados al principio del programa.
Array
Este objeto proporciona una manera de almacenar ms de un valor para un nombre dado.
Estos valores pueden ser accedidos por otro ndice.
Clock
Esta clase proporciona acceso al reloj del sistema.
Desktop
Esta clase proporciona mtodos para interactuar con el escritorio.
Dictionary
Esta clase da acceso a un servicio de diccionario (Dictionary) en lnea.
File
El objeto File (archivo) proporciona mtodos para acceder, leer y escribir informacin de un
archivo o a un archivo en el disco. Al utilizar este objeto, es posible guardar o abrir
configuraciones en varias sesiones del programa.
Flickr
Esta clase da acceso a los servicios de fotografa de Flickr.
GraphicsWindow
La clase GraphicsWindow (ventana de grficos) proporciona grficos relacionados con
funcionalidades de entrada y de salida. Por ejemplo, esta clase le permite dibujar y rellenar
crculos y rectngulos.
ImageList
Esta clase ayuda a cargar y almacenar imgenes en memoria.
Math
La clase Math (matemticas) proporciona muchos mtodos tiles relacionados con las
matemticas.
Mouse
La clase Mouse proporciona o asigna propiedades relacionadas con el mouse, tales como la
posicin del cursor, el puntero, etc..

Pgina 323 de 364

Network
Esta clase de ayuda privada proporciona mtodos de acceso a la red.
Program
La clase Program (programa) proporciona ayuda para controlar la ejecucin del programa.
Shapes
El objeto Shape (forma) permite agregar, mover y rotar formas en la ventana de grficos.
Sound
El objeto Sound (sonido) proporciona operaciones que le permiten reproducir sonidos. Algunos
ejemplos de sonidos se proporcionan en la biblioteca.
Stack
Este objeto proporciona una manera de almacenar valores al igual que se apilan platos. Puede
poner un valor al principio de la pila y sacarlo. Slo puede sacar y poner los valores uno a uno
y el ltimo valor que se pone es el primero que se puede sacar.
Text
El objeto Text (texto) proporciona operaciones tiles para trabajar con texto.
TextWindow
El objeto TextWindow (ventana de texto) proporciona funcionalidades relacionadas con la
entrada y salida de texto. Por ejemplo, con esta clase puede escribir texto en una ventana de
texto o leer texto de ella.
Timer
El objeto Timer (temporizador) proporciona una manera fcil de hacer algo una y otra vez con
un intervalo constante entre medias.
Turtle
La clase Tutle (tortuga) proporciona funcionalidad como la de Logo para dibujar formas
mediante la manipulacin de propiedades de lpiz y primitivas de dibujo.

Pgina 324 de 364

ARGUMENTS

El objeto Arguments (argumentos) proporciona operaciones para acceder a los


argumentos de la lnea de comando proporcionados al principio del programa.
Properties
Count (This property is read-only.)
Arguments.Count
Obtiene el nmero de argumentos de lnea de comando que se proporcionan al
programa.
Methods
GetArgument
Arguments.GetArgument(index)
Devuelve el argumento indicado.
index
ndice del argumento.
Returns
El argumento de lnea de comando en el ndice especificado.

ARRAY

Este objeto proporciona una manera de almacenar ms de un valor para un


nombre dado. Estos valores pueden ser accedidos por otro ndice.
Methods
ContainsIndex
Array.ContainsIndex(array, index)
Indica si la matriz contiene o no el ndice dado. Es muy til cuando hay que
decidir si el ndice de la matriz se ha inicializado con un valor o no.
array

Pgina 325 de 364

La matriz a comprobar.
index
El ndice a comprobar.
Returns
"True" o "False" dependiendo de si el ndice se encuentra en la matriz
especificada.
ContainsValue
Array.ContainsValue(array, value)
Indica si la matriz contiene o no el valor dado. Es muy til cuando hay que
decidir si el valor de la matriz se ha almacenado en un ndice o no.
array
La matriz a comprobar.
value
El valor a comprobar.
Returns
"True" o "False" dependiendo de si un valor se presenta en la matriz
especificada.
GetItemCount
Array.GetItemCount(array)
Obtiene el nmero de elementos almacenados en la matriz.
array
La matriz en la que se ejecutar el conteo.
Returns
La cantidad de elementos en la matriz indicada.
GetValue
Array.GetValue(arrayName, index)
Asigna un valor para una matriz e ndice determinados.
arrayName
El nombre de la matriz.
index
El nombre del ndice.

Pgina 326 de 364

Returns
El valor en el ndice indicado de la matriz indicada.
SetValue
Array.SetValue(arrayName, index, value)
Asigna un valor para una matriz e ndice determinados.
arrayName
El nombre de la matriz.
index
El nombre del ndice.
value
El valor a asignar.
Returns
Nothing

CLOCK

Esta clase proporciona acceso al reloj del sistema.


Properties

Date (This property is read-only.)


Clock.Date
Obtiene la fecha actual del sistema.
Day (This property is read-only.)
Clock.Day
Obtiene el da del mes actual.
Hour (This property is read-only.)
Clock.Hour
Obtiene la hora actual.
Millisecond (This property is read-only.)
Clock.Millisecond
Obtiene el milisegundo actual.
Minute (This property is read-only.)
Clock.Minute
Obtiene el minuto actual.

Pgina 327 de 364

Month (This property is read-only.)


Clock.Month
Obtiene el mes actual.
Second (This property is read-only.)
Clock.Second
Obtiene el segundo actual.
Time (This property is read-only.)
Clock.Time
Obtiene la hora actual del sistema.
WeekDay (This property is read-only.)
Clock.WeekDay
Obtiene el da de la semana actual.
Year (This property is read-only.)
Clock.Year
Obtiene el ao actual.

DESKTOP

Esta clase proporciona mtodos para interactuar con el escritorio.


Properties

Height (This property is read-only.)


Desktop.Height
Obtiene la altura del escritorio principal.
Width (This property is read-only.)
Desktop.Width
Obtiene el ancho del escritorio principal.
Methods
SetWallPaper
Desktop.SetWallPaper(fileOrUrl)
Establece la imagen especificada como la imagen de fondo del escritorio. El
archivo puede ser local, encontrarse en la red o en una URL de Internet.
fileOrUrl
El nombre o URL de la imagen.
Returns
Nothing

Pgina 328 de 364

DICTIONARY

Esta clase da acceso a un servicio de diccionario (Dictionary) en lnea.


Methods

GetDefinition
Dictionary.GetDefinition(word)
Obtiene la definicin de una palabra en ingls.
word
La palabra a definir.
Returns
Las definiciones de la palabra indicada.
GetDefinitionInFrench
Dictionary.GetDefinitionInFrench(word)
Obtiene la definicin de una palabra en francs.
word
La palabra a definir.
Returns
Las definiciones de la palabra indicada.

FILE

El objeto File (archivo) proporciona mtodos para acceder, leer y escribir


informacin de un archivo o a un archivo en el disco. Al utilizar este objeto, es
posible guardar o abrir configuraciones en varias sesiones del programa.
Properties
LastError
File.LastError
Obtiene o cambia el mensaje de error de la ltima operacin encontrada del
archivo. Esta propiedad es til para identificar cundo algunos mtodos fallan al
ejecutarse.
Methods
AppendContents
File.AppendContents(filePath, contents)
Abre el archivo indicado y agrega el contenido al final del archivo.

Pgina 329 de 364

filePath
La ruta completa del archivo a leer. Por ejemplo, c:\temp\settings.data.
contents
El contenido a agregar al final del archivo.
Returns
Si la operacin se completa con xito, devuelve "SUCCESS". De lo contrario,
devuelve "FAILED".
CopyFile
File.CopyFile(sourceFilePath, destinationFilePath)
Copia el archivo fuente especificado en la ruta de destino. Si la ruta de destino
no existe, el mtodo tratar de crearla automticamente. Los archivos que ya
existen se sobrescribirn. Es una buena prctica comprobar primero si el
archivo ya existe para evitar sobrescribir archivos que ya existen.
sourceFilePath
La ruta completa del archivo que hay que copiar. Por ejemplo,
c:\temp\settings.data.
destinationFilePath
La ubicacin o la ruta al archivo de destino.
Returns
Si la operacin se completa con xito, devuelve "SUCCESS". De lo contrario,
devuelve "FAILED".
CreateDirectory
File.CreateDirectory(directoryPath)
Crea el directorio indicado.
directoryPath
La ruta completa del directorio a crear.
Returns
Si la operacin se completa con xito, devuelve "SUCCESS". De lo contrario,
devuelve "FAILED".
DeleteDirectory
File.DeleteDirectory(directoryPath)
Borra el directorio especificado.
directoryPath
La ruta completa del directorio a borrar.
Returns

Pgina 330 de 364

Si la operacin se completa con xito, devuelve "SUCCESS". De lo contrario,


devuelve "FAILED".
DeleteFile
File.DeleteFile(filePath)
Borra el archivo indicado.
filePath
La ruta de destino o del archivo. Por ejemplo, c:\temp\settings.data.
Returns
Si la operacin se completa con xito, devuelve "SUCCESS". De lo contrario,
devuelve "FAILED".
GetFiles
File.GetFiles(directoryPath)
Obtiene la ruta de los archivos en la ruta dada.
directoryPath
El directorio donde buscar los archivos.
Returns
Si la operacin se ejecuta con xito, devuelve el archivo como una matriz. De lo
contrario, devuelve "FAILED".
GetSettingsFilePath
File.GetSettingsFilePath()
Obtiene la ruta completa del archivo de configuracin de este programa. El
nombre del archivo de configuracin se basa en el nombre del programa y se
encuentra en la misma ruta que el programa.
Returns
La ruta completa del archivo de configuracin especfico para este programa.
GetTemporaryFilePath
File.GetTemporaryFilePath()
Crea un archivo temporal nuevo en un directorio temporal y devuelve la ruta
completa del archivo.
Returns
La ruta completa al archivo temporal.
InsertLine
File.InsertLine(filePath, lineNumber, contents)

Pgina 331 de 364

Abre el archivo indicado e inserta el contenido en el nmero de lnea indicado.


Esta operacin no sobrescribir ningn contenido existente en la lnea indicada.
filePath
La ruta completa del archivo a leer. Por ejemplo, c:\temp\settings.data.
lineNumber
El nmero de lnea de texto a insertar.
contents
El contenido a insertar en el archivo.
Returns
Si la operacin se completa con xito, devuelve "SUCCESS". De lo contrario,
devuelve "FAILED".
ReadContents
File.ReadContents(filePath)
Abre un archivo y lee todo su contenido. Este mtodo es ms rpido para
archivos de menos de 1 MB y empezar a ser considerablemente lento para
archivos de ms de 10 MB.
filePath
La ruta completa del archivo a leer. Por ejemplo, c:\temp\settings.data.
Returns
El contenido completo del archivo.
ReadLine
File.ReadLine(filePath, lineNumber)
Abre el archivo indicado y lee el contenido del nmero de lnea que se indica.
filePath
La ruta completa del archivo a leer. Por ejemplo, c:\temp\settings.data.
lineNumber
El nmero de lnea del texto a leer.
Returns
El texto en la lnea indicada del archivo indicado.
WriteContents
File.WriteContents(filePath, contents)
Abre un archivo y escribe el contenido indicado en l, reemplazando el
contenido original con el nuevo contenido.
filePath
La ruta completa del archivo a escribir. Por ejemplo, c:\temp\settings.data.
contents

Pgina 332 de 364

El contenido a escribir en el archivo indicado.


Returns
Si la operacin se completa con xito, devuelve "SUCCESS". De lo contrario,
devuelve "FAILED".
WriteLine
File.WriteLine(filePath, lineNumber, contents)
Abre el archivo especificado y escribe el contenido del nmero de lnea que se
indica. Esta operacin sobrescribir cualquier contenido en la lnea indicada.
filePath
La ruta completa del archivo a leer. Por ejemplo, c:\temp\settings.data.
lineNumber
El nmero de lnea del texto a escribir.
Contents
El contenido a escribir en la lnea indicada del archivo indicado.
Returns
Si la operacin se completa con xito, devuelve "SUCCESS". De lo contrario,
devuelve "FAILED".

FLICKR

Esta clase da acceso a los servicios de fotografa de Flickr.

Methods
GetPictureOfMoment
Flickr.GetPictureOfMoment()
Obtiene la URL (ubicacin universal de recurso) de la imagen del momento.
Returns
Una URL (ubicacin universal de recurso) de archivo de la imagen del
momento de Flickr.

Pgina 333 de 364

GetRandomPicture
Flickr.GetRandomPicture(tag)
Obtiene la URL (ubicacin universal de recurso) de una imagen aleatoria
etiquetada con la etiqueta indicada.
tag
La etiqueta de la imagen solicitada.
Returns
Una URL (ubicacin universal de recurso) de archivo de la imagen aleatoria de
Flickr.

GRAPHICSWINDOW

La clase GraphicsWindow (ventana de grficos) proporciona grficos


relacionados con funcionalidades de entrada y de salida. Por ejemplo, esta
clase le permite dibujar y rellenar crculos y rectngulos.
Properties
BackgroundColor
GraphicsWindow.BackgroundColor
Obtiene o establece el color de fondo de la ventana de grficos.
BrushColor
GraphicsWindow.BrushColor
Obtiene o cambia el color del pincel que se usa para rellenar las formas
dibujadas en la ventana de grficos.
CanResize
GraphicsWindow.CanResize
Indica si el tamao de la ventana de grficos puede ser modificado por el
usuario o no.
FontBold
GraphicsWindow.FontBold
Obtiene o cambia si el texto en la ventana de grficos se debe dibujar en
negrita o no.
FontItalic
GraphicsWindow.FontItalic
Obtiene o cambia si el texto en la ventana de grficos se debe dibujar en
cursiva o no.
FontName

Pgina 334 de 364

GraphicsWindow.FontName
Obtiene o establece el nombre de la fuente a utilizar cuando se escribe texto en
la ventana de grficos.
FontSize
GraphicsWindow.FontSize
Obtiene o establece el tamao de la fuente a utilizar cuando se escribe texto en
la ventana de grficos.
Height
GraphicsWindow.Height
Obtiene o cambia el alto de la ventana de grficos.
LastKey (This property is read-only.)
GraphicsWindow.LastKey
Obtiene la ltima tecla que se presion o liber.
Left
GraphicsWindow.Left
Obtiene o cambia la posicin izquierda de la ventana de grficos.
MouseX (This property is read-only.)
GraphicsWindow.MouseX
Obtiene la posicin X del mouse relativa a la ventana de grficos.
MouseY (This property is read-only.)
GraphicsWindow.MouseY
Obtiene la coordenada Y del mouse relativa a la ventana de grficos.
PenColor
GraphicsWindow.PenColor
Obtiene o establece el color del lpiz a utilizar para dibujar formas en la
ventana de grficos.
PenWidth
GraphicsWindow.PenWidth
Obtiene o cambia el ancho del lpiz usado para dibujar formas en la ventana de
grficos.
Title
GraphicsWindow.Title
Obtiene o cambia el ttulo de la ventana de grficos.
Top
GraphicsWindow.Top

Pgina 335 de 364

Obtiene o cambia la posicin superior de la ventana de grficos.


Width
GraphicsWindow.Width
Obtiene o cambio el ancho de la ventana de grficos.
Events
KeyDown
GraphicsWindow.KeyDown
Genera un evento cuando una tecla es oprimida en el teclado.
KeyUp
GraphicsWindow.KeyUp
Genera un evento cuando una tecla es soltada en el teclado.
MouseDown
GraphicsWindow.MouseDown
Lanza un evento cuando se hace clic con el botn del mouse.
MouseMove
GraphicsWindow.MouseMove
Lanza un evento cuando se mueve el mouse.
MouseUp
GraphicsWindow.MouseUp
Lanza un evento cuando se suelta el botn del mouse.
Methods
Clear
GraphicsWindow.Clear()
Vaca la ventana.
Returns
Nothing
DrawBoundText
GraphicsWindow.DrawBoundText(x, y, width, text)
Dibuja una lnea de texto en la pantalla en la ubicacin especificada.
x
La coordenada X del punto de inicio del texto.
y
La coordenada Y del punto de inicio del texto.
width
El ancho mximo permitido. El parmetro ayuda a definir cundo se tiene que
ajustar el texto.
text
El texto a dibujar.

Pgina 336 de 364

Returns
Nothing
DrawEllipse
GraphicsWindow.DrawEllipse(x, y, width, height)
Dibuja una elipse en la pantalla usando el lpiz seleccionado.
x
La coordenada X de la elipse.
y
La coordenada Y de la elipse.
width
El ancho de la elipse.
height
El alto de la elipse.
Returns
Nothing
DrawImage
GraphicsWindow.DrawImage(imageName, x, y)
Dibuja la imagen especificada en memoria a la pantalla, con el tamao
indicado.
imageName
El nombre de la imagen a dibujar.
x
La coordenada X del punto en el cual dibujar la imagen.
y
La coordenada Y del punto en el cual dibujar la imagen.
Returns
Nothing
DrawLine
GraphicsWindow.DrawLine(x1, y1, x2, y2)
Dibuja una lnea de un punto a otro
x1
La coordenada X del primer punto.
y1
La coordenada Y del primer punto.
x2
La coordenada X del segundo punto.

Pgina 337 de 364

y2
La coordenada Y del segundo punto.
Returns
Nothing
DrawRectangle
GraphicsWindow.DrawRectangle(x, y, width, height)
Dibuja un rectngulo en la pantalla usando el lpiz seleccionado.
x
La coordenada X del rectngulo.
y
La coordenada Y del rectngulo.
width
El ancho del rectngulo.
height
El alto del rectngulo.
Returns
Nothing
DrawResizedImage
GraphicsWindow.DrawResizedImage(imageName, x, y, width, height)
Dibuja la imagen especificada en memoria a la pantalla, con el tamao
indicado.
imageName
El nombre de la imagen a dibujar.
x
La coordenada X del punto en el cual dibujar la imagen.
y
La coordenada Y del punto en el cual dibujar la imagen.
width
El ancho para dibujar la imagen.
height
El alto para dibujar la imagen.
Returns
Nothing
DrawText

Pgina 338 de 364

GraphicsWindow.DrawText(x, y, text)
Dibuja una lnea de texto en la pantalla en la ubicacin especificada.
x
La coordenada X del punto de inicio del texto.
y
La coordenada Y del punto de inicio del texto.
text
El texto a escribir.
Returns
Nothing
DrawTriangle
GraphicsWindow.DrawTriangle(x1, y1, x2, y2, x3, y3)
Dibuja un tringulo en la pantalla usando el lpiz seleccionado.
x1
La coordenada X del primer punto.
y1
La coordenada Y del primer punto.
x2
La coordenada X del segundo punto.
y2
La coordenada Y del segundo punto.
x3
La coordenada X del tercer punto.
y3
La coordenada Y del tercer punto.
Returns
Nothing
FillEllipse
GraphicsWindow.FillEllipse(x, y, width, height)
Rellena una elipse en la pantalla usando el pincel seleccionado.
x
La coordenada X de la elipse.
y
La coordenada Y de la elipse.
width
El ancho de la elipse.
height

Pgina 339 de 364

El alto de la elipse.
Returns
Nothing
FillRectangle
GraphicsWindow.FillRectangle(x, y, width, height)
Rellena un rectngulo en la pantalla usando el pincel seleccionado.
x
La coordenada X del rectngulo.
y
La coordenada Y del rectngulo.
width
El ancho del rectngulo.
height
El alto del rectngulo.
Returns
Nothing
FillTriangle
GraphicsWindow.FillTriangle(x1, y1, x2, y2, x3, y3)
Dibuja y rellena un tringulo en la pantalla usando el pincel seleccionado.
x1
La coordenada X del primer punto.
y1
La coordenada Y del primer punto.
x2
La coordenada X del segundo punto.
y2
La coordenada Y del segundo punto.
x3
La coordenada X del tercer punto.
y3
La coordenada Y del tercer punto.
Returns
Nothing
GetColorFromRGB
GraphicsWindow.GetColorFromRGB(red, green, blue)
Crea un color con los valores de rojo, verde y azul proporcionados.
red

Pgina 340 de 364

El componente rojo del color (0-255).


green
El componente verde del color (0-255).
blue
El componente azul del color (0-255).
Returns
Devuelve un color que se puede utilizar para establecer el color de la brocha o
del lpiz.
GetPixel
GraphicsWindow.GetPixel(x, y)
Obtiene el color del pxel en las coordenadas X e Y especificadas.
x
La coordenada X del pxel.
y
La coordenada Y del pxel.
Returns
El color del pxel.
GetRandomColor
GraphicsWindow.GetRandomColor()
Obtiene un color aleatorio vlido.
Returns
Un color aleatorio vlido.
Hide
GraphicsWindow.Hide()
Oculta la ventana de grficos.
Returns
Nothing
SetPixel
GraphicsWindow.SetPixel(x, y, color)
Dibuja el pxel indicado por las coordenadas X e Y usando el color indicado.
x
La coordenada X del pxel.
y
La coordenada Y del pxel.
color

Pgina 341 de 364

El color para dibujar el pxel.


Returns
Nothing
Show
GraphicsWindow.Show()
Muestra la ventana de grficos para permitir interacciones con ella.
Returns
Nothing
ShowMessage
GraphicsWindow.ShowMessage(text, title)
Muestra un cuadro de dilogo de mensaje al usuario.
text
El texto a ser mostrado en el cuadro de dilogo de mensaje.
title
El ttulo del cuadro de dilogo de mensaje.
Returns
Nothing

IMAGELIST

Esta clase ayuda a cargar y almacenar imgenes en memoria.


Methods

GetHeightOfImage
ImageList.GetHeightOfImage(imageName)
Obtiene el alto de la imagen almacenada.
imageName
El nombre de la imagen en memoria.
Returns
El alto de la imagen especificada.
GetWidthOfImage
ImageList.GetWidthOfImage(imageName)
Obtiene el ancho de la imagen almacenada.
imageName
El nombre de la imagen en memoria.
Returns

Pgina 342 de 364

El ancho de la imagen especificada.


LoadImage
ImageList.LoadImage(fileNameOrUrl)
Carga en memoria una imagen de un archivo o desde Internet.
fileNameOrUrl
El nombre de la imagen a cargar. Puede ser un archivo local o una URL a una
direccin de Internet.
Returns
Devuelve el nombre de la imagen cargada.

MATH

La clase Math (matemticas) proporciona muchos mtodos tiles relacionados


con las matemticas.
Properties
Pi (This property is read-only.)
Math.Pi
Obtiene el valor de Pi.
Methods
Abs
Math.Abs(number)
Obtiene el valor absoluto del nmero proporcionado. Por ejemplo -32,233
devuelve 32,233.
number
El nmero del que obtener su valor absoluto.
Returns
El valor absoluto del valor determinado.
Ceiling
Math.Ceiling(number)
Obtiene el valor entero que es mayor o igual que el nmero decimal
proporcionado. Por ejemplo, 32,233 devuelve 33.
number
El nmero al que se va a calcular el mnimo valor entero no mayor que l.
Returns
El mnimo valor entero no mayor del nmero dado.

Pgina 343 de 364

Cos
Math.Cos(angle)
Obtiene el coseno del ngulo dado en radianes.
angle
El ngulo para calcular su coseno (en radianes).
Returns
El coseno del ngulo dado.
Floor
Math.Floor(number)
Obtiene el valor entero que es menor o igual al nmero decimal dado. Por
ejemplo, 32,233 devolver 32.
number
El nmero al que se va a calcular el mximo valor entero no mayor que l.
Returns
El mximo valor entero no mayor del nmero dado.
GetDegrees
Math.GetDegrees(angle)
Convierte un ngulo dado en radianes a grados.
angle
El ngulo en radianes.
Returns
El ngulo convertido a grados.
GetRadians
Math.GetRadians(angle)
Convierte un ngulo dado en grados a radianes.
angle
El ngulo en grados.
Returns
El ngulo convertido a radianes.
GetRandomNumber
Math.GetRandomNumber(maxNumber)
Obtiene un nmero aleatorio entre 1 y el nmero especificado (incluido).
maxNumber
El mximo valor para el nmero aleatorio solicitado.
Returns

Pgina 344 de 364

Un nmero aleatorio que es menor o igual que el mximo especificado.


Log
Math.Log(number)
Obtiene el logaritmo (en base 10) del nmero dado.
number
El nmero del cual se necesita el valor del logaritmo.
Returns
El valor del logaritmo del nmero dado.
Max
Math.Max(number1, number2)
Compara dos nmeros y devuelve el mayor de los dos.
number1
El primero de los dos nmeros a comparar.
number2
El segundo de los dos nmeros a comparar.
Returns
El valor del mayor de los dos nmeros.
Min
Math.Min(number1, number2)
Compara dos nmeros y devuelve el menor de los dos.
number1
El primero de los dos nmeros a comparar.
number2
El segundo de los dos nmeros a comparar.
Returns
El valor del menor de los dos nmeros.
NaturalLog
Math.NaturalLog(number)
Obtiene el valor del logaritmo natural de un nmero dado.
number
El nmero al que se va a calcular su logaritmo natural.
Returns
El valor del logaritmo natural del nmero dado.
Power

Pgina 345 de 364

Math.Power(baseNumber, exponent)
Eleva la base a la potencia indicada.
baseNumber
El nmero a ser elevado a la potencia exponente.
exponent
La potencia a la cual elevar el nmero base.
Returns
El nmero base elevado al exponente indicado.
Remainder
Math.Remainder(dividend, divisor)
Divide el primer nmero entre el segundo y devuelve el resto.
dividend
El dividendo.
divisor
El divisor.
Returns
El resto de la divisin.
Round
Math.Round(number)
Redondea un nmero a su valor entero ms prximo. Por ejemplo, 32,233 se
redondea a 32,0 mientras que 32,566 se redondea a 33.
number
El nmero para calcular su nmero entero.
Returns
El valor entero del nmero dado.
Sin
Math.Sin(angle)
Obtiene el seno del ngulo dado en radianes.
angle
El ngulo (en radianes) cuyo seno se necesita.
Returns
El seno del ngulo dado.
SquareRoot
Math.SquareRoot(number)
Obtiene la raz cuadrada de un nmero dado
number

Pgina 346 de 364

El nmero para calcular su raz cuadrada.


Returns
La raz cuadrada del nmero dado.
Tan
Math.Tan(angle)
Obtiene la tangente del ngulo dado en radianes.
angle
El ngulo para calcular su tangente (en radianes).
Returns
La tangente del ngulo dado.

MOUSE

La clase Mouse proporciona o asigna propiedades relacionadas con el mouse,


tales como la posicin del cursor, el puntero, etc.
Properties
IsLeftButtonDown (This property is read-only.)
Mouse.IsLeftButtonDown
Determina si el botn izquierdo est presionado o no.
IsRightButtonDown (This property is read-only.)
Mouse.IsRightButtonDown
Determina si el botn derecho est presionado o no.
MouseX
Mouse.MouseX
Obtiene o cambia la coordenada X de la posicin del mouse.
MouseY
Mouse.MouseY
Obtiene o cambia la coordenada Y de la posicin del mouse.
Methods
HideCursor
Mouse.HideCursor()
Oculta el puntero del mouse en la pantalla.
Returns
Nothing

Pgina 347 de 364

ShowCursor
Mouse.ShowCursor()
Muestra el puntero del mouse en la pantalla.
Returns
Nothing

NETWORK

Esta clase de ayuda privada proporciona mtodos de acceso a la red.

Methods
DownloadFile
Network.DownloadFile(url)
Descarga un archivo desde la red a un archivo local temporal.
url
La URL del archivo en la red.
Returns
El nombre de un archivo local que corresponde al que se ha descargado.
GetWebPageContents
Network.GetWebPageContents(url)
Obtiene el contenido de la pgina web indicada.
url
La URL (ubicacin universal de recurso) de la pgina web.
Returns
El contenido de la pgina web especificada.

PROGRAM

La clase Program (programa) proporciona ayuda para controlar la ejecucin del


programa.
Properties
Directory (This property is read-only.)
Program.Directory
Obtiene la carpeta donde se est ejecutando el programa.

Pgina 348 de 364

Methods
Delay
Program.Delay(milliSeconds)
Retrasa la ejecucin del programa por la cantidad indicada de milisegundos.
milliSeconds
La duracin del retraso.
Returns
Nothing
End
Program.End()
Finaliza el programa.
Returns
Nothing

SHAPES

El objeto Shape (forma) permite agregar, mover y rotar formas en la ventana de


grficos.
Methods
AddEllipse
Shapes.AddEllipse(width, height)
Agrega una elipse con el ancho y alto indicados.
width
El ancho de la elipse.
height
Al alto de la elipse.
Returns
La elipse que se ha dibujado en la ventana de grficos.
AddImage
Shapes.AddImage(imageName)
Agrega una imagen como una forma que se puede mover, animar o rotar.
imageName
El nombre de la imagen a dibujar.
Returns
La imagen que se ha dibujado en la ventana de grficos.

Pgina 349 de 364

AddLine
Shapes.AddLine(x1, y1, x2, y2)
Agrega una lnea entre los puntos indicados.
x1
La coordenada X del primer punto.
y1
La coordenada Y del primer punto.
x2
La coordenada X del segundo punto.
y2
La coordenada Y del segundo punto.
Returns
La lnea que se ha dibujado en la ventana de grficos.
AddRectangle
Shapes.AddRectangle(width, height)
Agrega un rectngulo con el ancho y alto indicados.
width
El ancho del rectngulo.
height
El alto del rectngulo.
Returns
El rectngulo que se ha dibujado en la ventana de grficos.
AddTriangle
Shapes.AddTriangle(x1, y1, x2, y2, x3, y3)
Agrega un tringulo representado por los puntos indicados.
x1
La coordenada X del primer punto.
y1
La coordenada Y del primer punto.
x2
La coordenada X del segundo punto.
y2
La coordenada Y del segundo punto
x3
La coordenada X del tercer punto.
y3
La coordenada Y del tercer punto.

Pgina 350 de 364

Returns
El tringulo que se ha dibujado en la ventana de grficos.
Animate
Shapes.Animate(shapeName, x, y, duration)
Mueve una forma con el nombre especificado a nueva posicin.
shapeName
El nombre de la forma a mover.
x
La coordenada X de la nueva posicin.
y
La coordenada Y de la nueva posicin.
duration
La duracin de la animacin, en milisegundos.
Returns
Nothing
GetLeft
Shapes.GetLeft(shapeName)
Obtiene la coordenada izquierda de la forma indicada.
shapeName
El nombre de la forma.
Returns
La coordenada izquierda de la forma.
GetTop
Shapes.GetTop(shapeName)
Obtiene la coordenada superior de la forma indicada.
shapeName
El nombre de la forma.
Returns
La coordenada superior de la forma.
Move
Shapes.Move(shapeName, x, y)
Mueve la forma con el nombre indicado a una nueva posicin.
shapeName
El nombre de la forma a mover.

Pgina 351 de 364

x
La coordenada X de la nueva posicin.
y
La coordenada Y de la nueva posicin.
Returns
Nothing
Remove
Shapes.Remove(shapeName)
Borra una forma de la ventana de grficos.
shapeName
El nombre de la forma que hay que borrar.
Returns
Nothing
Rotate
Shapes.Rotate(shapeName, angle)
Rota la forma con el nombre indicado el ngulo indicado.
shapeName
El nombre de la forma a rotar.
angle
El ngulo a rotar la forma.
Returns
Nothing

SOUND

El objeto Sound (sonido) proporciona operaciones que le permiten reproducir


sonidos. Algunos ejemplos de sonidos se proporcionan en la biblioteca.
Methods
Pause
Sound.Pause(filePath)
Pausa la reproduccin de un archivo de audio. Si el archivo no se est
reproduciendo, esta operacin no realizar ninguna operacin.
filePath

Pgina 352 de 364

La ruta al archivo de audio. Puede ser un archivo local (por ejemplo,


c:\music\track1.mp3) o un archivo en la web (por ejemplo,
http://contoso.com/track01.wma).
Returns
Nothing
Play
Sound.Play(filePath)
Reproduce un archivo de sonido. Puede ser un archivo MP3, WAV o WMA.
Otros formatos de archivo pueden o no reproducirse dependiendo de los
codificadores de audio instalados en su equipo. Si el archivo est pausado,
esta operacin contina desde la posicin donde se paus la reproduccin.
filePath
La ruta al archivo de audio. Puede ser un archivo local (por ejemplo,
c:\music\track1.mp3) o un archivo en la web (por ejemplo,
http://contoso.com/track01.wma).
Returns
Nothing
PlayAndWait
Sound.PlayAndWait(filePath)
Reproduce un archivo de sonido y espera hasta que termine. Puede ser un
archivo MP3, WAV o WMA. Otros formatos de archivo pueden o no
reproducirse dependiendo de los codificadores de audio instalados en su
equipo. Si el archivo est pausado, esta operacin contina desde la posicin
donde se paus la reproduccin.
filePath
La ruta al archivo de audio. Puede ser un archivo local (por ejemplo,
c:\music\track1.mp3) o un archivo en la web (por ejemplo,
http://contoso.com/track01.wma).
Returns
Nothing
PlayBellRing
Sound.PlayBellRing()
Reproduce el sonido "timbre".
Returns
Nothing
PlayBellRingAndWait

Pgina 353 de 364

Sound.PlayBellRingAndWait()
Reproduce el sonido "timbre" y espera a que termine.
Returns
Nothing
PlayChime
Sound.PlayChime()
Reproduce el sonido "campana".
Returns
Nothing
PlayChimeAndWait
Sound.PlayChimeAndWait()
Reproduce el sonido "campana" y espera a que termine.
Returns
Nothing
PlayChimes
Sound.PlayChimes()
Reproduce el sonido "campanas".
Returns
Nothing
PlayChimesAndWait
Sound.PlayChimesAndWait()
Reproduce el sonido "campanas" y espera a que termine.
Returns
Nothing
PlayClick
Sound.PlayClick()
Reproduce el sonido "clic".
Returns
Nothing
PlayClickAndWait
Sound.PlayClickAndWait()
Reproduce el sonido "clic" y espera a que termine.

Pgina 354 de 364

Returns
Nothing
Stop
Sound.Stop(filePath)
Para la reproduccin de un archivo de audio. Si el archivo no se est
reproduciendo, esta operacin no realizar ninguna operacin.
filePath
La ruta al archivo de audio. Puede ser un archivo local (por ejemplo,
c:\music\track1.mp3) o un archivo en la web (por ejemplo,
http://contoso.com/track01.wma).
Returns
Nothing

STACK

Este objeto proporciona una manera de almacenar valores al igual que se


apilan platos. Puede poner un valor al principio de la pila y sacarlo. Slo puede
sacar y poner los valores uno a uno y el ltimo valor que se pone es el primero
que se puede sacar.
Methods
GetCount
Stack.GetCount(stackName)
Obtiene la cantidad de elementos en la pila indicada.
stackName
El nombre de la pila.
Returns
La cantidad de elementos en la pila indicada.
PopValue
Stack.PopValue(stackName)
Quita el valor de la pila indicada.
stackName
El nombre de la pila.
Returns
El valor de la pila.

Pgina 355 de 364

PushValue
Stack.PushValue(stackName, value)
Agrega un valor a la pila indicada.
stackName
El nombre de la pila.
value
El valor a agregar.
Returns
Nothing

TEXT

El objeto Text (texto) proporciona operaciones tiles para trabajar con texto.

Methods
Append
Text.Append(text1, text2)
Anexa dos entradas de texto y devuelve el resultado como otro texto. Esta
operacin es especialmente til cuando se trabaja con texto desconocido en
variables que pueden tratarse accidentalmente como nmeros y agregarse en
lugar de anexarse.
text1
Primera parte del texto a anexar.
text2
Segunda parte del texto a anexar.
Returns
El texto anexado que contiene las dos partes indicadas.
ConvertToLowerCase
Text.ConvertToLowerCase(text)
Convierte el texto dado a minsculas.
text
El texto a convertir a minsculas.
Returns
El texto convertido a minsculas.

Pgina 356 de 364

ConvertToUpperCase
Text.ConvertToUpperCase(text)
Convierte el texto dado a maysculas.
text
El texto a convertir a maysculas.
Returns
El texto convertido a maysculas.
EndsWith
Text.EndsWith(text, subText)
Determina si un texto dado es el final de un texto ms largo.
text
La cadena donde buscar.
subText
El texto por el que buscar.
Returns
Verdadero si se encuentra la subcadena al final del texto proporcionado.
GetCharacter
Text.GetCharacter(characterCode)
Devuelve un carcter que se puede usar con texto normal del cdigo Unicode
proporcionado.
characterCode
El cdigo de carcter (basado en Unicode) para el carcter requerido.
Returns
Un carcter Unicode que corresponde con el cdigo indicado.
GetCharacterCode
Text.GetCharacterCode(character)
Dado un carcter Unicode, obtiene el cdigo correspondiente.
character
El carcter del cual se solicita el cdigo.
Returns
Un cdigo basado en Unicode correspondiente al carcter indicado.
GetIndexOf
Text.GetIndexOf(text, subText)
Encuentra la posicin donde una subcadena aparece en el texto especificado.
text

Pgina 357 de 364

El texto en el que buscar.


subText
El texto a buscar.
Returns
La posicin en la que la subcadena aparece en la cadena especificada. Si el
texto no se encuentra, devuelve -1.
GetLength
Text.GetLength(text)
Obtiene la longitud del texto indicado.
text
El texto para calcular su longitud.
Returns
La longitud del texto indicado.
GetSubText
Text.GetSubText(text, start, length)
Obtiene una parte de un texto dado.
text
El texto en el que buscar la subcadena.
start
Especifica desde dnde empezar.
length
Especifica la longitud de la subcadena.
Returns
La parte del texto solicitada.
GetSubTextToEnd
Text.GetSubTextToEnd(text, start)
Obtiene una subcadena dentro de la cadena de texto desde una posicin
especificada hasta el final.
text
El texto en el que buscar la subcadena.
start
Especifica desde dnde empezar.
Returns
La subcadena pedida.
IsSubText
Text.IsSubText(text, subText)

Pgina 358 de 364

Determina cuando un texto proporcionado es parte de un texto ms largo.


text
La cadena de texto donde se buscar la subcadena.
subText
El texto por el que buscar.
Returns
Verdadero si se encuentra la subcadena dentro del texto proporcionado.
StartsWith
Text.StartsWith(text, subText)
Determina si un texto dado es el comienzo de un texto ms largo.
text
La cadena donde buscar.
subText
El texto por el que buscar.
Returns
Verdadero si se encuentra la subcadena al principio del texto proporcionado.

TEXTWINDOW

El objeto TextWindow (ventana de texto) proporciona funcionalidades


relacionadas con la entrada y salida de texto. Por ejemplo, con esta clase
puede escribir texto en una ventana de texto o leer texto de ella.
Properties
BackgroundColor
TextWindow.BackgroundColor
Obtiene o cambia el color de fondo del texto que aparece en la ventana de
texto.
CursorLeft
TextWindow.CursorLeft
Obtiene o cambia la columna de la posicin del cursor en la ventana de texto.
CursorTop
TextWindow.CursorTop
Obtiene o cambia la fila de la posicin del cursor en la ventana de texto.
ForegroundColor
TextWindow.ForegroundColor
Obtiene o cambia el color del texto que aparece en la ventana de texto.

Pgina 359 de 364

Left
TextWindow.Left
Obtiene o cambia la posicin a la izquierda de la ventana de texto.
Title
TextWindow.Title
Obtiene o cambia el ttulo de la ventana de texto.
Top
TextWindow.Top
Obtiene o cambia la posicin superior de la ventana de texto.
Methods
Clear
TextWindow.Clear()
Borra el contenido de la ventana de texto.
Returns
Nothing
Hide
TextWindow.Hide()
Oculta la ventana de texto.
Returns
Nothing
Pause
TextWindow.Pause()
Espera a que el usuario escriba algo antes de volver.
Returns
Nothing
PauseIfVisible
TextWindow.PauseIfVisible()
Espera a que el usuario escriba algo una vez que la ventana de texto est
abierta.
Returns
Nothing
PauseWithoutMessage
TextWindow.PauseWithoutMessage()
Espera a que el usuario escriba algo antes de volver.
Returns
Nothing

Pgina 360 de 364

Read
TextWindow.Read()
Lee la lnea de texto de la ventana de texto. Esta funcin no terminar hasta
que el usuario presione la tecla ENTRAR.
Returns
El texto ledo de la ventana de texto.

TIMER

El objeto Timer (temporizador) proporciona una manera fcil de hacer algo una
y otra vez con un intervalo constante entre medias.

Properties
Interval
Timer.Interval
Obtiene o especifica el intervalo (en milisegundos) y especifica con qu
frecuencia se debe elevar el evento Tick. El valor puede estar entre 10 y
100.000.000.
Events
Tick
Timer.Tick
Desencadena un evento cuando el temporizador cumple un ciclo.
Methods
Pause
Timer.Pause()
Pausa el temporizador. No se desencadenarn eventos Tick.
Returns
Nothing
Resume
Timer.Resume()
Reanuda el temporizador de un estado de pausa. Se desencadenarn eventos
Tick.
Returns
Nothing

Pgina 361 de 364

TURTLE

La clase Tutle (tortuga) proporciona funcionalidad como la de Logo para dibujar


formas mediante la manipulacin de propiedades de lpiz y primitivas de
dibujo.
Properties
Angle
Turtle.Angle
Obtiene o establece el ngulo actual de la tortuga. Mientras se establece, la
tortuga gira al nuevo ngulo.
Speed
Turtle.Speed
Especifica cmo de rpido se mueve la tortuga. Los valores vlidos se
encuentran entre 1 y 10. Si Speed se establece en 10, la tortuga se mueve y
rota de manera instantnea.
X
Turtle.X
Obtiene o establece la coordenada X de la tortuga. Mientras se establece, la
tortuga gira al nuevo ngulo.
Y
Turtle.Y
Obtiene o establece la coordenada Y de la tortuga. Mientras se establece, la
tortuga gira al nuevo ngulo.
Methods
Hide
Turtle.Hide()
Oculta la tortuga y cesan las interacciones con ella
Returns
Nothing
Move
Turtle.Move(distance)
Mueve la tortuga la distancia especificada. Si el lpiz se encuentra pulsado,
dibuja una lnea mientras se mueve.
distance
La distancia a mover la tortuga.
Returns

Pgina 362 de 364

Nothing
MoveTo
Turtle.MoveTo(x, y)
Gira y mueve la tortuga a la posicin especificada. Si el lpiz se encuentra
pulsado, dibuja una lnea mientras la mueve.
x
La coordenada X del punto de destino.
y
La coordenada Y del punto de destino.
Returns
Nothing
PenDown
Turtle.PenDown()
Baja el lpiz para permitir que la tortuga dibuje mientras se mueve.
Returns
Nothing
PenUp
Turtle.PenUp()
Levanta el lpiz para dejar de dibujar mientras la tortuga se mueve.
Returns
Nothing
Show
Turtle.Show()
Muestra la tortuga y permite interactuar con ella.
Returns
Nothing
Turn
Turtle.Turn(angle)
Gira la tortuga el ngulo especificado. El ngulo es en grados y puede ser
positivo o negativo. Si el ngulo es positivo, la tortuga gira a la derecha. Si es
negativo, gira a la izquierda.
angle
El ngulo a girar la tortuga.
Returns
Nothing

Pgina 363 de 364

TurnLeft
Turtle.TurnLeft()
Gira la tortuga 90 grados hacia la izquierda.
Returns
Nothing
TurnRight
Turtle.TurnRight()
Gira la tortuga 90 grados hacia la derecha.
Returns
Nothing

Pgina 364 de 364

You might also like