Проблема с вызовом метода

193
30 июня 2018, 19:50

Не работают два метода .fill_field() и .draw_field()

function cell_state() {
    this.is_mine = false;
    this.is_open = false;
    this.mine_around = 0;
  }
var game = {
  width: 10,
  height: 10,
  mine_count: 10,
  open_count: 0,
  field: [],
  fill_field: function () {
    for (var x = 0; x < game.width; x++) {
      for (var y = 0; y < game.height; y++) {
        game.field.push(new cell_state());
       }
    }
    for (var i = 0; i < game.mine_count; i++) {     
      var xx = Math.floor(Math.random * game.width);
      var yy = Math.floor(Math.random * game.height);
      if (!game.field[xx][yy].is_mine) {
        game.field[xx][yy].is_mine = true;
      } else {
        i--;
      }
    }
  },
  draw_field: function() {
  $("body").append("<table>");
  for (var x = 0; x < game.width; x++) {
   $("table").append("<tr>");
   for (var y = 0; y < game.height; y++) {
  $("tr").append("<td>");
}
}
}
};
game.fill_field();
game.draw_field();
Answer 1

function cell_state() { 
  this.is_mine = false; 
  this.is_open = false; 
  this.mine_around = 0; 
} 
var game = { 
  width: 10, 
  height: 10, 
  mine_count: 10, 
  open_count: 0, 
  field: [], 
  fill_field() { 
    for (var x = 0; x < game.width; x++) { 
      // 1: У вас дальше в коде идёт обращение таким образом: game.field[xx][yy] 
      // А field вы делаете одномерным массивом. Тут надо создавать массив-столбец: 
      var row = []; 
      game.field.push(row); 
      for (var y = 0; y < game.height; y++) { 
        // И клетки класть в него, а не прямо в field 
        row.push(new cell_state()); 
      } 
    } 
 
    for (var i = 0; i < game.mine_count; i++) {      
     // 2: Math.random это функция (скобки забыли) 
      var xx = Math.floor(Math.random() * game.width); 
      var yy = Math.floor(Math.random() * game.height); 
      if (!game.field[xx][yy].is_mine) { 
        game.field[xx][yy].is_mine = true; 
      } else { 
        i--; 
      } 
    } 
  }, 
  draw_field: function() { 
    $("body").append("<table>"); 
    for (var x = 0; x < game.width; x++) { 
     $("table").append("<tr>"); 
     for (var y = 0; y < game.height; y++) { 
        // 3: Какую именно строку таблицы вы тут получаете? 
        // $("tr").append("<td>");  
        // Вам нужна последняя: 
        $("tr:last-child").append(`<td class="${game.field[x][y].is_mine?'ismine':''}">`);  
      } 
    } 
  } 
}; 
game.fill_field(); 
game.draw_field();
td{ 
  width: 10px; 
  height: 10px; 
  border: 1px solid black; 
} 
td.ismine{ 
 background: black; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

READ ALSO
Перевести пример кода c# на js

Перевести пример кода c# на js

Стремлюсь узнать как этот же код на c# написать на jsЯ закомментил все что должно быть переведено в код на js

194
Как сохранить cookie при нажатие кнопки &ldquo;Согласен&rdquo;?

Как сохранить cookie при нажатие кнопки “Согласен”?

Стоит задача: когда пользователь заходит на страницу, то выпадает меню сверху с запросом на соглашение хранения cookieКак это сделать?

187
Three.js метаморфозы

Three.js метаморфозы

Наткнулся на такую штуку https://youtube/azWR6mpBs64

136
Ошибка - TypeError: data.filter is not a function, телеграм бот

Ошибка - TypeError: data.filter is not a function, телеграм бот

Вообщем, написал бота, но он при нажатии кнопки выдает ошибку:

239