Обнаружение столкновения двух прямоугольников, заблокированных сеткой Не работает

Если вы используете Babel , то поддержка unicode уже доступна.

Я также выпустил плагин, который преобразует ваш исходный код, чтобы вы могли пишите регулярные выражения типа /^\p{L}+$/. Затем они преобразуются во что-то, что понимают браузеры.

Вот страница проекта плагина: https://github.com/danielberndt/babel-plugin-utf-8-regex

0
задан Charlie Wallace 31 March 2019 в 06:09
поделиться

1 ответ

Чтобы сделать ваш код более похожим на игру 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>

Для завершения игры вам необходимо расширить код на:

  • Ручка транспортные средства, длина которых превышает один квадрат
  • Дайте пользователю указание того, каким образом движется транспортное средство (влево / вправо или вверх / вниз)
  • Укажите выходной квадрат, чтобы основной автомобиль мог выехать сетки
0
ответ дан Charlie Wallace 31 March 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: