Este é um tutorial sobre a criação de um aplicativo interativo para resolver
o problema de progresso do cavalo no
processamento e no
p5.jsParte I
Crie um retângulo de cavalo rect (). O cavalo é indicado por um círculo cinza.
rect(bx, by, boxSize, boxSize); fill(50);
Deixe o cavalo pintar sobre todas as células pelas quais passa, é assim que é
aqui .
Em seguida, deixe o cavalo ser atraído para o centro da gaiola ao soltar o botão
mouseRealised () .
Adicione variáveis
storX e
storY que armazenarão as coordenadas da célula na qual o cursor está localizado. Se o botão esquerdo for pressionado e o cursor estiver acima do cavalo, salve as coordenadas do
mod de célula atual nas variáveis
storX e
storY :
void mouseClick() { if (mouseX >= x && mouseX <= x+100 && mouseY >= y && mouseY <= y+100) { if (overBox && mousePressed && (mouseButton == LEFT)) { storX=x;
Quando o botão é solto, as coordenadas storX e storY são carregadas nas coordenadas knightX e knightY horse.
knightX=storX; knightY=storY;
Se houver uma variável
booleana mousePressed padrão para o
estado do botão pressionado, essa variável não existe para o estado do botão pressionado - crie você mesmo:
boolean bool_mouseReleased;
Agora, se o botão do mouse não for pressionado (ou seja,
bool_mouseReleased = true ), pinte a célula com as coordenadas storX e storY
if((bool_mouseReleased ) && (x==storX && y==storY )){ modColor=200; }
Puxando um cavalo em direção ao centro Confira
aquiParte II
Adicione um botão de cancelamento.
Um exemplo que ilustra a operação dos botões está
aqui .
Primeiro, crie listas
IntList de coordenadas de
células pelas quais o cavalo passou; desenhe o botão no canto inferior esquerdo:
Inicializar listas
listOfCoordinatesX = new IntList(); listOfCoordinatesY = new IntList(); listOfCoordinatesX.append(0); listOfCoordinatesY.append(0);
No final do próximo movimento (ao soltar o botão do mouse), adicionamos as coordenadas da célula à lista / pilha:
if(overKnight){ knightX=storX; knightY=storY; listOfCoordinatesX.append(int(knightX)); listOfCoordinatesY.append(int(knightY)); }
Vamos criar uma função booleana
overButton () , que retorna true se o cursor do mouse estiver acima do botão e a função
buttonUpdate () , que atualiza a variável
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; } }
A variável e as listas são exibidas no console no loop principal do programa:
println(boolButton); println(listOfCoordinatesX); println(listOfCoordinatesY);
Confira
aquiParte III
Adicione a função de pular para a célula anterior quando você clicar no botão Cancelar.
Na
função mousePressed () , verificamos se o botão Cancelar foi pressionado. Se o botão for pressionado, exclua os últimos elementos das listas de coordenadas (partes superiores das pilhas), se houver mais de um elemento na lista:
if(boolButton && listOfCoordinatesX.size()>1) { listOfCoordinatesX.pop(); listOfCoordinatesY.pop(); }
Quando você clica no botão Cancelar no método
mouseClick () da classe
Module , salvamos os elementos das listas de coordenadas (partes superiores das pilhas) nas variáveis
storX e
storY :
if(boolButton && mousePressed) { storX= listOfCoordinatesX.get(listOfCoordinatesX.size()-1); storY= listOfCoordinatesY.get(listOfCoordinatesY.size()-1); }
Quando você solta o botão Cancelar, retornamos à coordenada anterior e retornamos à célula a cor original (preta):
if(boolButton && bool_mouseReleased){ if(x==storX && y==storY ) { modColor=0; } }
Na função
mouseReleased () ,
colocamos nosso cavalo na célula correspondente do campo.
if(boolButton) { knightX=storX; knightY=storY; }
Agora, o programa na linguagem de processamento funciona corretamente e a função desfazer no programa no p5.js. não funciona corretamente.
Confira o programa em p5.js
aquiSubstitua as listas InList no programa principal por matrizes int []. Você pode adicionar dinamicamente um elemento à matriz, bem como à lista, usando a função
append () listOfCoordinatesX = append(listOfCoordinatesX,0);
Você não pode recuperar um elemento com pop () de uma matriz. Para fazer isso, existe uma função para reduzir o comprimento da matriz em um
shorten () . Para determinar o comprimento da matriz, em vez de
size (), use
lengthEste programa pode ser adicionado como um script js a uma página html. Para executar o script, você deve usar processing.js
Veja esta página
aqui .
E
aqui está o mesmo, mas com a imagem de um cavalo.
E
aqui o cavalo só pode andar com a letra
G. O restante dos movimentos é proibido.
Link para o github com os textos dos programas apresentados no artigo.