File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/noteLaCouleur-ZihiFghT.js.map
{"version":3,"file":"noteLaCouleur-ZihiFghT.js","sources":["../../src/modules/noteLaCouleur.js"],"sourcesContent":["/**\n * Classe NoteLaCouleur (objet Pion)\n * this.plateau est le tableau des couleurs de cases.\n * this.currentPos est {x,y} les coordonnées courantes du pion\n * this.currentOrientation est l'orientation courante du pion\n * this.codeScratch est le programme en code Latex du pion.\n * this.currentIndex est l'index qui parcourt le codeScratch...\n * this.nlc() retourne la couleur de la case sur laquelle est le pion\n * this.tesCoords(x,y) est une méthode qui dit si le point de coordonnées (x,y) est bien dans le plateau de jeu.\n * this.testInstruction(code) est une méthode qui dit si une instruction est valide (ne sort pas) et retourne un tableau\n * this.testSequence([...code]) est une méthode qui retourne true si la séquence d'instructions est valide.\n */\n\nimport { segment } from '../lib/2d/segmentsVecteurs.js'\nimport { texteParPositionEchelle } from '../lib/2d/textes.js'\nimport { ObjetMathalea2D } from './2dGeneralites.js'\nimport { avance, tournerD, tournerG } from './2dLutin.js'\nimport { randint } from './outils.js'\nimport { BoiteBuilder } from '../lib/2d/polygones.js'\n\nclass NoteLaCouleur {\n constructor ({\n x = 15, y = 15, orientation = 90, plateau = [], relatif = true, nx = 16, ny = 12, pas = 30\n }) {\n this.plateauNLC = plateau\n this.currentPos = { x, y }\n this.currentOrientation = orientation\n this.codeScratch = ''\n this.currentIndex = 0\n this.relatif = relatif\n this.pas = pas\n this.nx = nx\n this.ny = ny\n this.nlc = function () {\n return this.plateauNLC[Math.ceil(((this.relatif ? (this.ny - 1) * this.pas >> 1 : (this.ny - 1) * this.pas) - this.currentPos.y) / this.pas)][Math.ceil(((this.relatif ? (this.nx - 1) * this.pas >> 1 : -this.pas >> 1) + this.currentPos.x) / this.pas)]\n }\n this.testCoords = function (x, y) {\n if (x < (this.relatif ? (1 - this.nx) * this.pas >> 1 : this.pas >> 1) || x > (this.relatif ? this.nx * this.pas >> 1 : (this.nx - 0.5) * this.pas) || y < (this.relatif ? (1 - this.ny) * this.pas >> 1 : this.pas >> 1) || y > (this.relatif ? this.ny * this.pas >> 1 : (this.ny - 0.5) * this.pas)) return false\n return true\n }\n /**\n * méthode pour tester une instruction : retourne un tableau dont le premier élément indique si l'instruction est valide.\n * c'est à dire qu'elle n'entraine pas une sortie de plateau.\n * true -> l'instruction maintient le lutin sur le plateau\n * false -> l'instruction le fait sortir du plateau\n * Les autres éléments du tableau sont dans cet ordre :\n * - les positions x et y du pion après l'instruction\n * - son orientation après l'instruction\n * - le code Latex de l'instruction\n */\n this.testInstruction = function (code, lutin) {\n const avancepion = function (d, x, y, s) {\n switch (s) {\n case 0:\n case 360:\n y += d\n break\n case 90:\n case -270:\n x += d\n break\n case 180:\n case -180:\n y -= d\n break\n case 270:\n case -90:\n x -= d\n break\n }\n return [x, y]\n }\n let x = this.currentPos.x\n let y = this.currentPos.y\n let orientation = this.currentOrientation\n let latex\n switch (code) {\n case 'AV20':\n [x, y] = avancepion(20, x, y, orientation)\n latex = '\\\\blockmove{avancer de \\\\ovalnum{20} pas}'\n if (lutin !== undefined) {\n avance(20, lutin)\n }\n break\n case 'AV30':\n [x, y] = avancepion(30, x, y, orientation)\n latex = '\\\\blockmove{avancer de \\\\ovalnum{30} pas}'\n if (lutin !== undefined) {\n avance(30, lutin)\n }\n break\n case 'AV40':\n [x, y] = avancepion(40, x, y, orientation)\n latex = '\\\\blockmove{avancer de \\\\ovalnum{40} pas}'\n if (lutin !== undefined) {\n avance(40, lutin)\n }\n break\n case 'AV60':\n [x, y] = avancepion(60, x, y, orientation)\n latex = '\\\\blockmove{avancer de \\\\ovalnum{60} pas}'\n if (lutin !== undefined) {\n avance(60, lutin)\n }\n break\n case 'AV80':\n [x, y] = avancepion(80, x, y, orientation)\n latex = '\\\\blockmove{avancer de \\\\ovalnum{80} pas}'\n if (lutin !== undefined) {\n avance(80, lutin)\n }\n break\n case 'AV90':\n [x, y] = avancepion(90, x, y, orientation)\n latex = '\\\\blockmove{avancer de \\\\ovalnum{90} pas}'\n if (lutin !== undefined) {\n avance(90, lutin)\n }\n break\n case 'AV100':\n [x, y] = avancepion(100, x, y, orientation)\n latex = '\\\\blockmove{avancer de \\\\ovalnum{100} pas}'\n if (lutin !== undefined) {\n avance(100, lutin)\n }\n break\n case 'AV120':\n [x, y] = avancepion(120, x, y, orientation)\n latex = '\\\\blockmove{avancer de \\\\ovalnum{120} pas}'\n if (lutin !== undefined) {\n avance(120, lutin)\n }\n break\n case 'AV150':\n [x, y] = avancepion(150, x, y, orientation)\n latex = '\\\\blockmove{avancer de \\\\ovalnum{150} pas}'\n if (lutin !== undefined) {\n avance(150, lutin)\n }\n break\n\n case 'TD90':\n if (orientation === 180) orientation = -90\n else orientation += 90\n latex = '\\\\blockmove{tourner \\\\turnright{} de \\\\ovalnum{90} degrés}'\n if (lutin !== undefined) {\n tournerD(90, lutin)\n }\n break\n case 'TG90':\n if (orientation === -90) orientation = 180\n else orientation -= 90\n latex = '\\\\blockmove{tourner \\\\turnleft{} de \\\\ovalnum{90} degrés}'\n if (lutin !== undefined) {\n tournerG(90, lutin)\n }\n break\n case 'TD180':\n case 'TG180':\n if (orientation === 0) orientation = 180\n else if (orientation === -90) orientation = 90\n else if (orientation === 90) orientation = -90\n else orientation = 0\n latex = '\\\\blockmove{tourner \\\\turnright{} de \\\\ovalnum{180} degrés}'\n if (lutin !== undefined) {\n tournerD(180, lutin)\n }\n break\n case 'NLC':\n latex = '\\\\blocklist{Note la couleur}'\n break\n }\n if (this.testCoords(x, y)) {\n return [true, x, y, orientation, latex, lutin]\n } else return [false, this.currentPos.x, this.currentPos.y, this.currentOrientation, latex, lutin]\n }\n\n /**\n * méthode pour tester une séquence : retourne\n *\n * [true,x,y,orientation] si la séquence reste dans le jeu\n * [false,x,y,orientation] en cas de sortie de plateau.\n */\n this.testSequence = function (codes) {\n let sorti = false\n let test\n const pionfantome = noteLaCouleur({\n x: 0,\n y: 0,\n orientation: 0,\n plateau: this.plateauNLC,\n relatif: this.relatif,\n nx: this.nx,\n ny: this.ny,\n pas: this.pas\n })\n pionfantome.currentPos.x = this.currentPos.x\n pionfantome.currentPos.y = this.currentPos.y\n pionfantome.currentOrientation = this.currentOrientation\n for (let i = 0; i < codes.length; i++) {\n test = pionfantome.testInstruction(codes[i])\n if (!test[0]) { // si le lutin est sorti du plateau pendant l'instruction\n sorti = true\n break\n } else {\n pionfantome.currentPos.x = test[1]\n pionfantome.currentPos.y = test[2]\n pionfantome.currentOrientation = test[3]\n }\n }\n // si il est sorti, alors la séquence est false, sinon, elle est true.\n return [!sorti, pionfantome.currentPos.x, pionfantome.currentPos.y, pionfantome.currentOrientation]\n }\n /**\n *\n * @param {number} repetitions\n * @param {string[]} codes la séquence d'instructions à répéter\n * @returns {boolean} true si la boucle n'a à aucun moment fait sortir le lutin du plateau, false sinon\n */\n this.testBoucle = function (repetitions, codes) {\n let sortiboucle = false\n let test\n const pionfantome = noteLaCouleur({\n x: 0,\n y: 0,\n orientation: 0,\n plateau: this.plateauNLC,\n relatif: this.relatif,\n nx: this.nx,\n ny: this.ny,\n pas: this.pas\n })\n pionfantome.currentPos.x = this.currentPos.x\n pionfantome.currentPos.y = this.currentPos.y\n pionfantome.currentOrientation = this.currentOrientation\n for (let i = 0; i < repetitions; i++) {\n test = pionfantome.testSequence(codes)\n if (!test[0]) { // si le lutin est sorti pendant la séquence alors la boucle n'est pas valide.\n sortiboucle = true\n break\n } else { // il n'est pas sorti, on continue le test à partir de la nouvelle position\n pionfantome.currentPos.x = test[1]\n pionfantome.currentPos.y = test[2]\n pionfantome.currentOrientation = test[3]\n }\n }\n // Si il est sorti, alors on retourne false en premier argument, sinon, on retourne true.\n return [!sortiboucle, pionfantome.currentPos.x, pionfantome.currentPos.y, pionfantome.currentOrientation]\n }\n }\n}\n\nexport function noteLaCouleur ({\n x = 15,\n y = 15,\n orientation = 90,\n plateau = [],\n relatif = true,\n nx = 16,\n ny = 12,\n pas = 30\n} = {}) {\n return new NoteLaCouleur({ x, y, orientation, relatif, plateau, nx, ny, pas })\n}\n\nclass Plateau2dNLC {\n constructor ({\n type = 1, melange = false, scale = 0.5, relatif = true, pas = 30, nx = 16, ny = 12,\n plateau = [\n ['Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc'],\n ['Blanc', 'Noir', 'Jaune', 'Bleu', 'Vert', 'Orange', 'Rouge', 'Orange', 'Noir', 'Jaune', 'Gris', 'Vert', 'Rose', 'Noir', 'Jaune', 'Blanc'],\n ['Blanc', 'Rouge', 'Bleu', 'Orange', 'Jaune', 'Rose', 'Gris', 'Jaune', 'Rose', 'Gris', 'Jaune', 'Bleu', 'Rouge', 'Gris', 'Rouge', 'Blanc'],\n ['Blanc', 'Rose', 'Vert', 'Gris', 'Rouge', 'Noir', 'Bleu', 'Vert', 'Noir', 'Vert', 'Bleu', 'Rose', 'Gris', 'Vert', 'Orange', 'Blanc'],\n ['Blanc', 'Vert', 'Bleu', 'Rose', 'Vert', 'Bleu', 'Orange', 'Gris', 'Rouge', 'Orange', 'Jaune', 'Gris', 'Rouge', 'Rose', 'Bleu', 'Blanc'],\n ['Blanc', 'Noir', 'Orange', 'Rouge', 'Orange', 'Jaune', 'Rouge', 'Blanc', 'Blanc', 'Noir', 'Gris', 'Orange', 'Noir', 'Jaune', 'Rose', 'Blanc'],\n ['Blanc', 'Rose', 'Gris', 'Noir', 'Bleu', 'Vert', 'Bleu', 'Blanc', 'Blanc', 'Rouge', 'Bleu', 'Gris', 'Vert', 'Rouge', 'Noir', 'Blanc'],\n ['Blanc', 'Noir', 'Rouge', 'Rose', 'Vert', 'Orange', 'Rose', 'Noir', 'Orange', 'Vert', 'Jaune', 'Rose', 'Noir', 'Rose', 'Vert', 'Blanc'],\n ['Blanc', 'Orange', 'Gris', 'Rouge', 'Jaune', 'Noir', 'Vert', 'Rouge', 'Rose', 'Noir', 'Bleu', 'Vert', 'Jaune', 'Orange', 'Gris', 'Blanc'],\n ['Blanc', 'Bleu', 'Jaune', 'Orange', 'Vert', 'Gris', 'Jaune', 'Gris', 'Orange', 'Gris', 'Rose', 'Bleu', 'Rouge', 'Bleu', 'Orange', 'Blanc'],\n ['Blanc', 'Rose', 'Bleu', 'Jaune', 'Rose', 'Orange', 'Rouge', 'Bleu', 'Noir', 'Jaune', 'Gris', 'Vert', 'Jaune', 'Noir', 'Rouge', 'Blanc'],\n ['Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc', 'Blanc']\n ]\n\n } = {}) {\n ObjetMathalea2D.call(this, {})\n this.relatif = relatif\n this.pas = pas\n this.type = 1\n this.scale = scale\n this.nx = nx\n this.ny = ny\n this.plateauNLC = plateau\n if (melange) {\n for (let i = 0, x1, x2, y1, y2, kase; i < 20; i++) {\n y1 = randint(1, this.ny - 2)\n y2 = randint(1, this.ny - 2, y1)\n x1 = randint(1, this.nx - 2)\n x2 = randint(1, this.nx - 2)\n kase = this.plateauNLC[y1][x1] // case est un mot réservé\n this.plateauNLC[y1][x1] = this.plateauNLC[y2][x2]\n this.plateauNLC[y2][x2] = kase\n }\n }\n this.traducColor = function (couleur) {\n switch (couleur) {\n case 'Blanc':\n return 'white'\n case 'Bleu':\n return 'DodgerBlue'\n case 'Noir':\n return 'black'\n case 'Rouge':\n return 'red'\n case 'Jaune':\n return 'yellow'\n case 'Rose':\n return 'HotPink'\n case 'Vert':\n return 'green'\n case 'Orange':\n return 'DarkOrange'\n case 'Gris':\n return 'gray'\n }\n }\n this.traducNum = function (couleur) {\n switch (couleur) {\n case 'Blanc':\n return '0'\n case 'Bleu':\n return '3'\n case 'Noir':\n return '1'\n case 'Rouge':\n return '2'\n case 'Jaune':\n return '6'\n case 'Rose':\n return '5'\n case 'Vert':\n return '7'\n case 'Orange':\n return '4'\n case 'Gris':\n return '8'\n }\n }\n\n const plateau2d = []\n let b\n for (let X = 0; X < this.nx; X++) {\n for (let Y = 0; Y < this.ny; Y++) {\n switch (type) {\n case 1:// plateau couleur classique\n b = new BoiteBuilder({\n xMin: X * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n yMin: Y * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0),\n xMax: (X + 1) * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n yMax: (Y + 1) * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0)\n }).addColor({\n color: 'black',\n opacity: 0.8,\n backgroudOpacity: 0.7,\n colorBackground: this.traducColor(this.plateauNLC[ny - 1 - Y][X])\n }).render()\n break\n case 2: // plateau couleur avec numéros\n b = new BoiteBuilder({\n xMin: X * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n yMin: Y * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0),\n xMax: (X + 1) * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n yMax: (Y + 1) * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0)\n })\n .addColor({\n color: 'black',\n opacity: 0.8,\n backgroudOpacity: 0.7,\n colorBackground: this.traducColor(this.plateauNLC[ny - 1 - Y][X])\n })\n .addTextIn({\n size: 1.2,\n textIn: this.traducNum(this.plateauNLC[ny - 1 - Y][X]),\n color: 'black',\n opacity: 0.8\n }).render()\n break\n case 3: // plateau N&B avec nom des couleurs\n b = new BoiteBuilder({\n xMin: X * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n yMin: Y * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0),\n xMax: (X + 1) * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n yMax: (Y + 1) * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0)\n }).addColor({\n color: 'black',\n opacity: 0.8,\n backgroudOpacity: 1,\n colorBackground: 'white'\n }).addTextIn({\n color: 'black',\n opacity: 0.9,\n textIn: this.plateauNLC[ny - 1 - Y][X],\n size: 0.9\n }).render()\n break\n case 4: // Plateau N&B avec numéros des couleurs\n b = new BoiteBuilder({\n xMin: X * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n yMin: Y * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0),\n xMax: (X + 1) * 1.5 + (nx >> 1) * (relatif ? -1.5 : 0),\n yMax: (Y + 1) * 1.5 + (ny >> 1) * (relatif ? -1.5 : 0)\n }).addColor({\n color: 'black',\n backgroudOpacity: 1,\n colorBackground: 'white',\n opacity: 0.8\n }).addTextIn({\n size: 1.2,\n color: 'black',\n opacity: 0.9,\n textIn: this.traducNum(this.plateauNLC[ny - 1 - Y][X])\n }).render()\n break\n }\n\n plateau2d.push(b)\n }\n }\n if (this.relatif) plateau2d.push(texteParPositionEchelle(`-${this.pas}`, -1.6, -0.4, 'milieu', 'black', 1.2, 'middle', true, scale))\n plateau2d.push(texteParPositionEchelle(`${this.pas}`, 1.5, -0.4, 'milieu', 'black', 1.2, 'middle', true, scale))\n plateau2d.push(texteParPositionEchelle('0', -0.3, -0.4, 'milieu', 'black', 1.2, 'middle', true, scale))\n if (this.relatif) plateau2d.push(texteParPositionEchelle(`-${this.pas}`, -0.5, -1.5, 'milieu', 'black', 1.2, 'middle', true, scale))\n plateau2d.push(texteParPositionEchelle(`${this.pas}`, -0.5, 1.5, 'milieu', 'black', 1.2, 'middle', true, scale))\n plateau2d.push(texteParPositionEchelle('x', this.nx * (this.relatif ? 0.75 : 1.5) + 0.7, -(this.relatif ? 0.6 : 0.6), 'milieu', 'purple', 1.2, 'middle', true, scale))\n plateau2d.push(texteParPositionEchelle('y', -0.4, this.ny * (this.relatif ? 0.75 : 1.5) + 0.7, 'milieu', 'purple', 1.2, 'middle', true, scale))\n if (this.relatif) {\n plateau2d.push(texteParPositionEchelle('+', (this.nx >> 1) * 1.5 + 0.8, 0, 'milieu', 'purple', 1.2, 'middle', true, scale))\n plateau2d.push(texteParPositionEchelle('-', -(this.nx >> 1) * 1.5 - 0.5, 0.2, 'milieu', 'purple', 1.2, 'middle', true, scale))\n plateau2d.push(texteParPositionEchelle('+', 0, (this.ny >> 1) * 1.5 + 0.8, 'milieu', 'purple', 1.2, 'middle', true, scale))\n plateau2d.push(texteParPositionEchelle('-', 0, -(this.ny >> 1) * 1.5 - 0.5, 'milieu', 'purple', 1.2, 'middle', true, scale))\n }\n const flechey = segment(0, (this.ny >> 1) * (this.relatif ? -1.5 : 0), 0, (this.ny >> 1) * (this.relatif ? 1.5 : 3) + 0.5, 'purple')\n flechey.styleExtremites = '->'\n const flechex = segment((this.nx >> 1) * (this.relatif ? -1.5 : 0), 0, (this.nx >> 1) * (this.relatif ? 1.5 : 3) + 0.5, 0, 'purple')\n flechex.styleExtremites = '->'\n plateau2d.push(flechey)\n plateau2d.push(flechex)\n this.plateau2d = plateau2d\n }\n}\n\nexport function plateau2dNLC (type = 1, melange = false, scale = 0.5, relatif = true) {\n return new Plateau2dNLC(type, melange, scale, relatif)\n}\n"],"names":["NoteLaCouleur","x","y","orientation","plateau","relatif","nx","ny","pas","code","lutin","avancepion","s","latex","avance","tournerD","tournerG","codes","sorti","test","pionfantome","noteLaCouleur","i","repetitions","sortiboucle","Plateau2dNLC","type","melange","scale","ObjetMathalea2D","x1","x2","y1","y2","kase","randint","couleur","plateau2d","b","X","Y","BoiteBuilder","texteParPositionEchelle","flechey","segment","flechex","plateau2dNLC"],"mappings":"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"}