Если вы используете Babel , то поддержка unicode уже доступна.
Я также выпустил плагин, который преобразует ваш исходный код, чтобы вы могли пишите регулярные выражения типа /^\p{L}+$/
. Затем они преобразуются во что-то, что понимают браузеры.
Вот страница проекта плагина: https://github.com/danielberndt/babel-plugin-utf-8-regex
Чтобы сделать ваш код более похожим на игру RushHour, мы можем инкапсулировать некоторые правила игры в объект Vehicle. Транспортное средство может отслеживать, где оно находится в сетке и его собственное выбранное состояние. Это позволяет нам иметь меньше массивов и в целом упрощает представление об игре.
Этот код не является полноценной игрой RushHour, но он приближает вас к решению.
var rows = 6
var columns = 6
var vehicles = [];
var selectedVehicle;
var vehicleIds = 0;
var vehicleSize;
var Vehicle = function( row, col, direction){
this.row = row;
this.col = col;
this.vehicleId = vehicleIds++;
this.selectedState = false;
this.direction = direction;
this.xPos = col * vehicleSize;
this.yPos = row * vehicleSize;
};
function setup() {
createCanvas(500, 500);
vehicleSize = width/columns;
vehicles.push(new Vehicle(3,3, "horz"));
vehicles.push(new Vehicle(4,3, "vert"));
}
function draw() {
background(0);
for (var x = 0; x < width; x += width / columns) {
for (var y = 0; y < height; y += height / rows) {
stroke(255);
strokeWeight(1);
line(x, 0, x, height);
line(0, y, width, y);
}
for (i=0; i < vehicles.length; i++){
let vehicle = vehicles[i];
if(vehicle.selectedState){
fill(255,0,0)
}else{
fill(255)
}
rect(vehicle.col * vehicleSize, vehicle.row * vehicleSize, vehicleSize, vehicleSize)
}
}
}
function mousePressed(){
for (i=0; i < vehicles.length; i++){
let vehicle = vehicles[i];
x = vehicle.xPos;
y = vehicle.yPos;
w = vehicleSize;
h = vehicleSize;
vehicle.selectedState = false;
if (mouseX > x && mouseX < x + w && mouseY > y && mouseY < y + h){
selectedVehicle = vehicle;
selectedVehicle.selectedState = true;
}
}
}
function keyPressed() {
if (keyCode === LEFT_ARROW) {
if (canMoveLeft(selectedVehicle)){
selectedVehicle.col--;
selectedVehicle.xPos -= vehicleSize;
}
}
if (keyCode === RIGHT_ARROW) {
if (canMoveRight(selectedVehicle)){
selectedVehicle.col++;
selectedVehicle.xPos += vehicleSize;
}
}
if (keyCode === UP_ARROW) {
if (canMoveUp(selectedVehicle)){
selectedVehicle.row--;
selectedVehicle.yPos -= vehicleSize;
}
}
if (keyCode === DOWN_ARROW) {
if (canMoveDown(selectedVehicle)){
selectedVehicle.row++;
selectedVehicle.yPos += vehicleSize;
}
}
}
function canMoveLeft(vehicle){
if (vehicle.col > 0 && vehicle.direction === "horz"){
for (let i = 0; i < vehicles.length; i++){
let otherVehicle = vehicles[i];
if (otherVehicle.row === vehicle.row && otherVehicle.col === vehicle.col - 1){
return false;
}
}
} else {
return false;
}
return true;
}
function canMoveRight(vehicle){
if (vehicle.col < columns - 1 && vehicle.direction === "horz"){
for (let i = 0; i < vehicles.length; i++){
let otherVehicle = vehicles[i];
if (otherVehicle.row === vehicle.row && otherVehicle.col === vehicle.col + 1){
return false;
}
}
} else {
return false;
}
return true;
}
function canMoveDown(vehicle){
if (vehicle.row < rows - 1 && vehicle.direction === "vert"){
for (let i = 0; i < vehicles.length; i++){
let otherVehicle = vehicles[i];
if (otherVehicle.col === vehicle.col && otherVehicle.row === vehicle.row + 1){
return false;
}
}
} else {
return false;
}
return true;
}
function canMoveUp(vehicle){
if (vehicle.row > 0 && vehicle.direction === "vert"){
for (let i = 0; i < vehicles.length; i++){
let otherVehicle = vehicles[i];
if (otherVehicle.col === vehicle.col && otherVehicle.row === vehicle.row - 1){
return false;
}
}
} else {
return false;
}
return true;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/p5.min.js"></script>
Для завершения игры вам необходимо расширить код на: