Ceci est un tutoriel sur la création d'une application interactive pour résoudre
le problème de progression du cheval dans le
traitement et
p5.jsPartie I
Créez un cheval - rectangle rect (). Le cheval est indiqué par un cercle gris.
rect(bx, by, boxSize, boxSize); fill(50);
Laissez le cheval peindre sur toutes les cellules qu'il traverse, c'est comme ça
ici .
Ensuite, laissez le cheval être attiré au centre de la cage lorsque vous
relâchez le bouton
mouseRealised () .
Ajoutez des variables
storX et
storY qui
stockeront les coordonnées de la cellule sur laquelle se trouve le curseur. Si vous appuyez sur le bouton gauche et que le curseur se trouve au-dessus du cheval, enregistrez les coordonnées du
mod de cellule actuel dans les variables
storX et
storY :
void mouseClick() { if (mouseX >= x && mouseX <= x+100 && mouseY >= y && mouseY <= y+100) { if (overBox && mousePressed && (mouseButton == LEFT)) { storX=x;
Lorsque le bouton est relâché, les coordonnées storX et storY sont chargées dans les coordonnées chevalier knightX et knightY.
knightX=storX; knightY=storY;
S'il existe une variable
booléenne standard
mousePressed pour l'
état du bouton enfoncé, alors une telle variable n'existe pas pour l'état du bouton enfoncé - créez-la vous-même:
boolean bool_mouseReleased;
Maintenant, si le bouton de la souris n'est pas enfoncé (c'est-à-dire
bool_mouseReleased = true ), peignez la cellule avec les coordonnées storX et storY
if((bool_mouseReleased ) && (x==storX && y==storY )){ modColor=200; }
Tirer le cheval au centre de la cage Vérifiez
iciPartie II
Ajoutez un bouton d'annulation.
Un exemple illustrant le fonctionnement des boutons est
ici .
Tout d'abord, créez des listes
IntList de coordonnées de
cellule le long desquelles le cheval est passé; dessinez le bouton lui-même dans le coin inférieur gauche:
Initialiser les listes
listOfCoordinatesX = new IntList(); listOfCoordinatesY = new IntList(); listOfCoordinatesX.append(0); listOfCoordinatesY.append(0);
À la fin du prochain mouvement (en relâchant le bouton de la souris), nous ajoutons les coordonnées des cellules à la liste / pile:
if(overKnight){ knightX=storX; knightY=storY; listOfCoordinatesX.append(int(knightX)); listOfCoordinatesY.append(int(knightY)); }
Créons une fonction booléenne
overButton () , qui retourne vrai si le curseur de la souris est au-dessus du bouton et la fonction
buttonUpdate () , qui met à jour 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 et les listes sont affichées dans la console dans la boucle de programme principale:
println(boolButton); println(listOfCoordinatesX); println(listOfCoordinatesY);
Vérifiez
iciPartie III
Ajoutez la fonction de saut à la cellule précédente lorsque vous cliquez sur le bouton Annuler.
Dans la fonction
mousePressed () ,
nous vérifions si le bouton d'annulation a été enfoncé. Si le bouton est enfoncé, supprimez les derniers éléments des listes de coordonnées (en haut des piles), si la liste a plus d'un élément:
if(boolButton && listOfCoordinatesX.size()>1) { listOfCoordinatesX.pop(); listOfCoordinatesY.pop(); }
Lorsque vous cliquez sur le bouton Annuler dans la méthode
mouseClick () de la classe
Module , nous enregistrons les éléments des listes de coordonnées (sommets des piles) dans les variables
storX et
storY :
if(boolButton && mousePressed) { storX= listOfCoordinatesX.get(listOfCoordinatesX.size()-1); storY= listOfCoordinatesY.get(listOfCoordinatesY.size()-1); }
Lorsque vous relâchez le bouton d'annulation, nous revenons aux coordonnées précédentes et retournons à la cellule la couleur d'origine (noire):
if(boolButton && bool_mouseReleased){ if(x==storX && y==storY ) { modColor=0; } }
Dans la fonction
mouseReleased () ,
nous plaçons notre cheval dans la cellule correspondante du champ.
if(boolButton) { knightX=storX; knightY=storY; }
À présent, le programme dans le langage de traitement fonctionne correctement et la fonction d'annulation du programme sur p5.js ne fonctionne pas correctement.
Consultez le programme sur p5.js
iciRemplacez les listes InList du programme principal par des tableaux int []. Vous pouvez ajouter dynamiquement un élément au tableau, ainsi qu'à la liste avec la fonction
append () listOfCoordinatesX = append(listOfCoordinatesX,0);
Vous ne pouvez pas récupérer un élément avec pop () dans un tableau. Pour ce faire, il existe une fonction pour réduire la longueur du tableau d'un
shorten () . Pour déterminer la longueur du tableau, au lieu de
size (), utilisez
lengthCe programme peut être ajouté en tant que script js à une page html. Pour exécuter le script, vous devez utiliser processing.js
Consultez cette page
ici .
Et
voici la même chose, mais avec l'image d'un cheval.
Et
ici le cheval ne peut marcher qu'avec la lettre
G. Le reste des mouvements est interdit.
Lien vers github avec les textes des programmes présentés dans l'article.