Este juego consiste en llevar la línea hasta el final del laberinto.
PImage im;
int colorr = 450;
void setup() {
size(468, 412); // Hacemos el programa del tamaño de la imagen
im = loadImage("labe.png"); // Nombre de la imagen
image(im, 0, 0); // Para mostrar la imagen en la pantalla, coordenadas 0, 0
}
void draw() {
colorr = colorr - 1; // Hace el color rosa un poco mas obscuro
if (colorr < 0){
colorr = 450; // Cuando llegue al maximo de obscuridad, pasa a otro color mas oscuro
}
noStroke();
fill(colorr, 45, 78);
ellipse(mouseX, mouseY, 30, 30);
}
jueves, 17 de diciembre de 2015
miércoles, 16 de diciembre de 2015
Bloque 2 - RELOJ DE POST-IT
PROYECTO 2 - Reloj de Post-it
En este miniproyecto vamos a crear un reloj donde los números estarán hechos a partir de fotografías de notas adhesivas o Post-it.
1.- Inserta una imagen en tu programa.
En primer lugar vamos a aprender a insertar una imagen en tu
programa. Este sketch abre una foto desde la ubicación donde este la foto. En
este caso debemos poner la foto en la carpeta del sketch.
PImage
im;void
setup() { size(400,
400); // Hacemos el programa del tamaño de la imagen im
= loadImage("foto.jpg"); // Nombre de la imagen}void
draw() { image(im,
0, 0); // Para mostrar la imagen en la pantalla, coordenadas 0, 0}
Nuevos comandos:
PImage: Un tipo de datos que puede contener una imagen.loadImage(image file): Carga la imagenimage filelocalizada dentro del directorio actual del sketch.image filedebe escribirse exactamente igual que con el nombre del fichero. Mira más abajo cómo colocar la imagen en la carpeta correcta.image(imageName, x, y): Muestra la PImageimageNameen las coordenadasx,y. La esquina superior izquierda es el eje de coordenadas.
2.- Añadir imágenes
Para que el programa tenga acceso a la imagen, debes arrastrar el fichero de la imagen en el IDE de Processing, como muestra la siguiente captura:Cuando ejecutes el programa, la imagen de abajo es lo que deberias ver, un collage con cuatro Post-its como imagen de fondo para tu ventana de programa:
3.- Mostrando dos imágenes
Para poner dos imágenes una al lado de la otra, debes declarar una variable con distinto nombre pero del mismo tipoPImage y cargar la segunda
imagen en el programa. Deberás ajustar las coordenadas de esta segunda imagen.PImage im;PImage im2;void setup() { size(800, 400); // Hacemos el programa dos veces el tamaño de la imagen en ancho im = loadImage("foto.jpg"); im2 = loadImage("foto2.jpg"); // Nombre de la segunda imagen}void draw() { image(im, 0, 0); image(im2, 400, 0); // Para mostrar la segunda imagen en la pantalla, coordenadas 400, 0}
Vamos a experimentar añadiendo otras imágenes:
PImage im;PImage im2;void setup() { size(800, 400); // Hacemos el programa dos veces el tamaño de la imagen en ancho im = loadImage("balon.jpg"); im2 = loadImage("tenis.jpg"); // Nombre de la segunda imagen}void draw() { image(im, 0, 0); image(im2, 400, 0); // Para mostrar la segunda imagen en la pantalla, coordenadas 400, 0}4.- Arrays
Cuando trabajamos con muchas imágenes podemos utilizar algo llamado arrays que permiten un acceso más fácil a ellas
Los arrays pueden ser de un cierto tipo como entero o
int o
una cadena como String.
El máximo número de variables que pueden almacenar debe ser declarado con el
array – 3 en el ejemplo de arriba. El siguiente programa, que es una
modificación del anterior, muestra como usar un array del tipo PImage para
almacenar dos imágenes.
PImage im[] = new PImage[2];
void setup() {
size(800, 400);
// La primera
imagen va a la primera posicion del array img[]
im[0] =
loadImage("foto.jpg");
// La segunda
imagen va a la segunda posicion del array
im[1] = loadImage("foto2.jpg");
}
void draw() {
image(im[0], 0, 0);
image(im[1],
400, 0);
}
Nuevos comandos:
- La declaración de las
imágenes es un poco diferente:
PImage im[] = new PImage[2], esto significa que declaramos un array del tipoPImagecon dos bloques (o compartimentos) de datos. - Cuando mostramos y cargamos
las imágenes, usamos
img[0], para la primera posición del array, yimg[1], para la segunda.
5.- Usando dos Arrays
Para en adelante simplificar la asignación de las variables imagen, el truco es almacenar los nombres de todas las imágenes en un array de strings (cadenas de texto). Aquí un ejemplo:PImage im[] = new PImage[2];
String imFile[] = {"foto.jpg", "foto2.jpg"};
// Array de nombres de ficherovoid setup() { size(800, 400); im[0] = loadImage(imFile[0]); // Primer fichero a la
funcion 'loadImage()' im[1] = loadImage(imFile[1]); // Segundo fichero}void draw() { image(im[0], 0, 0); image(im[1], 400, 0); }6.- El bucle for()
En este paso aumentaremos el número de imágenes que se muestran de 2 a 4. Todavía utilizaremos los 2 arrays de los pasos anteriores, pero para hacer el código más eficiente incluso, introduciremos una cosa nueva: el buclefor().
Esta es una de las funciones más prácticas y usadas en programación. Hace
exactamente lo que parece, iterar, al igual que draw().
Veamos un ejemplo para seguir explicando como funciona.PImage im[] = new PImage[4];
// Haz tu array mas grande para que le quepan 4 imagenesString imFile[] = {"postit.jpg", "peninsula.jpg",
"tortilla.jpg", "banana.jpg"}; void setup() { size(800,
800); // Haz tu programa mas grande para acomodar todas las
imagenes for (int i = 0; i < 4; i = i +
1) { im[i] =
loadImage(imFile[i]); // Carga la imagen segun el contador 'i' }}void draw() { image(im[0], 0, 0); // Muestra las imagenes image(im[1], 400, 0); image(im[2], 0, 400); image(im[3], 400, 400);
Con estos comandos podemos abrir más imágenes, en
este caso podemos abrir hasta 4 imágenes.
Nuevos comandos:
for(initiator; test; update){ statements }: Esta función permite repetir una pieza de código tantas veces como necesites. La primera cosa que sucede dentro delfor()es la inicialización,initiator.En este ejemplo esta declaración es un entero,i. Luego comprueba sitestes verdadero o falso, tal y como hicimos con elifen el proyecto anterior, ¿recuerdas?. En este ejemplotestcomprueba siies menor que 4. Si así es, el código entre llaves se ejecutará. A continuación, lo que ocurre es elupdate, en este caso se trata de incrementariuna unidad. Después,testse comprueba de nuevo y si nuevamente es cierto, se repite lo anterior. Puesto que siempre actualizamos añadiendo 1 ai, en algún momentoiserá igual que 4, lo que significa quetestserá falsa (4 no es menor que 4). En ese momento, se abandonará el bucle.
7.- Múltiples imágenes
Puesto que el objetivo de este programa es crear un reloj, el siguiente paso es utilizar diferentes imágenes que representen los números y usarlas en nuestro programa. Para tu conveniencia, te damos una serie de imágenes hechas con notas de Post-It.PImage im[] = new PImage[10];
// Array para 10 imagenesString imFile[] = {"0.jpg", "1.jpg",
"2.jpg", "3.jpg", "4.jpg", "5.jpg",
"6.jpg", "7.jpg", "8.jpg", "9.jpg"}; void setup() { size(700,
95); // 10 imagenes de 70 pixels de ancho y 95 de alto for (int i = 0; i < 10; i = i
+ 1) { im[i] = loadImage(imFile[i]); }}void draw() { for (int i = 0; i < 10; i = i + 1) { image(im[i],
70 * i, 0); // Muestra las imagenes en secuencia }}
En este programa podemos abrir las 10 imágenes a la vez y
horizontalmente.
8.- El Tiempo
En este paso te enseñaremos como mostrar el tiempo. Ya has aprendido como acceder a diferentes variables del sistema con Processing. Por ejemplo, ya hemos usadomouseX,
mouseY
y frameRate.
Hay variables que podemos utilizar para obtener el tiempo actual; hour (), minute () y second ().
Empecemos con cómo mostrar el tiempo por sólo las horas:PImage im[] = new PImage[10];
// Array para 10 imagenesString imFile[] = {"0.jpg", "1.jpg",
"2.jpg", "3.jpg", "4.jpg", "5.jpg",
"6.jpg", "7.jpg", "8.jpg", "9.jpg"}; void setup() { size(140,
95); // 2 digitos de 70 pixels de ancho y 95 de alto for (int i = 0; i < 10; i = i
+ 1) { im[i] = loadImage(imFile[i]); }}void draw() { int h =
hour();
// Toma la hora del reloj del ordenador y almacenalo en una variable int h_dec =
int(h / 10); // Extrae el digito de mayor peso de la hora
(decenas) int h_uni = h
- h_dec * 10; // Extrae el digito de menor peso de la hora (unidades) image(im[h_dec],
0, 0); // Muestra el digito de las decenas image(im[h_uni],
70, 0); // Muestra el digito de las unidades}Nuevos comandos:
hour(): Devuelve la hora actual como un número de 0 a 23.int(data): Conviertedataa un entero. P.ej.int(2.545)devuelve 2,int(233.9999)devuelve 233 etc.
Como vemos, este programa es capaz de saber qué hora es
gracias a nuestro ordenador, como son las 10, el programa coge los numeros 1 y
0 para formar el numero 10. Es un programa muy interesante pues podemos tener
un reloj a base de imágenes.
9.- El reloj final
Este es el último paso del proyecto. En este paso vamos a añadir los minutos y los segundos a nuestro reloj utilizando el mismo método que en el paso anterior con las horas.
PImage im[] = new PImage[10]; // Array para 10 imagenes
String imFile[] = {"0.jpg",
"1.jpg", "2.jpg", "3.jpg", "4.jpg",
"5.jpg", "6.jpg", "7.jpg", "8.jpg",
"9.jpg"};
void setup() {
size(140, 285); // 6 digitos en tres filas y dos
columnas
for (int i = 0; i < 10; i = i +
1) {
im[i]
= loadImage(imFile[i]);
}
}
void draw() {
int h =
hour();
int
h_dec = int(h / 10);
int
h_uni = h - h_dec * 10;
image(im[h_dec],
0, 0);
image(im[h_uni], 70, 0);
int m = minute(); // Toma los minutos del reloj del
ordenador y almacenalos en una variable
int m_dec = int(m / 10); // Extrae el digito de mayor peso de los
minutos (decenas)
int m_uni = m - m_dec * 10; // Extrae el
digito de menor peso de los minutos (unidades)
image(im[m_dec], 0, 95); // Muestra el digito de las decenas
image(im[m_uni], 70, 95); // Muestra el digito de las unidades
int s = second(); // Toma los segundos del reloj del
ordenador y almacenalos en una variable
int s_dec = int(s / 10); // Extrae el digito de mayor peso de los
segundos (decenas)
int s_uni = s - s_dec * 10; // Extrae el
digito de menor peso de los segundos (unidades)
image(im[s_dec], 0, 190); // Muestra el digito de las decenas
Esto es un reloj a base de imágenes de números, es el proyecto final de nuestro reloj programado para ver la hora con unas simples imágenes. En nuestras funciones, los segundos van cambiando y los minitos y las hora, pues le hemos puesto su retardo correspondiente.
Juntamos el bloque 1 con un poco del dos:
int tiempo = 0;
void setup() {
size(400, 400); // Hacemos el programa del tamaño de la imagen
im = loadImage("tenis.jpg"); // Nombre de la imagen
image(im, 0, 0); // Para mostrar la imagen en la pantalla, coordenadas 0, 0
}
void draw() {
tiempo = tiempo + 1; // Incrementa el tiempo en una unidad
rojo = int(55 * (1 + sin(tiempo * 2 * PI / frameRate / 20))); // Cambia el rojo, repite el color cada 20s
noStroke();
fill(rojo, 0, 0);
ellipse(mouseX, mouseY, 30, 30);
}
martes, 15 de diciembre de 2015
Bloque 1 - Serpiente
1.- En primer lugar, vamos a hacer una línea. Para ello
escribimos el siguiente código:
Vamos a escribir de nuevo un programa que dibuje una línea, pero esta vez
utilizando las nuevas funciones:
line(0, 0, 100, 100);
Y aparecerá un línea en una pequeña ventanita.
Posteriormente, vamos a recortar la línea, mostrando solo la
mitad. Para ello escribimos el siguiente código:
line(50, 50, 100,100);
2.- Vamos a escribir un programa que dibuje dos líneas de
diferentes colores sobre un fondo blanco. Para ello escribimos el siguiente
código:
background(255);
line(0,0,100,100);
stroke(0,0,255);
line(0,100,100,0);
background(gray): Establece el color de fondo desde 0 – negro, hasta 255 – blanco. También puedes utilizarbackground(red, green, blue)para establecer el color que tú quieras.stroke(red, green, blue): Establece el color de la línea. Cada valor de color puede ser desde 0 hasta 255. En este caso, la línea es de color azul puesto que red=0, green=0 y blue=255.
Vamos
a experimentar cambiando el color de las líneas:
background(400);
line(0,0,100,100);
stroke(0,0,350);
line(0,100,100,0);
3.- vamos
a escribir un programa utilizando variables. Escribiremos un programa que
dibuje, de nuevo, dos líneas, pero esta vez utilizaremos estas variables:
int value1 = 0;
int value2 = 100;
line(value1, value1,
value2, value2);
line(value1, value2,
value2, value1);
int variableName =
value: Crea una variable del tipo integer, un número entero.
Puedes llamarla con cualquier nombre de tu elección, pero para hacerlo más
sencillo para tu futuro yo (quien probablemente leerá el código en el futuro y
querrá entender lo que hizo en el pasado) asegúrate que el nombre va acorde con
el contexto en el que se usa la variable. value es el valor que decides darle al contenido de
tu variable.4.- Tipos de datos
Los tipos de datos más comunes que utilizarás son los siguientes:int: Número entero, p.ej., 2, 99 o 532.float: Número decimal, p.ej., 2.76, 8.211 o 900.3.boolean: Puede ser verdadero o falso.char: Un caracter, p.ej. ‘r’, ‘2’ o ‘%’.String: Una secuencia de carateres, p.ej. “hola”, “¡Me encanta programar!” o “&%!@¤”.
Processing incluye algunas variables de sistema para
hacerlas más accesibles dentro de tus programas. Un ejemplo es
width y height. Estas variables devuelven la
anchura (width) y altura (height) de la ventana de tu
programa. Éste es un pequeño ejemplo:
size(400, 200);
ellipse(width/2,
height/2, width, height);
Comandos nuevos:
size(width, height): Establece el tamaño de la ventana en píxels.ellipse(x, y, x diameter, y diameter): dibuja un elipse centrado en las coordenadasxey. El tamaño se establece conx diameterey diameter. Cuando estos dos parámetros son iguales, el resultado es un círculo.width: la anchura de la ventana de programa.height: la altura de la ventana de programa.
Se le puede dar el tamaño de la elipse que tú quieras.
5.- Setup y draw.
Los tipos de programas que hemos hecho hasta ahora son los
llamados programas estáticos. Esto significa que nunca cambian.
Se ejecutan una única vez y cuando llegan a la última línea de código, se
paran.
Con Processing, puedes crear programas que se ejecuten
continuamente utilizando la función
draw().
Esta función repetirá el bloque de código una y otra vez hasta que el programa
se pare. Sin embargo, no todo el código escrito necesita ser repetido
continuamente. Para el código que sólo necesita ser ejecutado una única vez,
debes usar la función llamada setup().
void setup() {
size(150,150);
}
void draw() {
line(0,0,width,height);
}
Nuevos comandos:
setup(): El código dentro de las llaves se ejecuta una única vez cuando el programa empieza. Sólo necesitamos establecer el tamaño de la ventana una vez, al principio del programa.draw(): El código entre llaves se ejecuta una y otra vez. Se ejecuta línea por línea, de arriba a abajo hasta la última línea, donde vuelve a empezar desde el principio.
6.-
Este programa establece el tamaño de ventana a 300 x 300 pixels y luego dibuja
una línea sobre toda la ventana una y otra vez. En este momento, todavía no se
puede apreciar que esto esta pasando una y otra vez, así que vamos a escribir
otro programa para hacerlo más visible.
void setup() {
size(300,300);
}
void draw() {
line(0,0,mouseX,mouseY);
}
Las líneas se hacen desde el punto (0,0) hasta donde está el
cursor. Vamos a cambiarle el color al fondo y a las líneas.
void setup() {
size(300,300);
background(400);
line(0,0,100,100);
stroke(0,0,350);
line(0,100,100,0);
}
void draw() {
line(0,0,mouseX,mouseY);
}
7.- Serpiente roja
// Vamos a hacer el proyecto de la serpiente roja
void setup() {
size(400,400);
}
void draw() {
noStroke(); //Dibuja formas sin borde
fill(255,0,0); //Las figuras son de color rojo
ellipse(100,100,30,30); // Círculo de 30 pixeles de diámetro
}
Primero nos saldrá un punto rojo en nuestra pantalla:
Lo que el programa hace es primero establecer el tamaño de
la ventana a 400 x 400 píxels. Nosotros decidimos no utilizar contornos y
utilizar el color rojo para el relleno. Por último, dibuja un círculo en las
coordenadas 100,100 con un diámetro de 30 píxels.
PASO 2:
void setup() {
size(400, 400);
}
void draw() {
noStroke();
fill(255, 0, 0);
ellipse(mouseX, mouseY, 30,
30); // Circulo de en funcion de las coordenadas del raton
}
PASO 3
int rojo = 255;
void setup() {
size(400, 400);
}
void draw() {
noStroke();
fill(rojo, 0, 0);
ellipse(mouseX, mouseY, 30, 30); //
Circulo de en funcion de las coordenadas del raton
}
PASO 4
int rojo = 255; void setup() { size(400, 400);}void draw() { rojo
= rojo - 1;
// Haz el rojo un poco mas obscuro if (rojo < 0){ rojo
=
255;
// Cuando llegue al maximo de obscuridad, hazlo claro otra vez } noStroke();
fill(rojo, 0,
0); ellipse(mouseX, mouseY, 30, 30); }
Cada segundo el rojo se va haciendo más intenso. Llega a su
punto más oscuro y vuelve a bajar el color al rojo primario.
Nuevos comandos:
if( test ){ statements }: Comprueba sitestes cierto. En este ejemplo, sirojoes menor que 0. Si es así, losstatementsentre llaves son ejecutados. En este ejemplo, establecereda 255 de nuevo. Si por el contrario,testes falso, el programa procede a ejecutar el código después de las llaves. Utilizando declaraciones “if” te permite decir al programa que código ejecutar.
.
PASO 5
int rojo = 255;int tiempo = 0; void setup() { size(400, 400);}void draw() { tiempo
= tiempo + 1; // Incrementa el tiempo en una unidad rojo
= int(128 * (1 + sin(tiempo * 2 * PI / frameRate / 20))); // Cambia el
rojo, repite el color cada 20s noStroke();
fill(rojo, 0,
0); ellipse(mouseX, mouseY, 30, 30); }Nuevos comandos:
sin( angle ): Esta función se utiliza para calcular el seno de un ángulo. En nuestro caso, no tiene nada que ver con ángulos pero, ¿te acuerdas de la gráfica del seno de la clase de matemáticas? Bien, esa gráfica es el por qué es útil para nosotros. Siempre que quieras crear una oscilación suave y continua de un movimiento o, en este caso, un cambio de color,sin()es muy práctico de usar.PI: Esto es una variable constante que contiene el valor del número pi.frameRate: Esto es otra variable que te da el framerate (frecuencia de ejecución) del programa.
El tiempo de cambio de color es más largo y no vuelve a su
punto inicial sino que sube y baja la intensidad del color, como vemos en la
imagen.
PASO 6
int rojo = 255;int tiempo = 0;int diametro = 50; void setup() { size(400,
400);}void draw() { tiempo =
tiempo + 1; rojo =
int(128 * (1 + sin(tiempo * 2 * PI / frameRate / 20))); diametro =
int(50 * (1 + sin( tiempo * 2 * PI / frameRate / 5))); // Modifica el diametro
del circulo con el paso del tiempo noStroke();
fill(rojo,
0, 0, 50); // Añade un 50% de transparencia al color ellipse(mouseX,
mouseY, diametro, diametro); }
En este ultimo paso, la el punto que sigue el cursor se
agranda y disminuye a la vez que cambia la tonalidad del color rojo.
Vamos a cambiar el color de la serpiente y la velocidad de cambio de color:
int colorr = 130;
int tiempo = 0;
int diametro = 50;
void setup() {
size(400, 400);
}
void draw() {
tiempo = tiempo + 3;
colorr = int(400 * (1 + sin(tiempo * 2 * PI / frameRate / 20)));
diametro = int(50 * (1 + sin( tiempo * 2 * PI / frameRate / 5))); // Modifica el diametro del circulo con el paso del tiempo
noStroke();
fill(colorr, 54, 678, 25); // Añade un 50% de transparencia al color
ellipse(mouseX, mouseY, diametro, diametro);
}
int colorr = 130;
int tiempo = 0;
int diametro = 50;
void setup() {
size(400, 400);
}
void draw() {
tiempo = tiempo + 3;
colorr = int(400 * (1 + sin(tiempo * 2 * PI / frameRate / 20)));
diametro = int(50 * (1 + sin( tiempo * 2 * PI / frameRate / 5))); // Modifica el diametro del circulo con el paso del tiempo
noStroke();
fill(colorr, 54, 678, 25); // Añade un 50% de transparencia al color
ellipse(mouseX, mouseY, diametro, diametro);
}
Suscribirse a:
Entradas (Atom)


























