JavaScript. Учебник начального уровня - [6]
Каким образом наш массив mines будет соотноситься с нашей таблицей? Да всё очень просто. Для первой строки первого столбца, то есть элемента [0, 0] (будем нумеровать с нуля, в программировании так почти везде) будет соответствовать нулевой элемент массива [0]. Для первой строки второго столбца [0, 1] — первый элемент массива [1]. Для [0, 9] — [9]. Для первой строки закончились столбцы — не беда, теперь возьмём вторую строку первый столбец [1, 0], этой ячейке будет соответствовать десятый элемент массива mines, то есть, в нашей терминологии, [10]. Так будем идти дальше, пока не дойдем до последней (десятой) строки и последнего (десятого) столбца [9, 9], им будет соответствовать элемент [99].
Всё это на самом деле можно записать куда короче: [i, j] соответствует [i * colCount + j]. Можете проверить на листе бумаги.
Хорошо, мы получили наш массив с бомбами. По сути это основное функциональное отличие от того, что мы делали в прошлой статье. Далее мы видим уже знакомый вложенный цикл, мы получаем переменную ячейки, а дальше, вместо того, чтобы положить туда строку «cell» с индексами ячейки в таблице, мы пишем сразу 4 строки.
> if (mines[i * rowCount + j] == 1)
> cell.innerHTML = '*'
> else
> cell.innerHTML = '.';
Тут мы снова сталкнёмся с новой конструкцией. Оператор if или условный оператор. Что это такое? Давайте опять попробуем перевести фразу на русский: «если (mines[i * rowCount + j] == 1), то выполнить cell.innerHTML = '*', а иначе выполнить cell.innerHTML = '.'". Другими словами, если выполняется условие после if (в JavaScript обязательно заключено в круглые скобки), выполняется блок (в нашем случае одна строка, так как нет фигурных скобок обрамляющих блок) сразу после оператора if, если же условие не выполняется (не обязательно, блока else может и не быть), выполняется блок сразу после оператора else. Если за блоком, идущем сразу после блока if нет оператора else, последующий код выполняется всегда, независимо от выполнения или невыполнения условия.
Что же значит выполнение условия, давайте внимательней разберём выражение «mines[i * rowCount + j] == 1». «mines[i * rowCount + j]» — это, как вы вероятно уже догадались переменная, которая соответствует текущей ячейке (строка i, столбец j) в нашем массиве бомб. Как вы помните, эта переменная равна 1, если бомба в соответствующей ячейке есть. Именно равенство переменной единице мы и проверяем. Оператор точного сравнения переменных в JavaScript — "==".
Давайте немного потренируемся составлять такие условия. (i > 2) — значение переменной i больше, чем 2. (i != 3) — значение переменной i не равно 3. (i == j) — значение переменной i равно значению переменной j.
Ну и чтобы формально закончить рассмотрение этого кусочка кода. Получается, что если у нас есть бомба в ячейке — мы делаем текст ячейки равным строке '*', если же бомбы нет — строке '.'.
Теперь перейдём к рассмотрению следующей большой функции в нашем скрипте - fillMines.
> function fillMines(rowCount, colCount, minesCount)
> {
> var res = new Array(rowCount * colCount);
> var mines = minesCount;
> while (mines > 0)
> {
> var n = intRand(rowCount * colCount‑1);
> if (res[n] != 1)
> {
> res[n] = 1;
> mines--;
>}
>}
> return res;
>}
Что же происходит тут. Именно эта функция создаёт нам наш массив с бомбами.
Первой же строчкой создаётся пустой массив, длиной rowCount * colCount. В нём ещё ничего нет, далее мы должны будем его заполнить. Кроме того, мы заводим некую вспомогательную переменную mines, которой присваиваем начальное значение minesCount. Вероятно я её не совсем удачно назвал, будем считать, что она называется как–то вроде «количество бомб, которые ещё нужно распределить». Это куда лучше описывает её назначение.
Далее мы сталкиваемся с новым типом цикла. Это цикл while. Как работает этот цикл? Он выполняет свой блок кода (тело) до тех пор, пока выполняется условие в скобках сразу после слова while. То есть в нашем случае цикл будет выполняться пока ещё есть неразмещённые бомбы. Вообще говоря это довольно опасный цикл, так как его легко сделать бесконечным (в том числе и ошибочно). Например в моём случае функция не проверяет (хотя стоило бы), что бомб меньше чем ячеек в таблице, а ведь если это условие не выполняется, мы никогда не сможем разместить все бомбы так, чтобы в каждой ячейке было не больше одной, а значит никогда не выйдем из этого цикла и наша программа зависнет.
Само тело цикла довольно простое, переменной n мы присваиваем результат функции intRand c параметром числа ячеек таблицы — 1 (максимальный индекс в нашем массиве бомб). Эта функция, как она работает будет ниже, возвращает случайное целое число от 0 до значения переданного в качестве параметра включительно.
Далее мы проверяем, есть–ли уже бомба в элементе с индексом n в массиве res. И если её нет, мы её туда добавляем (res[n] = 1) и уменьшаем на единицу количество бомб, которые надо добавить (mines--). Как только все бомбы будут распределены (mines станет равно 0), наш цикл закончится и мы вернём результат (return res). Из незнакомого тут может быть оператор декремента " — ". Он увеличивает значение переменной на единицу, то есть запись mines-- эквивалентна записи mines = mines‑1. И оператор return. Этот оператор возвращает переменную или выражение после себя в качестве результата текущей функции и выходит из неё. То есть если вы вызовете оператор return в середине функции, оставшаяся её часть выполняться уже не будет.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
«Однажды просыпаешься и понимаешь, что все это никуда не годится. Надо что-то менять». Драматург Юлия Тупикина предлагает простое и изящное решение для перемен в вашей жизни – попробуйте написать свою первую пьесу! Почему именно ее? Современный российский театр очень любит новичков, всегда открыт свежим именам и идеям. Вы сможете попробовать свои силы на одном из конкурсов, а там и до больших постановок и хороших гонораров недалеко. И даже если вы не станете великим писателем, процесс написания пьесы благодаря этой книге станет для вас увлекательным путешествием, полным творческих открытий. В книге много практических упражнений, которые можно выполнять одно за одним или выбирать те, что вам больше приглянулись.
Сулимов Клим Тимофеевич, кандидат биологических наук, ведущий научный сотрудник РосНИИ культурного и природного наследия им. Д. С. Лихачева, член научно-координационного совета по отечественным породам собак России. Научный консультант отдела кинологического мониторинга ПАО «Аэрофлот». Материал, подготовленный К. Т. Сулимовым в области общей и прикладной кинологии, представляет собой собственные комментарии к двум альтернативным теориям происхождения домашней собаки, к фрагментам истории отечественного собаководства, реплики и размышления на тему о стандартах пород и практике полевых испытаний охотничьих и служебных собак второй половины XX столетия, о нетрадиционном использовании естественных пород и перспективах выведения новых в настоящем и обозримом будущем. Затронуты проблемы так называемых бесхозных дворняг. Значительная часть книги посвящена критическому рассмотрению породных признаков главных отечественных пород и отродий отечественного разведения, функциональным особенностям основных статей собаки и ее поведению. Может служить пособием для изучения становления пород, их преобразований в условиях отечественной культуры собаководства.
Книга Н. Смелзера «Социология» представляет курс лекций по общей социологии для студентов высших учебных заведений.Достоинство книги в том, что она написана максимально доступным языком и полностью соответствует содержанию курса «Социология», как он отражён в государственном стандарте, а потому данное учебное пособие может быть базовым по этому курсу.Книга Смелзера также предназначена для широкого круга читателей и, в первую очередь, для предпринимателей и руководителей.На русском языке это уже второе издание.
Учебно-методическое пособие предназначено для аудиторной и самостоятельной работы студентов-бакалавров Пензенской ГСХА по дисциплине «культурология». В нем содержатся разделы, посвященные теории, истории мировой и отечественной культуры. В данном издании содержатся необходимые методические и учебные материалы, облегчающие подготовку студента ко всем формам итогового и промежуточного контроля по данной дисциплине.
Конспект лекций, составленный в соответствии с Государственным образовательным стандартом высшего образования, поможет систематизировать полученные ранее знания и успешно сдать экзамен или зачет по дисциплине «Коммерческое право».Издание предназначено для студентов, преподавателей и аспирантов юридических вузов и факультетов.
Данное издание представляет собой конспект лекций по предмету «История мировых религий». В книге изложены основные вопросы данного курса. Конспект лекций станет незаменимым помощником при подготовке к экзамену или зачету, предназначен для студентов высших и средних учебных заведений гуманитарных специальностей.