/
memoryspeak
/
UlamCodeWeb
Обзор
Документация
Войти
/
memoryspeak
/
UlamCodeWeb
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
js/Map.js
240 строк
8 KB
memoryspeak
add 46 mathematics
18 фев 2026, 20:35
18 фев 2026, 20:35
fb70e80
Код
Авторство
О чём код?
import Cell from "./elements/Cell.js"; import Images from "./elements/Images.js"; export default class Map { constructor(app) { this.app = app; const savedData = this.app.database.getAll(); this.cells = savedData && savedData.cells ? savedData.cells : []; this.nextMaxValue = savedData && savedData.mapNextMaxValue ? savedData.mapNextMaxValue : this.app.database.MAP_NEXT_MAX_VALUE; this.regenerate(); this.dx = 0; this.dy = 0; this.initLevelImages(); } initLevelImages() { this.levelImages = { ulam: new Image(), tao: new Image(), perelman: new Image(), rassel: new Image(), gedel: new Image(), gilbert: new Image(), kolmogorov: new Image(), kovalevskaya: new Image(), riman: new Image(), lobachevski: new Image(), ramanujan: new Image(), ferma: new Image(), dekart: new Image(), newton: new Image(), gauss: new Image(), euler: new Image(), arhimed: new Image(), pifagor: new Image(), neiman: new Image(), matiyasevich: new Image(), puankare: new Image(), neter: new Image(), einstein: new Image(), erdesh: new Image(), hardi: new Image(), kantor: new Image(), klein: new Image(), chebishev: new Image(), galua: new Image(), gamilton: new Image(), dirihle: new Image(), koshi: new Image(), bernulli: new Image(), lagrange: new Image(), leibnic: new Image(), paskal: new Image(), mersenn: new Image(), viet: new Image(), fibonacci: new Image(), alhorezmi: new Image(), hayam: new Image(), diofant: new Image(), gipatia: new Image(), eratosfen: new Image(), evklid: new Image(), fales: new Image() }; this.levelImages.ulam.src = Images.ulamRoundBase64; this.levelImages.tao.src = Images.taoRoundBase64; this.levelImages.perelman.src = Images.perelmanRoundBase64; this.levelImages.rassel.src = Images.rasselRoundBase64; this.levelImages.gedel.src = Images.gedelRoundBase64; this.levelImages.gilbert.src = Images.gilbertRoundBase64; this.levelImages.kolmogorov.src = Images.kolmogorovRoundBase64; this.levelImages.kovalevskaya.src = Images.kovalevskayaRoundBase64; this.levelImages.riman.src = Images.rimanRoundBase64; this.levelImages.lobachevski.src = Images.lobachevskiRoundBase64; this.levelImages.ramanujan.src = Images.ramanujanRoundBase64; this.levelImages.ferma.src = Images.fermaRoundBase64; this.levelImages.dekart.src = Images.dekartRoundBase64; this.levelImages.newton.src = Images.newtonRoundBase64; this.levelImages.gauss.src = Images.gaussRoundBase64; this.levelImages.euler.src = Images.eulerRoundBase64; this.levelImages.arhimed.src = Images.arhimedRoundBase64; this.levelImages.pifagor.src = Images.pifagorRoundBase64; this.levelImages.neiman.src = Images.neimanRoundBase64; this.levelImages.matiyasevich.src = Images.matiyasevichRoundBase64; this.levelImages.puankare.src = Images.puankareRoundBase64; this.levelImages.neter.src = Images.neterRoundBase64; this.levelImages.einstein.src = Images.einsteinRoundBase64; this.levelImages.erdesh.src = Images.erdeshRoundBase64; this.levelImages.hardi.src = Images.hardiRoundBase64; this.levelImages.kantor.src = Images.kantorRoundBase64; this.levelImages.klein.src = Images.kleinRoundBase64; this.levelImages.chebishev.src = Images.chebishevRoundBase64; this.levelImages.galua.src = Images.galuaRoundBase64; this.levelImages.gamilton.src = Images.gamiltonRoundBase64; this.levelImages.dirihle.src = Images.dirihleRoundBase64; this.levelImages.koshi.src = Images.koshiRoundBase64; this.levelImages.bernulli.src = Images.bernulliRoundBase64; this.levelImages.lagrange.src = Images.lagrangeRoundBase64; this.levelImages.leibnic.src = Images.leibnicRoundBase64; this.levelImages.paskal.src = Images.paskalRoundBase64; this.levelImages.mersenn.src = Images.mersennRoundBase64; this.levelImages.viet.src = Images.vietRoundBase64; this.levelImages.fibonacci.src = Images.fibonacciRoundBase64; this.levelImages.alhorezmi.src = Images.alhorezmiRoundBase64; this.levelImages.hayam.src = Images.hayamRoundBase64; this.levelImages.diofant.src = Images.diofantRoundBase64; this.levelImages.gipatia.src = Images.gipatiaRoundBase64; this.levelImages.eratosfen.src = Images.eratosfenRoundBase64; this.levelImages.evklid.src = Images.evklidRoundBase64; this.levelImages.fales.src = Images.falesRoundBase64; } update(correction) { this.updateAllCells(correction); this.updateWheel(); } updateAllCells(correction) { for (let i = 0; i < this.cells.length; i++) { const cell = this.cells[i]; cell.update(correction); } } updateWheel() { if (this.app.modal.isActive) return; if (this.app.input.isWheelShiftUp()) { this.onWheelShiftUp(); } else if (this.app.input.isWheelUp()) this.onWheelUp(); if (this.app.input.isWheelShiftDown()) { this.onWheelShiftDown(); } else if (this.app.input.isWheelDown()) this.onWheelDown(); } draw() { for (let i = 0; i < this.cells.length; i++) { const cell = this.cells[i]; cell.draw(); } } regenerate() { const newCells = []; let x = 0, y = 0; const dx = [1, 0, -1, 0]; const dy = [0, -1, 0, 1]; let dir = 0; let stepCount = 0; let segmentLength = 1; for (let i = 0; i < this.app.database.MAP_NEXT_MAX_VALUE; i++) { const existingCell = this.cells[i]; const intValue = existingCell ? existingCell.intValue : this.cells.length === 0 ? i + 1 : this.nextMaxValue; const fillColor = existingCell ? existingCell.fillColor : "black"; const cell = new Cell(this, i, intValue, x, y, dir); cell.fillColor = fillColor; newCells.push(cell); x += dx[dir]; y += dy[dir]; stepCount++; if (stepCount === segmentLength) { stepCount = 0; dir = (dir + 1) % 4; if (dir % 2 === 0) segmentLength++; } } this.cells = [...newCells]; this.app.database.save( this.app.score.value, this.app.score.holes, this.cells, this.nextMaxValue, ); } onWheelUp() { this.dy += 0.44 * this.app.layer.cellSize; } onWheelDown() { this.dy -= 0.44 * this.app.layer.cellSize; } onWheelShiftUp() { this.dx += 0.44 * this.app.layer.cellSize; } onWheelShiftDown() { this.dx -= 0.44 * this.app.layer.cellSize; } startHelper() { this.app.score.decrementHoles(); let pairs = []; for (let i = 0; i < this.cells.length; i++) { for (let j = 0; j < this.cells.length; j++) { if (i === j) continue; const cell1 = this.cells[i]; if (cell1.helper === true) continue; const cell2 = this.cells[j]; if (cell2.helper === true) continue; if (!cell1.cellMayBeSelected(cell2)) continue; const gcdValue = this.gcd(cell1.intValue, cell2.intValue); if (gcdValue === 1) continue; pairs.push([i, j]); } } const randomPair = Math.floor(Math.pow(10, 14) * Math.random() * Math.random()) % (pairs.length - 1); if (pairs.length !== 0 && randomPair >= 0) { this.cells[pairs[randomPair][0]].helper = true; this.cells[pairs[randomPair][1]].helper = true; } else { this.app.score.incrementHoles(); this.app.modal.show("newgame"); } } gcd(a, b) { if (b === 0) return Math.abs(a); return this.gcd(b, a % b); } }