Редактирование: Whtmlets/js2020/Jakhangirov/index.html
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 12: | Строка 12: | ||
==Код программы== | ==Код программы== | ||
<div class="mw-collapsible mw-collapsed"> | <div class="mw-collapsible mw-collapsed"> | ||
− | '''Код программы на языке JavaScript:''' <div class="mw-collapsible-content"> | + | '''Код программы scratch на языке JavaScript:''' <div class="mw-collapsible-content"> |
<syntaxhighlight lang="javascript" line start="1" enclose="div"> | <syntaxhighlight lang="javascript" line start="1" enclose="div"> | ||
− | + | let cols, rows; | |
− | + | let w = 20; | |
+ | let grid = []; | ||
+ | let current; | ||
+ | let stack = []; | ||
− | + | function setup() { | |
− | + | createCanvas(600, 600); | |
+ | cols = floor(width / w); | ||
+ | rows = floor(height / w); | ||
− | + | for (let j = 0; j < rows; j++) { | |
− | + | for (let i = 0; i < cols; i++) { | |
+ | var cell = new Cell(i, j); | ||
+ | grid.push(cell); | ||
+ | } | ||
+ | } | ||
− | + | current = grid[0]; | |
+ | } | ||
− | let | + | function draw() { |
+ | background(51); | ||
+ | for (let i = 0; i < grid.length; i++) { | ||
+ | grid[i].show(); | ||
+ | } | ||
− | + | current.visited = true; | |
− | + | current.highlight(); | |
− | + | // STEP 1 | |
− | + | let next = current.checkNeighbors(); | |
+ | if (next) { | ||
+ | next.visited = true; | ||
− | + | // STEP 2 | |
− | + | stack.push(current); | |
− | |||
− | |||
− | |||
− | + | // STEP 3 | |
+ | removeWalls(current, next); | ||
− | + | // STEP 4 | |
− | + | current = next; | |
− | + | } else if (stack.length > 0) { | |
− | + | current = stack.pop(); | |
− | + | } | |
− | else if( | ||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | function | + | function index(i, j) { |
− | + | if (i < 0 || j < 0 || i > cols - 1 || j > rows - 1) { | |
− | + | return -1; | |
− | |||
} | } | ||
+ | return i + j * cols; | ||
} | } | ||
− | function | + | function removeWalls(a, b) { |
− | + | let x = a.i - b.i; | |
− | + | if (x === 1) { | |
− | + | a.walls[3] = false; | |
− | + | b.walls[1] = false; | |
− | + | } else if (x === -1) { | |
− | + | a.walls[1] = false; | |
− | + | b.walls[3] = false; | |
+ | } | ||
+ | let y = a.j - b.j; | ||
+ | if (y === 1) { | ||
+ | a.walls[0] = false; | ||
+ | b.walls[2] = false; | ||
+ | } else if (y === -1) { | ||
+ | a.walls[2] = false; | ||
+ | b.walls[0] = false; | ||
} | } | ||
+ | } | ||
− | + | </syntaxhighlight> | |
− | + | </div> | |
− | |||
− | + | '''Код программы sell на языке JavaScript:''' <div class="mw-collapsible-content"> | |
− | + | <syntaxhighlight lang="javascript" line start="1" enclose="div"> | |
+ | function Cell(i, j) { | ||
+ | this.i = i; | ||
+ | this.j = j; | ||
+ | this.walls = [true, true, true, true]; | ||
+ | this.visited = false; | ||
− | + | this.checkNeighbors = function() { | |
− | + | let neighbors = []; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | let top = grid[index(i, j - 1)]; | |
− | + | let right = grid[index(i + 1, j)]; | |
− | + | let bottom = grid[index(i, j + 1)]; | |
+ | let left = grid[index(i - 1, j)]; | ||
− | + | if (top && !top.visited) { | |
− | + | neighbors.push(top); | |
− | + | } | |
− | + | if (right && !right.visited) { | |
+ | neighbors.push(right); | ||
+ | } | ||
+ | if (bottom && !bottom.visited) { | ||
+ | neighbors.push(bottom); | ||
+ | } | ||
+ | if (left && !left.visited) { | ||
+ | neighbors.push(left); | ||
+ | } | ||
− | + | if (neighbors.length > 0) { | |
− | x | + | let r = floor(random(0, neighbors.length)); |
− | y | + | return neighbors[r]; |
+ | } else { | ||
+ | return undefined; | ||
+ | } | ||
+ | }; | ||
+ | this.highlight = function() { | ||
+ | let x = this.i * w; | ||
+ | let y = this.j * w; | ||
+ | noStroke(); | ||
+ | fill(0, 0, 255, 100); | ||
+ | rect(x, y, w, w); | ||
}; | }; | ||
− | + | this.show = function() { | |
+ | let x = this.i * w; | ||
+ | let y = this.j * w; | ||
+ | stroke(255); | ||
+ | if (this.walls[0]) { | ||
+ | line(x, y, x + w, y); | ||
+ | } | ||
+ | if (this.walls[1]) { | ||
+ | line(x + w, y, x + w, y + w); | ||
+ | } | ||
+ | if (this.walls[2]) { | ||
+ | line(x + w, y + w, x, y + w); | ||
+ | } | ||
+ | if (this.walls[3]) { | ||
+ | line(x, y + w, x, y); | ||
+ | } | ||
− | + | if (this.visited) { | |
+ | noStroke(); | ||
+ | fill(255, 0, 255, 100); | ||
+ | rect(x, y, w, w); | ||
+ | } | ||
+ | }; | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
</div> | </div> |