В общем при большом желании можно ещё писать и писать. Однако, дело в том, что ничего принципиально нового мы при этом не пройдём, с теми знаниями, что мы уже прошли всё это и так можно сделать. Возможно стоит только сделать ряд опций, посмотрим.
Сегодня впервые я решил не приводить весь код программы, так как изменения коснулись только функции initTable. Вот во что она превратилась:
>var mines = new minesClass(10, 10, 10);
> function checkCell(i, j)
> {var tbl = document.getElementById(«tbl»);
> var cell = tbl.rows[i].cells[j];
> var s = mines.checkCell(i, j);
> cell.innerHTML = s;
> if (s == "*")
> cell.bgColor = 'red';}
> function initTable()
> {var tbl = document.getElementById(«tbl»);
> for (var i = 0; i < mines.rowCount; i++)
> {var row = tbl.insertRow(i);
> for(var j = 0; j < mines.colCount; j++)
> {var cell = row.insertCell(j);
> cell.innerHTML = '?';
> function SetCellClick(i, j)
> {cell.onclick= function() {checkCell(i, j)};};
> SetCellClick(i, j);}}}
Давайте по порядку. Строчку «var mines = new minesClass(10, 10, 10);" я перенёс наверх, чтобы переменная mines стала доступна из других функций (напомню, что переменная, объявленная внутри функции доступна только внутри этой функции, а «внешние» переменные доступны также в других функциях). Нам потребуется использовать эту переменную в функции checkCell, которую мы выделили из функции initTable.
По сути, в функции checkCell мы получаем из таблицы ячейку с i-ой строкой и j-ым столбцом и присваиваем ей текст, соответствующий количеству бомб рядом (раньше мы это делали непосредственно при инициализации таблицы). Для получения ссылки на ячейку, мы получаем ссылку на таблицу с помощью метода getElementById заранее предопределённой переменной document. Далее мы получаем ссылку на нужную строку, обращаясь к полю rows таблицы (это массив, поэтому после имени поля в квадратных скобках указываем индекс) и сразу же обращаемся к полю cells строки (это тоже массив) для получения искомой ссылки на ячейку.
Последующие строки функции checkCell мы перенесли из функции initTable без изменений.
Ну и последнее о чём осталось рассказать — функция initTable. Несколько строчек мы оттуда унесли и появилась, несколько добавили:
> cell.innerHTML = '?';
> function SetCellClick(i, j)
> {cell.onclick= function() {checkCell(i, j)};};
> SetCellClick(i, j);
С первой строкой, думаю, проблем не будет, а вот дальше придётся применить один интересный приём под названием замыкание. Этот метод нашёл широкое применение в JavaScript, не знаю используется–ли он в других языках, не сталкивался, а тут без него ряд задач сделать крайне сложно.
Так вот, зачем же мы пишем так:
> function SetCellClick(i, j)
> {cell.onclick= function() {checkCell(i, j)};};