Не могу реализовать метод использования клавиатуры и мышки для движения
Пытаюсь создать пазл (пятнашки) на java используя библиотеку processing. Не могу реализовать метод использования клавиатуры и мышки для движения
import processing.core.PApplet;
public class Fifteen extends PApplet {
static final String TITLE_MSG = "Game 15";
static final String MOVES_MSG = "Moves: ";
float sizeOfBoard;
float leftTopX;
float leftTopY;
float cellSize;
float numberCellSize;
float titleX;
float titleY;
float titleSize;
float numOfMoveMsgX;
float numOfMoveMsgY;
float numOfMovesMsgSize;
int nMoves;
int[][] board = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
int rowEmptyCell = 3;
int columnEmptyCell = 3;
public void settings() {
fullScreen();
}
public void setup() {
sizeOfBoard = height / 2f;
leftTopX = width / 2f - sizeOfBoard / 2f;
leftTopY = height / 2f - sizeOfBoard / 2f;
cellSize = sizeOfBoard / 4f;
numberCellSize = cellSize / 1.5f;
textAlign(CENTER, CENTER);
titleSize = numberCellSize * 1.3f;
titleX = width /2f;
titleY = titleSize;
numOfMovesMsgSize = numberCellSize * 0.6f;
numOfMoveMsgX = width - width / 8f;
numOfMoveMsgY = height / 2f;
nMoves = 0;
}
public void draw() {
background(0);
drawTitle();
drawBoard();
drawNumberOfMoves();
}
public void keyReleased() {
switch (keyCode) {
case UP:
moveNumber(-1, 0);
break;
case DOWN:
case RIGHT:
case LEFT:
++nMoves;
break;
}
}
public void mouseReleased() {
for (int row = 0; row < 4; ++row) {
for (int col = 0; col < 4; col++) {
float topLeftCellX = leftTopX + col * cellSize;
float topLeftCellY = leftTopY + row * cellSize;
if (isInRect(topLeftCellX, topLeftCellY, cellSize, cellSize, mouseX, mouseY)) {
System.out.println(board[row][col]);
++nMoves;
}
}
}
}
boolean isInRect (float rectX, float rectY, float w, float h, float x, float y) {
return rectX <= x && x < rectX + w && rectY <= y && y < rectY +h;
}
void drawTitle() {
fill(255f, 255f, 0);
textSize(titleSize);
text(TITLE_MSG, titleX, titleY);
}
void drawNumberOfMoves() {
fill(255f, 255f, 0);
textSize(numOfMovesMsgSize);
text(MOVES_MSG + nMoves, numOfMoveMsgX, numOfMoveMsgY);
}
public void drawBoard() {
for (int row = 0; row < 4; ++row) {
for (int col = 0; col < 4; col++) {
stroke(100);
strokeWeight(3);
fill(0, 0, 255);
rect(leftTopX + col * cellSize, leftTopY + row * cellSize, cellSize, cellSize);
if (board [row][col] != 16) {
fill(255f, 255f, 0);
textSize(numberCellSize);
text(board[row][col], leftTopX + col * cellSize + cellSize / 2f, leftTopY + row * cellSize + cellSize / 3f);
}
}
}
}
void moveNumber (int dr, int dc) {
int newRow = rowEmptyCell + dr;
int newCol = columnEmptyCell + dc;
int temp = board[newRow][newCol];
board[newRow][newCol] = 16;
board [rowEmptyCell][columnEmptyCell] = temp;
rowEmptyCell = newRow;
columnEmptyCell = newCol;
++nMoves;
}
public static void main(String[] args) {
PApplet.main("Fifteen");
}
}