Попытка набросать игровое поле 6x6 с 2d массивом - PullRequest
0 голосов
/ 09 апреля 2019

Я новичок и пытаюсь закончить свой 1-й год проекта "Реверси-шахматы 6x6" и все еще строю шахматную доску с 2d массивом атм. Я понятия не имею, как использовать изображения в качестве содержимого массива для отображения игрового поля, и я понятия не имею, как использовать функцию щелчка мышью, чтобы позволить пользователю играть.

Я пытался создать 2d-массив, но мне нужно понять, что делать дальше пытался использовать «0» в качестве пробела «W» в качестве белых шахмат и «B» в качестве. черный

       var kboard = new Array (5)
        for ( var i = 0 ;i < 6 ;i++ ){
            kboard[i] = new Array(5)
        }
    kboard[0][0] = "0"; kboard[1][3] = "0"; kboard[3][0] = "0";  kboard[4][3] = "W";
    kboard[0][1] = "0"; kboard[1][4] = "B"; kboard[3][1] = "W";  kboard[4][4] = "B";
    kboard[0][2] = "0"; kboard[1][5] = "0"; kboard[3][2] = "W";  kboard[4][5] = "0";
    kboard[0][3] = "0"; kboard[2][0] = "0"; kboard[3][3] = "W";  kboard[5][0] = "0";
    kboard[0][4] = "0"; kboard[2][1] = "0"; kboard[3][4] = "B";  kboard[5][1] = "0";
    kboard[0][5] = "0"; kboard[2][2] = "0"; kboard[3][5] = "0";  kboard[5][2] = "0";
    kboard[1][0] = "0"; kboard[2][3] = "0"; kboard[4][0] = "0";  kboard[5][3] = "0";
    kboard[1][1] = "0"; kboard[2][4] = "B"; kboard[4][1] = "0";  kboard[5][4] = "W";
    kboard[1][2] = "0"; kboard[2][5] = "0"; kboard[4][2] = "0";  kboard[5][5] = "B";
    for (var i = 0; i < 6; i++){
        for (var j = 0; j < 6; j++){
            document.write(kboard[i][j] + "&emsp;")
        }
        document.write("<br/>");
    }

Вывод только "0" "B" "W" и выводит весь массив, но я не могу использовать никакие изображения вместо этого элемента.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

К сожалению, ваш вопрос слишком широк, но я постараюсь направить вас в правильном направлении.

Вы правы.Двумерный массив - лучший выбор для хранения данных такого типа.Только то, как ты это создаешь, немного громоздко.Вместо бесчисленного массива [position] = value вы можете сделать это следующим образом:

var kBoard = [
  ["0", "0", "0", "0", "0", "0"],
  ["0", "0", "0", "0", "B", "0"],
  ["0", "0", "0", "0", "B", "0"],
  ["0", "W", "W", "W", "B", "0"],
  ["0", "0", "0", "W", "B", "0"],
  ["0", "0", "0", "0", "W", "B"]
];

Чтобы наконец отобразить свою игру на экране, вы можете использовать простые элементы html вместе с таблицей.Я бы порекомендовал использовать этот элемент.Как видно из названия, это своего рода артборд, на который можно рисовать с помощью javascript.Для простоты я буду использовать простые формы вместо картинок.

Это создаст пустой холст.Его размер определяется tileWidth & tileHeight, умноженным на количество элементов внутри массива по горизонтали и вертикали.

var tileWidth = 64;
var tileHeight = 64;

var canvas = document.createElement("canvas");
canvas.width = kBoard[0].length * tileWidth;
canvas.height = kBoard.length * tileHeight;
document.body.appendChild(canvas);
var context = canvas.getContext("2d");

Теперь мы просто зациклим массив kBoard и используем положение элемента внутри массива в качестве нашегокоординаты на экране, умноженные на tileWidth & tileHeight.Кроме того, мы используем значение элемента, чтобы нарисовать черный или белый круг.

for (var a = 0; a < kBoard.length; a++) {
  for (var b = 0; b < kBoard[0].length; b++) {

    if (a % 2 == 0) {
      if (b % 2 == 0) {
        context.fillStyle = "#aaaaaa";
      } else {
        context.fillStyle = "#888888";
      }
    } else {
      if (b % 2 == 1) {
        context.fillStyle = "#aaaaaa";
      } else {
        context.fillStyle = "#888888";
      }
    }
    context.fillRect(b * tileWidth, a * tileHeight, tileWidth, tileHeight);
    switch (kBoard[a][b]) {
      case "W":
        context.fillStyle = "#ffffff";
        context.beginPath();
        context.arc(b * tileWidth + tileWidth / 2, a * tileHeight + tileHeight / 2, 10, 0, Math.PI * 2, true);
        context.closePath();
        context.fill();
        break;
      case "B":
        context.fillStyle = "#000000";
        context.beginPath();
        context.arc(b * tileWidth + tileWidth / 2, a * tileHeight + tileHeight / 2, 10, 0, Math.PI * 2, true);
        context.closePath();
        context.fill();
        break;
    }
  }
}

Вот полный пример:

var kBoard = [
  ["1", "2", "3", "4", "5", "6"],
  ["7", "0", "0", "0", "B", "0"],
  ["0", "0", "0", "0", "B", "0"],
  ["0", "W", "W", "W", "B", "0"],
  ["0", "0", "0", "W", "B", "0"],
  ["0", "0", "0", "0", "W", "B"]
];
var tileWidth = 64;
var tileHeight = 64;

var canvas = document.createElement("canvas");
canvas.width = kBoard[0].length * tileWidth;
canvas.height = kBoard.length * tileHeight;
document.body.appendChild(canvas);
var context = canvas.getContext("2d");

for (var a = 0; a < kBoard.length; a++) {
  for (var b = 0; b < kBoard[0].length; b++) {

    if (a % 2 == 0) {
      if (b % 2 == 0) {
        context.fillStyle = "#aaaaaa";
      } else {
        context.fillStyle = "#888888";
      }
    } else {
      if (b % 2 == 1) {
        context.fillStyle = "#aaaaaa";
      } else {
        context.fillStyle = "#888888";
      }
    }
    context.fillRect(b * tileWidth, a * tileHeight, tileWidth, tileHeight);
    switch (kBoard[a][b]) {
      case "W":
        context.fillStyle = "#ffffff";
        context.beginPath();
        context.arc(b * tileWidth + tileWidth / 2, a * tileHeight + tileHeight / 2, 10, 0, Math.PI * 2, true);
        context.closePath();
        context.fill();
        break;
      case "B":
        context.fillStyle = "#000000";
        context.beginPath();
        context.arc(b * tileWidth + tileWidth / 2, a * tileHeight + tileHeight / 2, 10, 0, Math.PI * 2, true);
        context.closePath();
        context.fill();
        break;
    }
  }
}
0 голосов
/ 10 апреля 2019

Как можно больше придерживаясь исходного кода, я подозреваю, что вы, возможно, захотите сделать, это отобразить изображения:

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Img

Чтобы использовать это, вам понадобятся три ранее существующих файла изображения, по одному для каждого цвета. Давайте назовем их

  • W.png
  • B.png
  • 0.png

Теперь вместо написания текста вашего массива

document.write(kboard[i][j] + "&emsp;")

Вместо этого вы можете написать некоторый HTML-код, который будет отображать изображение:

document.write("<img src='" + kboard[i][j] + ".png' /> &emsp;");

После того, как у вас это получится, я бы посоветовал поискать html tables и document.querySelector, чтобы узнать, как вы можете использовать их, чтобы сделать вашу программу еще лучше.

Дальнейшее чтение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...