// C Source File
// Created 12/18/00; 3:44:14 PM
// Updated 8/22/2002; 10:47 PM
#include <tigcclib.h>
// Main Function
void _main(void)
{
int x1, y1, x2, y2;
int ciclo;
// planta el generador de números aleatorios
randomize();
// borra la pantalla
ClrScr();
// despliega el texto de introducción
DrawStr(0, 0, "Prueba de Líneas 1.0", A_NORMAL);
DrawStr(0, 10, "Presione Cualquier Tecla", A_NORMAL);
DrawStr(0, 20, "Presione ESC para salir", A_NORMAL);
while (ngetchx() != KEY_ESC) {
// borra la pantalla
ClrScr();
// ejecuta este bucle 10 veces (0-9 = 10)
for (ciclo = 0; ciclo < 10; ciclo++) {
// escoge coordenadas aleatorias para la línea
x1 = random(LCD_WIDTH);
y1 = random(LCD_HEIGHT);
x2 = random(LCD_WIDTH);
y2 = random(LCD_HEIGHT);
// dibuja la línea en las coordenadas aleatorias
DrawLine(x1, y1, x2, y2, A_NORMAL);
}
}
}
int x1, y1, x2, y2; int ciclo;No hemos hablado realmente de esto de manera específica, pero las declaraciones de variable son muy flexibles. Podemos declarar variables del mismo tipo en la misma línea, o en líneas diferentes. Algunas veces resulta conveniente agrupar variables por su función. En vista que tenemos dos categorías de variables, que llamaré las variables de línea (las variables 'x sub i' y 'y sub i'), y la variable ciclo (utilizada para el nuevo bucle for). La mayoría de gente que escribe programas en C utiliza variables críptica y pobremente nombradas. No hay nada de malo en esto excepto porque es difícil de entender para otras personas, y eventualmente, usted mismo puede confundirse con su significado. Para evitar esto, siempre intentaré utilizar nombres de variables descriptivos. Aparte de esta breve cuestión, usted sabe cómo declarar variables enteras, y eso es todo lo que estamos haciendo aquí. Además, de nuevo no declaramos valores para las variables. Serán inicializadas por las funciones y comandos que las utilizarán después en el programa.
// planta el generador de números aleatorios randomize();Esta es una de las funciones utilizadas para generar números aleatorios. Debemos tener lo que llamamos una 'semilla' para ayudarnos a calcular los números 'aleatorios'. (En realidad son pseudo-aleatorios, pero usted no notará la diferencia). Esta función captura un número de uno de los temporizadores de la calculadora para plantar el generador de números aleatorios con él. Todo lo que usted necesita saber es que debe llamar siempre la función randomize() para asegurarse de no utilizar la misma semilla. Teniendo en cuenta que las calculadoras no tienen relojes integrados, estas semillas pueden ser las mismas en ocasiones, pero la probabilidad de que eso ocurra es extremadamente baja, así que no se preocupe mucho por esto. Si necesita asegurarse de que los números aleatorios no sean nunca los mismos, debe utilizar un método diferente o plantar el generador con la función srand(), pero en este caso tenemos muy poca necesidad de ese tipo de precisión, así que no voy a estudiarla aquí.
// borra la pantalla ClrScr();Notará que esta función no es la 'clrscr()' que hemos empleado en ejemplos anteriores. Esto se debe a que no estamos utilizando la biblioteca stdio (entrada/salida estándar) en este programa, pues clrscr() es parte de la biblioteca stdio, y realiza manejos especiales para esa biblioteca. ClrScr() simplemente borra la pantalla, y es una función integrada al TIOS, directamente por la gente de TI. Esto quiere decir que es más pequeña que la función clrscr(), la cual debe reiniciar la posición de despliegue para los comandos printf() además de borrar la pantalla. Sólo recuerde que ClrScr() y clrscr() no son lo mismo, y que si usted no está utilizando funciones printf() de la biblioteca stdio, debería utilizar ClrScr() en lugar de clrscr() ya que así ahorra espacio. Si utiliza funciones printf(), entonces debe usar clrscr() para reiniciar la posición de despliegue, lo cual es necesario en ese caso.
// despliega el texto de introducción DrawStr(0, 0, "Prueba de Líneas 1.0", A_NORMAL); DrawStr(0, 10, "Presione Cualquier Tecla", A_NORMAL); DrawStr(0, 20, "Presione ESC para salir", A_NORMAL);Hemos vuelto a utilizar DrawStr para este programa.
while (ngetchx() != KEY_ESC) {
// borra la pantalla
ClrScr();
Aquí está la primera parte del bucle while. Usted ha visto cosas similares a ésta antes, pero para refrezcar su memoria, la condición es, mientras el valor retornado por la función ngetchx() no sea igual a la tecla ESC, ejecute el cuerpo del bucle.// ejecuta este bucle 10 veces (0-9 = 10)
for (ciclo = 0; ciclo < 10; ciclo++) {
// escoge coordenadas aleatorias para la línea
x1 = random(LCD_WIDTH);
y1 = random(LCD_HEIGHT);
x2 = random(LCD_WIDTH);
y2 = random(LCD_HEIGHT);
// dibuja la línea en las coordenadas aleatorias
DrawLine(x1, y1, x2, y2, A_NORMAL);
}
Este es un nuevo tipo de bucle. Ya hemos visto que los bucles 'while' evalúan la condición, y ejecutan el cuerpo del bucle (recuerde que el cuerpo está contenido dentro de las llaves { }) mientras la condición sea verdadera. Cuando ya no sea más verdadera, el bucle while detiene la ejecución del cuerpo, y el programa continúa.// escoge coordenadas aleatorias para la línea x1 = random(LCD_WIDTH); y1 = random(LCD_HEIGHT); x2 = random(LCD_WIDTH); y2 = random(LCD_HEIGHT);Estas cuatro sentencias son sentencias de asignación. Aquí capturamos valores aleatorios (para esto fue que utilizamos la función randomize() al comienzo) y los asignamos a las coordenadas.
// dibuja la línea en las coordenadas aleatorias DrawLine(x1, y1, x2, y2, A_NORMAL);Esta función, que está integrada en el TIOS, dibuja una línea entre dos puntos definidos por los extremos (x1,y1) y (x2,y2). El último argumento es una configuración de atributo. Una línea estándar es A_NORMAL, pero hay muchas otras configuraciones. Puede leer más acerca de éstas en la documentación de TIGCC[2]. DrawLine() está definida en archivo de cabecera graph.h.