Este es un tutorial sobre
cómo crear una aplicación interactiva para resolver
el problema
del progreso del caballo en el
procesamiento y
p5.jsParte 1
Crear un caballo - rectángulo rect (). El caballo se denota con un círculo gris.
rect(bx, by, boxSize, boxSize); fill(50);
Deje que el caballo pinte sobre todas las celdas por las que pasa, así es como está
aquí .
Luego, deje que el caballo sea atraído hacia el centro de la jaula al soltar el botón
MouseRealised () .
Agregue las variables
storX y
storY que almacenarán las coordenadas de la celda en la que se encuentra el cursor. Si se presiona el botón izquierdo y el cursor está sobre el caballo, guarde las coordenadas del
mod de celda actual en las variables
storX y
storY :
void mouseClick() { if (mouseX >= x && mouseX <= x+100 && mouseY >= y && mouseY <= y+100) { if (overBox && mousePressed && (mouseButton == LEFT)) { storX=x;
Cuando suelta el botón, las coordenadas storX y storY se cargan en las coordenadas de knightX y knightY knights.
knightX=storX; knightY=storY;
Si para el estado de "botón presionado" hay una variable
booleana estándar
presionada por el
mouse , entonces para el estado de "botón no presionado" no existe tal variable: créelo usted mismo:
boolean bool_mouseReleased;
Ahora, si no se presiona el botón del mouse (es decir,
bool_mouseReleased = true ), pinte sobre la celda con las coordenadas storX y storY
if((bool_mouseReleased ) && (x==storX && y==storY )){ modColor=200; }
Tirando del caballo al centro de la jaula Mira
aquíParte II
Añadir un botón de cancelación.
Aquí hay un ejemplo que ilustra el funcionamiento de los botones.
Primero, cree listas
IntList de coordenadas de
celda a lo largo de las cuales pasó el caballo; dibuje el botón en la esquina inferior izquierda:
Inicializar listas
listOfCoordinatesX = new IntList(); listOfCoordinatesY = new IntList(); listOfCoordinatesX.append(0); listOfCoordinatesY.append(0);
Al final del siguiente movimiento (al soltar el botón del mouse) agregamos las coordenadas de celda a la lista / pila:
if(overKnight){ knightX=storX; knightY=storY; listOfCoordinatesX.append(int(knightX)); listOfCoordinatesY.append(int(knightY)); }
Cree una función booleana
overButton () , que devuelve verdadero si el cursor del mouse está sobre el botón y
buttonUpdate () , que actualiza la variable
boolButton void buttonUpdate() { if ( overButton(buttonX, buttonY, buttonSize, buttonSize) ) { boolButton = true; } else { boolButton = false; } } boolean overButton(int x, int y, int width, int height) { if (mouseX >= x && mouseX <= x+width && mouseY >= y && mouseY <= y+height) { return true; } else { return false; } }
La variable y las listas se muestran en la consola en el bucle principal del programa:
println(boolButton); println(listOfCoordinatesX); println(listOfCoordinatesY);
Mira
aquíParte III
Agregue la función de saltar a la celda anterior cuando haga clic en el botón cancelar.
En la función
mousePressed () , verificamos si se ha presionado el botón cancelar. Si se presiona el botón, elimine los últimos elementos de las listas de coordenadas (parte superior de las pilas), si hay más de un elemento en la lista:
if(boolButton && listOfCoordinatesX.size()>1) { listOfCoordinatesX.pop(); listOfCoordinatesY.pop(); }
Cuando hace clic en el botón cancelar en el método
mouseClick () de la clase
Módulo , guardamos los elementos de las listas de coordenadas (parte superior de las pilas) en las variables
storX y
storY :
if(boolButton && mousePressed) { storX= listOfCoordinatesX.get(listOfCoordinatesX.size()-1); storY= listOfCoordinatesY.get(listOfCoordinatesY.size()-1); }
Cuando suelta el botón cancelar, volvemos a la coordenada anterior y regresamos a la celda el color original (negro):
if(boolButton && bool_mouseReleased){ if(x==storX && y==storY ) { modColor=0; } }
En la función
mouseReleased () ,
colocamos nuestro caballo en la celda correspondiente del campo.
if(boolButton) { knightX=storX; knightY=storY; }
Ahora el programa en lenguaje de procesamiento funciona correctamente y la función de deshacer en el programa en p5.js no funciona correctamente.
Consulte el programa en p5.js
aquíReemplace las listas de InList en el programa principal con matrices int []. Puede agregar dinámicamente un elemento a la matriz, así como a la lista, utilizando la función
append () listOfCoordinatesX = append(listOfCoordinatesX,0);
No puede recuperar un elemento con pop () de una matriz. Para hacer esto, hay una función para reducir la longitud de la matriz en uno
acortar () . Para determinar la longitud de la matriz, en lugar de
size (), use
lengthEste programa se puede agregar como un script js a una página html. Para ejecutar el script, debe usar processing.js
Ver esta página
aquí .
Y
aquí es lo mismo, pero con la imagen de un caballo.
Y
aquí el caballo solo puede caminar con la letra
G. El resto de los movimientos están prohibidos.
Enlace a github con los textos de los programas presentados en el artículo.