bazar/Web/Pentis/Pentis.js

1510 lines
43 KiB
JavaScript

/**********************************|
| Code pour interagir avec Pentis. |
|**********************************/
console.log("Début.");
/* Pour contrôler la visibilité de la grille. */
/* Texte interactif. */
var iciTexte = document.getElementById("iciTexte");
/* Lien hypertexte pour masquer la grille. */
var ici = document.getElementById("ici");
/* Cadre de la grille. */
var cadreGrille = document.getElementById("grille");
var grilleCachee = true;//Besoin de préciser ?
function alterner(evt)
{
if(grilleCachee)//Si caché.
{
cadreGrille.style.display = "block";
iciTexte.innerText = "masquera la grille";
grilleCachee = false;
}
else//Si visible.
{
cadreGrille.style.display = "none";
iciTexte.innerText = "affichera la grille";
grilleCachee = true;
}
}
/* Écoute des clics sur l'hypertexte "ici". */
ici.addEventListener("click", alterner);
/******************************************************************************/
/* Début du tableau principal appelé la grille. */
var grille = [];//Tableau principal vide.
const NB_L = 24;//Total de ligne.
const NB_C = 40;//Total de colonnes.
for(let l=0; l<NB_L; l=l+1)//Remplissage.
{
grille[l] = [];
for(let c=0; c<NB_C; c=c+1)
{
grille[l][c] = 0;
}
}
console.log(`Taille: ${grille.length} lignes et ${grille[0].length} colonnes.`);
function tblEcrire(tbl=grille)//Écrire le tableau principal en texte.
{
const LIGNES = tbl.length;
const COLONNES = tbl[0].length;
document.querySelector("#tableau").innerText = "";
for(let l=0; l<LIGNES; l=l+1)
{
document.querySelector("#tableau").innerText += "\n";
for(let c=0; c<COLONNES; c=c+1)
{
if(tbl[l][c] <= 9)//Pour un nombre duodécimal.
{
/* Si un nombre à un chiffre. */
document.querySelector("#tableau").innerText += `${tbl[l][c]}`;
}
else
{
let nmb = '';
/* Si un nombre à plusieurs chiffres. */
switch (tbl[l][c])
{
case 10:
nmb = 'A';
break;
case 11:
nmb = 'B';
break;
case 12:
nmb = 'C';
break;
default:
nmb = 'Z';
}
document.querySelector("#tableau").innerText += nmb;
}
}
}
}
function tblExtraire(l1,c1,l2,c2,tbl)//Extraction d'une sous-matrice.
{
const LIGNES = l2-l1;
const COLONNES = c2-c1;
let bloc = [];
for(let l=0; l<LIGNES; l=l+1)
{
bloc[l] = [];
for(let c=0; c<COLONNES; c=c+1)
{
bloc[l][c] = tbl[l][c];
}
}
return bloc;
}
/******************************************************************************/
/* Création d'un nouveau bloc. */
function nvPentomino(no=0,l=0,c=0,tbl=grille)
{
switch (no)
{
case 0 ://Vide.
break;
case 1 ://Bloc I 1-1
tbl[l ].splice(c,1,1);//*
tbl[l+1].splice(c,1,1);//*
tbl[l+2].splice(c,1,1);//*
tbl[l+3].splice(c,1,1);//*
tbl[l+4].splice(c,1,1);//*
break;
case 2 ://Bloc I 2-1
tbl[l ].splice(c,5,1,1,1,1,1);//*****
//
//
//
//
break;
case 3 ://Bloc Y 1-1
tbl[l ].splice(c,1,2); //*
tbl[l+1].splice(c,2,2,2);//**
tbl[l+2].splice(c,1,2); //*
tbl[l+3].splice(c,1,2); //*
//
break;
case 4 ://Bloc Y 1-2
tbl[l ].splice(c+1,1,2); // *
tbl[l+1].splice(c,4,2,2,2,2);//****
//
//
//
break;
case 5 ://Bloc Y 1-3
tbl[l ].splice(c+1,1,2);// *
tbl[l+1].splice(c+1,1,2);// *
tbl[l+2].splice(c,2,2,2);//**
tbl[l+3].splice(c+1,1,2);// *
//
break;
case 6 ://Bloc Y 1-4
tbl[l ].splice(c,4,2,2,2,2);//****
tbl[l+1].splice(c+2,1,2); // *
//
//
//
break;
case 7 ://Bloc Y 2-1
tbl[l ].splice(c+1,1,2);// *
tbl[l+1].splice(c,2,2,2);//**
tbl[l+2].splice(c+1,1,2);// *
tbl[l+3].splice(c+1,1,2);// *
//
break;
case 8 ://Bloc Y 2-2
tbl[l ].splice(c,4,2,2,2,2);//****
tbl[l+1].splice(c+1,1,2); // *
//
//
//
break;
case 9 ://Bloc Y 2-3
tbl[l ].splice(c,1,2); //*
tbl[l+1].splice(c,1,2); //*
tbl[l+2].splice(c,2,2,2);//**
tbl[l+3].splice(c,1,2); //*
//
break;
case 10://Bloc Y 2-4
tbl[l ].splice(c+2,1,2); // *
tbl[l+1].splice(c,4,2,2,2,2);//****
//
//
//
break;
case 11://Bloc Q 1-1
tbl[l ].splice(c,4,3,3,3,3);//****
tbl[l+1].splice(c+3,1,3); // *
//
//
//
break;
case 12://Bloc Q 1-2
tbl[l ].splice(c,2,3,3);//**
tbl[l+1].splice(c,1,3); //*
tbl[l+2].splice(c,1,3); //*
tbl[l+3].splice(c,1,3); //*
//
break;
case 13://Bloc Q 1-3
tbl[l ].splice(c,1,3); //*
tbl[l+1].splice(c,4,3,3,3,3);//****
//
//
//
break;
case 14://Bloc Q 1-4
tbl[l ].splice(c+1,1,3);// *
tbl[l+1].splice(c+1,1,3);// *
tbl[l+2].splice(c+1,1,3);// *
tbl[l+3].splice(c,2,3,3);//**
//
break;
case 15://Bloc Q 2-1
tbl[l ].splice(c,4,3,3,3,3);//****
tbl[l+1].splice(c,1,3); //*
//
//
//
break;
case 16://Bloc Q 2-2
tbl[l ].splice(c,1,3); //*
tbl[l+1].splice(c,1,3); //*
tbl[l+2].splice(c,1,3); //*
tbl[l+3].splice(c,2,3,3);//**
//
break;
case 17://Bloc Q 2-3
tbl[l ].splice(c+3,1,3); // *
tbl[l+1].splice(c,4,3,3,3,3);//****
//
//
//
break;
case 18://Bloc Q 2-4
tbl[l ].splice(c,2,3,3);//**
tbl[l+1].splice(c+1,1,3);// *
tbl[l+2].splice(c+1,1,3);// *
tbl[l+3].splice(c+1,1,3);// *
//
break;
case 19://Bloc P 1-1
tbl[l ].splice(c,3,4,4,4);//***
tbl[l+1].splice(c+1,2,4,4);// **
//
//
//
break;
case 20://Bloc P 1-2
tbl[l ].splice(c,2,4,4);//**
tbl[l+1].splice(c,2,4,4);//**
tbl[l+2].splice(c,1,4); //*
//
//
break;
case 21://Bloc P 1-3
tbl[l ].splice(c,2,4,4); //**
tbl[l+1].splice(c,3,4,4,4); //***
//
//
//
break;
case 22://Bloc P 1-4
tbl[l ].splice(c+1,1,4);// *
tbl[l+1].splice(c,2,4,4);//**
tbl[l+2].splice(c,2,4,4);//**
//
//
break;
case 23://Bloc P 2-1
tbl[l ].splice(c,3,4,4,4);//***
tbl[l+1].splice(c,2,4,4); //**
//
//
//
break;
case 24://Bloc P 2-2
tbl[l ].splice(c,1,4); //*
tbl[l+1].splice(c,2,4,4);//**
tbl[l+2].splice(c,2,4,4);//**
//
//
break;
case 25://Bloc P 2-3
tbl[l ].splice(c+1,2,4,4);// **
tbl[l+1].splice(c,3,4,4,4);//***
//
//
//
break;
case 26://Bloc P 2-4
tbl[l ].splice(c,2,4,4);//**
tbl[l+1].splice(c,2,4,4);//**
tbl[l+2].splice(c+1,1,4);// *
//
//
break;
case 27://Bloc R 1-1
tbl[l ].splice(c,1,5); //*
tbl[l+1].splice(c,3,5,5,5);//***
tbl[l+2].splice(c+1,1,5); // *
//
//
break;
case 28://Bloc R 1-2
tbl[l ].splice(c+1,1,5); // *
tbl[l+1].splice(c+1,2,5,5);// **
tbl[l+2].splice(c,2,5,5); //**
//
//
break;
case 29://Bloc R 1-3
tbl[l ].splice(c+1,1,5); // *
tbl[l+1].splice(c,3,5,5,5);//***
tbl[l+2].splice(c+2,1,5); // *
//
//
break;
case 30://Bloc R 1-4
tbl[l ].splice(c+1,2,5,5);// **
tbl[l+1].splice(c,2,5,5); //**
tbl[l+2].splice(c+1,1,5); // *
//
//
break;
case 31://Bloc R 2-1
tbl[l ].splice(c+2,1,5); // *
tbl[l+1].splice(c,3,5,5,5);//***
tbl[l+2].splice(c+1,1,5); // *
//
//
break;
case 32://Bloc R 2-2
tbl[l ].splice(c,2,5,5); //**
tbl[l+1].splice(c+1,2,5,5);// **
tbl[l+2].splice(c+1,1,5); // *
//
//
break;
case 33://Bloc R 2-3
tbl[l ].splice(c+1,1,5); // *
tbl[l+1].splice(c,3,5,5,5);//***
tbl[l+2].splice(c,1,5); //*
//
//
break;
case 34://Bloc R 2-4
tbl[l ].splice(c+1,1,5); // *
tbl[l+1].splice(c,2,5,5); //**
tbl[l+2].splice(c+1,2,5,5);// **
//
//
break;
case 35://Bloc Z 1-1
tbl[l ].splice(c,1,6); //*
tbl[l+1].splice(c,3,6,6,6); //***
tbl[l+2].splice(c+2,1,6); // *
//
//
break;
case 36://Bloc Z 1-2
tbl[l ].splice(c+1,2,6,6); // **
tbl[l+1].splice(c+1,1,6); // *
tbl[l+2].splice(c,2,6,6); //**
//
//
break;
case 37://Bloc Z 2-1
tbl[l ].splice(c+2,1,6); // *
tbl[l+1].splice(c,3,6,6,6); //***
tbl[l+2].splice(c,1,6); //*
//
//
break;
case 38://Bloc Z 2-2
tbl[l ].splice(c,2,6,6); //**
tbl[l+1].splice(c+1,1,6); // *
tbl[l+2].splice(c+1,2,6,6); // **
//
//
break;
case 39://Bloc U 1-1
tbl[l ].splice(c,1,7); //* *
tbl[l ].splice(c+2,1,7); //***
tbl[l+1].splice(c,3,7,7,7);//
//
//
//
break;
case 40://Bloc U 1-2
tbl[l ].splice(c,2,7,7);//**
tbl[l+1].splice(c+1,1,7);// *
tbl[l+2].splice(c,2,7,7);//**
//
//
break;
case 41://Bloc U 1-3
tbl[l ].splice(c,3,7,7,7);//***
tbl[l+1].splice(c,1,7); //* *
tbl[l+1].splice(c+2,1,7); //
//
//
break;
case 42://Bloc U 1-4
tbl[l ].splice(c,2,7,7);//**
tbl[l+1].splice(c,1,7); //*
tbl[l+2].splice(c,2,7,7);//**
//
//
break;
case 43://Bloc S 1-1
tbl[l ].splice(c,3,8,8,8);//***
tbl[l+1].splice(c+2,2,8,8);// **
//
//
//
break;
case 44://Bloc S 1-2
tbl[l ].splice(c+1,1,8);// *
tbl[l+1].splice(c,2,8,8);//**
tbl[l+2].splice(c,1,8); //*
tbl[l+3].splice(c,1,8); //*
//
break;
case 45://Bloc S 1-3
tbl[l ].splice(c,2,8,8); //**
tbl[l+1].splice(c+1,3,8,8,8);// ***
//
//
//
break;
case 46://Bloc S 1-4
tbl[l ].splice(c+1,1,8);// *
tbl[l+1].splice(c+1,1,8);// *
tbl[l+2].splice(c,2,8,8);//**
tbl[l+3].splice(c,1,8); //*
//
break;
case 47://Bloc S 2-1
tbl[l ].splice(c+1,3,8,8,8);// ***
tbl[l+1].splice(c,2,8,8); //**
//
//
//
break;
case 48://Bloc S 2-2
tbl[l ].splice(c,1,8); //*
tbl[l+1].splice(c,1,8); //*
tbl[l+2].splice(c,2,8,8);//**
tbl[l+2].splice(c+1,1,8);// *
//
break;
case 49://Bloc S 2-3
tbl[l ].splice(c+2,2,8,8);// **
tbl[l+1].splice(c,3,8,8,8);//***
//
//
//
break;
case 50://Bloc S 2-4
tbl[l ].splice(c,1,8); //*
tbl[l+1].splice(c,2,8,8);//**
tbl[l+2].splice(c+1,1,8);// *
tbl[l+3].splice(c+1,1,8);// *
//
break;
case 51://Bloc V 1-1
tbl[l ].splice(c,3,9,9,9);//***
tbl[l+1].splice(c+2,1,9); // *
tbl[l+2].splice(c+2,1,9); // *
//
//
break;
case 52://Bloc V 1-2
tbl[l ].splice(c+2,1,9); // *
tbl[l+1].splice(c+2,1,9); // *
tbl[l+2].splice(c,3,9,9,9);//***
//
//
break;
case 53://Bloc V 1-3
tbl[l ].splice(c,1,9); //*
tbl[l+1].splice(c,1,9); //*
tbl[l+2].splice(c,3,9,9,9);//***
//
//
break;
case 54://Bloc V 1-4
tbl[l ].splice(c,3,9,9,9);//***
tbl[l+1].splice(c,1,9); //*
tbl[l+2].splice(c,1,9); //*
//
//
break;
case 55://Bloc X 1-1
tbl[l ].splice(c+1,1,10); // *
tbl[l+1].splice(c,3,10,10,10);//***
tbl[l+2].splice(c+1,1,10); // *
//
//
break;
case 56://Bloc W 1-1
tbl[l ].splice(c,1,11); //*
tbl[l+1].splice(c,2,11,11); //**
tbl[l+2].splice(c+1,2,11,11);// **
//
//
break;
case 57://Bloc W 1-2
tbl[l ].splice(c+2,1,11); // *
tbl[l+1].splice(c+1,2,11,11);// **
tbl[l+2].splice(c,2,11,11); //**
//
//
break;
case 58://Bloc W 1-3
tbl[l ].splice(c,2,11,11); //**
tbl[l+1].splice(c+1,2,11,11);// **
tbl[l+2].splice(c+2,1,11); // *
//
//
break;
case 59://Bloc W 1-4
tbl[l ].splice(c+1,2,11,11);// **
tbl[l+1].splice(c,2,11,11); //**
tbl[l+2].splice(c,1,11); //*
//
//
break;
case 60://Bloc T 1-1
tbl[l ].splice(c,3,12,12,12);//***
tbl[l+1].splice(c+1,1,12); // *
tbl[l+2].splice(c+1,1,12); // *
//
//
break;
case 61://Bloc T 1-2
tbl[l ].splice(c,1,12); //*
tbl[l+1].splice(c,3,12,12,12);//***
tbl[l+2].splice(c,1,12); //*
//
//
break;
case 62://Bloc T 1-3
tbl[l ].splice(c+1,1,12); // *
tbl[l+1].splice(c+1,1,12); // *
tbl[l+2].splice(c,3,12,12,12);//***
//
//
break;
case 63://Bloc T 1-4
tbl[l ].splice(c+2,1,12); // *
tbl[l+1].splice(c,3,12,12,12);//***
tbl[l+2].splice(c+2,1,12); // *
//
//
break;
default:
break;
}
console.log(`Nouveau bloc n°${no} (ligne ${l}, colonne ${c}).`);
}
/******************************************************************************/
/* Suppression d'un bloc. */
function sprPentomino(no=0,l=0,c=0,tbl=grille)
{
switch (no)
{
case 0 ://Vide.
break;
case 1 ://Bloc I 1-1
tbl[l ].splice(c,1,0);//*
tbl[l+1].splice(c,1,0);//*
tbl[l+2].splice(c,1,0);//*
tbl[l+3].splice(c,1,0);//*
tbl[l+4].splice(c,1,0);//*
break;
case 2 ://Bloc I 2-1
tbl[l ].splice(c,5,0,0,0,0,0);//*****
//
//
//
//
break;
case 3 ://Bloc Y 1-1
tbl[l ].splice(c,1,0); //*
tbl[l+1].splice(c,2,0,0);//**
tbl[l+2].splice(c,1,0); //*
tbl[l+3].splice(c,1,0); //*
//
break;
case 4 ://Bloc Y 1-2
tbl[l ].splice(c+1,1,0); // *
tbl[l+1].splice(c,4,0,0,0,0);//****
//
//
//
break;
case 5 ://Bloc Y 1-3
tbl[l ].splice(c+1,1,0);// *
tbl[l+1].splice(c+1,1,0);// *
tbl[l+2].splice(c,2,0,0);//**
tbl[l+3].splice(c+1,1,0);// *
//
break;
case 6 ://Bloc Y 1-4
tbl[l ].splice(c,4,0,0,0,0);//****
tbl[l+1].splice(c+2,1,0); // *
//
//
//
break;
case 7 ://Bloc Y 2-1
tbl[l ].splice(c+1,1,0);// *
tbl[l+1].splice(c,2,0,0);//**
tbl[l+2].splice(c+1,1,0);// *
tbl[l+3].splice(c+1,1,0);// *
//
break;
case 8 ://Bloc Y 2-2
tbl[l ].splice(c,4,0,0,0,0);//****
tbl[l+1].splice(c+1,1,0); // *
//
//
//
break;
case 9 ://Bloc Y 2-3
tbl[l ].splice(c,1,0); //*
tbl[l+1].splice(c,1,0); //*
tbl[l+2].splice(c,2,0,0);//**
tbl[l+3].splice(c,1,0); //*
//
break;
case 10://Bloc Y 2-4
tbl[l ].splice(c+2,1,0); // *
tbl[l+1].splice(c,4,0,0,0,0);//****
//
//
//
break;
case 11://Bloc Q 1-1
tbl[l ].splice(c,4,0,0,0,0);//****
tbl[l+1].splice(c+3,1,0); // *
//
//
//
break;
case 12://Bloc Q 1-2
tbl[l ].splice(c,2,0,0);//**
tbl[l+1].splice(c,1,0); //*
tbl[l+2].splice(c,1,0); //*
tbl[l+3].splice(c,1,0); //*
//
break;
case 13://Bloc Q 1-3
tbl[l ].splice(c,1,0); //*
tbl[l+1].splice(c,4,0,0,0,0);//****
//
//
//
break;
case 14://Bloc Q 1-4
tbl[l ].splice(c+1,1,0);// *
tbl[l+1].splice(c+1,1,0);// *
tbl[l+2].splice(c+1,1,0);// *
tbl[l+3].splice(c,2,0,0);//**
//
break;
case 15://Bloc Q 2-1
tbl[l ].splice(c,4,0,0,0,0);//****
tbl[l+1].splice(c,1,0); //*
//
//
//
break;
case 16://Bloc Q 2-2
tbl[l ].splice(c,1,0); //*
tbl[l+1].splice(c,1,0); //*
tbl[l+2].splice(c,1,0); //*
tbl[l+3].splice(c,2,0,0);//**
//
break;
case 17://Bloc Q 2-3
tbl[l ].splice(c+3,1,0); // *
tbl[l+1].splice(c,4,0,0,0,0);//****
//
//
//
break;
case 18://Bloc Q 2-4
tbl[l ].splice(c,2,0,0);//**
tbl[l+1].splice(c+1,1,0);// *
tbl[l+2].splice(c+1,1,0);// *
tbl[l+3].splice(c+1,1,0);// *
//
break;
case 19://Bloc P 1-1
tbl[l ].splice(c,3,0,0,0);//***
tbl[l+1].splice(c+1,2,0,0);// **
//
//
//
break;
case 20://Bloc P 1-2
tbl[l ].splice(c,2,0,0);//**
tbl[l+1].splice(c,2,0,0);//**
tbl[l+2].splice(c,1,0); //*
//
//
break;
case 21://Bloc P 1-3
tbl[l ].splice(c,2,0,0); //**
tbl[l+1].splice(c,3,0,0,0); //***
//
//
//
break;
case 22://Bloc P 1-4
tbl[l ].splice(c+1,1,0);// *
tbl[l+1].splice(c,2,0,0);//**
tbl[l+2].splice(c,2,0,0);//**
//
//
break;
case 23://Bloc P 2-1
tbl[l ].splice(c,3,0,0,0);//***
tbl[l+1].splice(c,2,0,0); //**
//
//
//
break;
case 24://Bloc P 2-2
tbl[l ].splice(c,1,0); //*
tbl[l+1].splice(c,2,0,0);//**
tbl[l+2].splice(c,2,0,0);//**
//
//
break;
case 25://Bloc P 2-3
tbl[l ].splice(c+1,2,0,0);// **
tbl[l+1].splice(c,3,0,0,0);//***
//
//
//
break;
case 26://Bloc P 2-4
tbl[l ].splice(c,2,0,0);//**
tbl[l+1].splice(c,2,0,0);//**
tbl[l+2].splice(c+1,1,0);// *
//
//
break;
case 27://Bloc R 1-1
tbl[l ].splice(c,1,0); //*
tbl[l+1].splice(c,3,0,0,0);//***
tbl[l+2].splice(c+1,1,0); // *
//
//
break;
case 28://Bloc R 1-2
tbl[l ].splice(c+1,1,0); // *
tbl[l+1].splice(c+1,2,0,0);// **
tbl[l+2].splice(c,2,0,0); //**
//
//
break;
case 29://Bloc R 1-3
tbl[l ].splice(c+1,1,0); // *
tbl[l+1].splice(c,3,5,0,0);//***
tbl[l+2].splice(c+2,1,0); // *
//
//
break;
case 30://Bloc R 1-4
tbl[l ].splice(c+1,2,0,0);// **
tbl[l+1].splice(c,2,0,0); //**
tbl[l+2].splice(c+1,1,0); // *
//
//
break;
case 31://Bloc R 2-1
tbl[l ].splice(c+2,1,0); // *
tbl[l+1].splice(c,3,0,0,0);//***
tbl[l+2].splice(c+1,1,0); // *
//
//
break;
case 32://Bloc R 2-2
tbl[l ].splice(c,2,0,0); //**
tbl[l+1].splice(c+1,2,0,0);// **
tbl[l+2].splice(c+1,1,0); // *
//
//
break;
case 33://Bloc R 2-3
tbl[l ].splice(c+1,1,0); // *
tbl[l+1].splice(c,3,0,0,0);//***
tbl[l+2].splice(c,1,0); //*
//
//
break;
case 34://Bloc R 2-4
tbl[l ].splice(c+1,1,0); // *
tbl[l+1].splice(c,2,0,0); //**
tbl[l+2].splice(c+1,2,0,0);// **
//
//
break;
case 35://Bloc Z 1-1
tbl[l ].splice(c,1,0); //*
tbl[l+1].splice(c,3,0,0,0); //***
tbl[l+2].splice(c+2,1,0); // *
//
//
break;
case 36://Bloc Z 1-2
tbl[l ].splice(c+1,2,0,0); // **
tbl[l+1].splice(c+1,1,0); // *
tbl[l+2].splice(c,2,0,0); //**
//
//
break;
case 37://Bloc Z 2-1
tbl[l ].splice(c+2,1,0); // *
tbl[l+1].splice(c,3,0,0,0); //***
tbl[l+2].splice(c,1,0); //*
//
//
break;
case 38://Bloc Z 2-2
tbl[l ].splice(c,2,0,0); //**
tbl[l+1].splice(c+1,1,0); // *
tbl[l+2].splice(c+1,2,0,0); // **
//
//
break;
case 39://Bloc U 1-1
tbl[l ].splice(c,1,0); //* *
tbl[l ].splice(c+2,1,0); //***
tbl[l+1].splice(c,3,0,0,0);//
//
//
//
break;
case 40://Bloc U 1-2
tbl[l ].splice(c,2,0,0);//**
tbl[l+1].splice(c+1,1,0);// *
tbl[l+2].splice(c,2,0,0);//**
//
//
break;
case 41://Bloc U 1-3
tbl[l ].splice(c,3,0,0,0);//***
tbl[l+1].splice(c,1,0); //* *
tbl[l+1].splice(c+2,1,0); //
//
//
break;
case 42://Bloc U 1-4
tbl[l ].splice(c,2,0,0);//**
tbl[l+1].splice(c,1,0); //*
tbl[l+2].splice(c,2,0,0);//**
//
//
break;
case 43://Bloc S 1-1
tbl[l ].splice(c,3,0,0,0);//***
tbl[l+1].splice(c+2,2,0,0);// **
//
//
//
break;
case 44://Bloc S 1-2
tbl[l ].splice(c+1,1,0);// *
tbl[l+1].splice(c,2,0,0);//**
tbl[l+2].splice(c,1,0); //*
tbl[l+3].splice(c,1,0); //*
//
break;
case 45://Bloc S 1-3
tbl[l ].splice(c,2,0,0); //**
tbl[l+1].splice(c+1,3,0,0,0);// ***
//
//
//
break;
case 46://Bloc S 1-4
tbl[l ].splice(c+1,1,0);// *
tbl[l+1].splice(c+1,1,0);// *
tbl[l+2].splice(c,2,0,0);//**
tbl[l+3].splice(c,1,0); //*
//
break;
case 47://Bloc S 2-1
tbl[l ].splice(c+1,3,0,0,0);// ***
tbl[l+1].splice(c,2,0,0); //**
//
//
//
break;
case 48://Bloc S 2-2
tbl[l ].splice(c,1,0); //*
tbl[l+1].splice(c,1,0); //*
tbl[l+2].splice(c,2,0,0);//**
tbl[l+2].splice(c+1,1,0);// *
//
break;
case 49://Bloc S 2-3
tbl[l ].splice(c+2,2,0,0);// **
tbl[l+1].splice(c,3,0,0,0);//***
//
//
//
break;
case 50://Bloc S 2-4
tbl[l ].splice(c,1,0); //*
tbl[l+1].splice(c,2,0,0);//**
tbl[l+2].splice(c+1,1,0);// *
tbl[l+3].splice(c+1,1,0);// *
//
break;
case 51://Bloc V 1-1
tbl[l ].splice(c,3,0,0,0);//***
tbl[l+1].splice(c+2,1,0); // *
tbl[l+2].splice(c+2,1,0); // *
//
//
break;
case 52://Bloc V 1-2
tbl[l ].splice(c+2,1,0); // *
tbl[l+1].splice(c+2,1,0); // *
tbl[l+2].splice(c,3,0,0,0);//***
//
//
break;
case 53://Bloc V 1-3
tbl[l ].splice(c,1,0); //*
tbl[l+1].splice(c,1,0); //*
tbl[l+2].splice(c,3,0,0,0);//***
//
//
break;
case 54://Bloc V 1-4
tbl[l ].splice(c,3,0,0,0);//***
tbl[l+1].splice(c,1,0); //*
tbl[l+2].splice(c,1,0); //*
//
//
break;
case 55://Bloc X 1-1
tbl[l ].splice(c+1,1,0); // *
tbl[l+1].splice(c,3,10,0,0); //***
tbl[l+2].splice(c+1,1,0); // *
//
//
break;
case 56://Bloc W 1-1
tbl[l ].splice(c,1,0); //*
tbl[l+1].splice(c,2,0,0); //**
tbl[l+2].splice(c+1,2,0,0); // **
//
//
break;
case 57://Bloc W 1-2
tbl[l ].splice(c+2,1,0); // *
tbl[l+1].splice(c+1,2,0,0); // **
tbl[l+2].splice(c,2,0,0); //**
//
//
break;
case 58://Bloc W 1-3
tbl[l ].splice(c,2,0,0); //**
tbl[l+1].splice(c+1,2,0,0); // **
tbl[l+2].splice(c+2,1,0); // *
//
//
break;
case 59://Bloc W 1-4
tbl[l ].splice(c+1,2,0,0); // **
tbl[l+1].splice(c,2,0,0); //**
tbl[l+2].splice(c,1,0); //*
//
//
break;
case 60://Bloc T 1-1
tbl[l ].splice(c,3,0,0,0);//***
tbl[l+1].splice(c+1,1,0); // *
tbl[l+2].splice(c+1,1,0); // *
//
//
break;
case 61://Bloc T 1-2
tbl[l ].splice(c,1,0); //*
tbl[l+1].splice(c,3,0,0,0); //***
tbl[l+2].splice(c,1,0); //*
//
//
break;
case 62://Bloc T 1-3
tbl[l ].splice(c+1,1,0); // *
tbl[l+1].splice(c+1,1,0); // *
tbl[l+2].splice(c,3,0,0,0); //***
//
//
break;
case 63://Bloc T 1-4
tbl[l ].splice(c+2,1,0); // *
tbl[l+1].splice(c,3,0,0,0); //***
tbl[l+2].splice(c+2,1,0); // *
//
//
break;
default:
break;
}
console.log(`Suppression du bloc n°${no} (ligne ${l}, colonne ${c}).`);
}
/******************************************************************************/
/* Ensemble des fonctions de contrôle. */
/* Accès à droite ? */
function accesADroite(no=0,l=0,c=0,tbl=grille)
{
let acces = false;
switch (no)
{
case 0 ://Vide.
break;
case 1 ://Bloc I 1-1
if ( tbl[l][c+1] === 0 && //*
tbl[l+1][c+1] === 0 && //*
tbl[l+2][c+1] === 0 && //*
tbl[l+3][c+1] === 0 ) //*
{ //*
acces = true;
}
break;
case 2 ://Bloc I 1-2
if ( tbl[l][c+5] === 0 ) //*****
{ //
acces = true; //
} //
break; //
case 3 ://Bloc Y 1-1
if ( tbl[l][c+1] === 0 && //*
tbl[l+1][c+2] === 0 && //**
tbl[l+2][c+1] === 0 && //*
tbl[l+3][c+1] === 0 ) //*
{ //
acces = true;
}
break;
case 4 ://Bloc Y 1-2
if ( tbl[l][c+2] === 0 && // *
tbl[l+1][c+4] === 0 ) //****
{ //
acces = true; //
} //
break;
case 5 ://Bloc Y 1-3
if ( tbl[l][c+2] === 0 && // *
tbl[l+1][c+2] === 0 && // *
tbl[l+2][c+2] === 0 && //**
tbl[l+3][c+2] === 0 ) // *
{ //
acces = true;
}
break;
case 6 ://Bloc Y 1-4
if ( tbl[l][c+4] === 0 && //****
tbl[l+1][c+3] === 0 ) // *
{ //
acces = true; //
} //
break;
case 7 ://Bloc Y 2-1
if ( tbl[l][c+2] === 0 && // *
tbl[l+1][c+2] === 0 && //**
tbl[l+2][c+2] === 0 && // *
tbl[l+3][c+2] === 0 ) // *
{ //
acces = true;
}
break;
case 8 ://Bloc Y 2-2
if ( tbl[l][c+4] === 0 && //****
tbl[l+1][c+2] === 0 ) // *
{ //
acces = true; //
} //
break;
case 9 ://Bloc Y 2-3
if ( tbl[l][c+1] === 0 && //*
tbl[l+1][c+1] === 0 && //*
tbl[l+2][c+2] === 0 && //**
tbl[l+3][c+1] === 0 ) //*
{ //
acces = true;
}
break;
case 10://Bloc Y 2-4
if ( tbl[l][c+2] === 0 && // *
tbl[l+1][c+4] === 0 ) //****
{ //
acces = true; //
} //
break;
default:
break;
}
if (acces)
{
console.log(`Un bloc n°${no} (ligne ${l} et colonne ${c}) peut se décaler à droite.`);
}
else
{
console.warn(`Un bloc n°${no} (ligne ${l} et colonne ${c}) est obstrué à droite!`);
}
return acces;
}
/* Accès à gauche ? */
function accesAGauche(no=0,l=0,c=0,tbl=grille)
{
let acces = false;
switch (no)
{
case 0 ://Vide.
break;
case 1 ://Bloc I 1-1
if ( tbl[l][c-1] === 0 && //*
tbl[l+1][c-1] === 0 && //*
tbl[l+2][c-1] === 0 && //*
tbl[l+3][c-1] === 0 ) //*
{ //*
acces = true;
}
break;
case 2 ://Bloc I 1-2
if ( tbl[l][c-1] === 0 ) //*****
{ //
acces = true; //
} //
break; //
case 3 ://Bloc Y 1-1
if ( tbl[l][c-1] === 0 && //*
tbl[l+1][c-1] === 0 && //**
tbl[l+2][c-1] === 0 && //*
tbl[l+3][c-1] === 0 ) //*
{ //
acces = true;
}
break;
case 4 ://Bloc Y 1-2
if ( tbl[l][c] === 0 && // *
tbl[l+1][c-1] === 0 ) //****
{ //
acces = true; //
} //
break;
case 5 ://Bloc Y 1-3
if ( tbl[l][c] === 0 && // *
tbl[l+1][c] === 0 && // *
tbl[l+2][c-1] === 0 && //**
tbl[l+3][c] === 0 ) // *
{ //
acces = true;
}
break;
case 6 ://Bloc Y 1-4
if ( tbl[l][c-1] === 0 && //****
tbl[l+1][c+1] === 0 ) // *
{ //
acces = true; //
} //
break;
case 7 ://Bloc Y 2-1
if ( tbl[l][c] === 0 && // *
tbl[l+1][c-1] === 0 && //**
tbl[l+2][c] === 0 && // *
tbl[l+3][c] === 0 ) // *
{ //
acces = true;
}
break;
case 8 ://Bloc Y 2-2
if ( tbl[l][c+4] === 0 && //****
tbl[l+1][c+2] === 0 ) // *
{ //
acces = true; //
} //
break;
case 9 ://Bloc Y 2-3
if ( tbl[l][c-1] === 0 && //*
tbl[l+1][c-1] === 0 && //*
tbl[l+2][c-1] === 0 && //**
tbl[l+3][c-1] === 0 ) //*
{ //
acces = true;
}
break;
case 10://Bloc Y 2-4
if ( tbl[l][c+1] === 0 && // *
tbl[l+1][c-1] === 0 ) //****
{ //
acces = true; //
} //
break;
default:
break;
}
if (acces)
{
console.log(`Un bloc n°${no} (ligne ${l} et colonne ${c}) peut se décaler à gauche.`);
}
else
{
console.warn(`Un bloc n°${no} (ligne ${l} et colonne ${c}) est obstrué à gauche!`);
}
return acces;
}
/* Accès en bas ? */
function accesEnBas(no=0,l=0,c=0,tbl=grille)
{
let acces = false;
switch (no)
{
case 0 ://Vide.
break;
case 1 ://Bloc I 1-1
if ( tbl[l+5][c] === 0 ) //*
{ //*
acces = true; //*
} //*
break; //*
case 2 ://Bloc I 1-2
if ( tbl[l+1][c] === 0 && //*****
tbl[l+1][c+1] === 0 && //
tbl[l+1][c+2] === 0 && //
tbl[l+1][c+3] === 0 && //
tbl[l+1][c+4] === 0 ) //
{
acces = true;
}
break;
case 3 ://Bloc Y 1-1
if ( tbl[l+4][c] === 0 && //*
tbl[l+2][c+1] === 0 ) //**
{ //*
acces = true; //*
} //
break;
case 4 ://Bloc Y 1-2
if ( tbl[l+2][c] === 0 && // *
tbl[l+2][c+1] === 0 && //****
tbl[l+2][c+2] === 0 && //
tbl[l+2][c+3] === 0 ) //
{ //
acces = true;
}
break;
case 5 ://Bloc Y 1-3
if ( tbl[l+3][c] === 0 && // *
tbl[l+4][c] === 0 ) // *
{ //**
acces = true; // *
} //
break;
case 6 ://Bloc Y 1-4
if ( tbl[l+1][c] === 0 && //****
tbl[l+1][c+1] === 0 && // *
tbl[l+2][c+2] === 0 && //
tbl[l+1][c+3] === 0 ) //
{ //
acces = true;
}
break;
case 7 ://Bloc Y 2-1
if ( tbl[l+2][c] === 0 && // *
tbl[l+4][c+1] === 0 ) //**
{ // *
acces = true; // *
} //
break;
case 8 ://Bloc Y 2-2
if ( tbl[l+1][c] === 0 && //****
tbl[l+2][c+1] === 0 && // *
tbl[l+1][c+2] === 0 && //
tbl[l+1][c+3] === 0 ) //
{ //
acces = true;
}
break;
case 9 ://Bloc Y 2-3
if ( tbl[l+4][c] === 0 && //*
tbl[l+3][c+1] === 0 ) //*
{ //**
acces = true; //*
} //
break;
case 10://Bloc Y 2-4
if ( tbl[l+2][c] === 0 && // *
tbl[l+2][c+1] === 0 && //****
tbl[l+2][c+2] === 0 && //
tbl[l+2][c+3] === 0 ) //
{ //
acces = true;
}
break;
default:
break;
}
if (acces)
{
console.log(`Un bloc n°${no} (ligne ${l} et colonne ${c}) peut se décaler à gauche.`);
}
else
{
console.warn(`Un bloc n°${no} (ligne ${l} et colonne ${c}) est obstrué à gauche!`);
}
return acces;
}
/******************************************************************************/
/* Dessin des pentominos sur la toile. */
/* Contexte de la toile. */
var ctx = document.querySelector("#toile").getContext('2d');
const fc = {x:100, y:700};//Centre du groupe de flèches.
const bc = {x:400, y:600};//Centre du groupe de boutons circulaires.
const ec = {x:250, y:550};//Centre du groupe de boutons elliptiques.
function premDessin()
{
/* Flèches. */
ctx.fillStyle = "red";
ctx.beginPath();
ctx.moveTo(fc.x+50,fc.y);
ctx.lineTo(fc.x+25,fc.y+25);
ctx.lineTo(fc.x+25,fc.y-25);
ctx.lineTo(fc.x+50,fc.y);
ctx.fill();
ctx.beginPath();
ctx.moveTo(fc.x-50,fc.y);
ctx.lineTo(fc.x-25,fc.y-25);
ctx.lineTo(fc.x-25,fc.y+25);
ctx.lineTo(fc.x-50,fc.y);
ctx.fill();
ctx.beginPath();
ctx.moveTo(fc.x,fc.y+50);
ctx.lineTo(fc.x-25,fc.y+25);
ctx.lineTo(fc.x+25,fc.y+25);
ctx.lineTo(fc.x,fc.y+50);
ctx.fill();
ctx.beginPath();
ctx.moveTo(fc.x,fc.y-50);
ctx.lineTo(fc.x+25,fc.y-25);
ctx.lineTo(fc.x-25,fc.y-25);
ctx.lineTo(fc.x,fc.y-50);
ctx.fill();
ctx.strokeStyle = "pink";
ctx.beginPath();
ctx.arc(fc.x,fc.y,50,0,Math.PI*2,true);
ctx.stroke();
/* Boutons circulaires. */
ctx.beginPath();
ctx.arc(bc.x+20,bc.y-20,20,0,Math.PI*2,true);
ctx.arc(bc.x-20,bc.y+20,20,0,Math.PI*2,true);
ctx.fill();
/* Boutons elliptique. */
ctx.beginPath();
ctx.ellipse(ec.x+30,ec.y,10,20,Math.PI/2,0,Math.PI*2,true);
ctx.ellipse(ec.x-30,ec.y,10,20,Math.PI/2,0,Math.PI*2,true);
ctx.fill();
/* Cadre pour les blocs. */
ctx.fillStyle = "blue";
ctx.beginPath();
ctx.moveTo(0,0);
ctx.lineTo(600,0);
ctx.lineTo(600,300+(100*5/3));
ctx.lineTo(0,300+(100*5/3));
ctx.lineTo(0,0);
ctx.lineTo(50,50);
ctx.lineTo(50,250+(100*5/3));
ctx.lineTo(550,250+(100*5/3));
ctx.lineTo(550,50);
ctx.lineTo(50,50);
ctx.lineTo(0,0);
ctx.fill();
}
premDessin();
/******************************************************************************/
function tblDessin(tbl=grille)
{
ctx.clearRect(50,50,500,200+(100*5/3));
const lx = 500/40;//Longueur x. 40 unités.
const ly = (200+(100*5/3))/24;//Longueur y. 24 unités.
const tblLY = tbl.length;//Lignes y du tableau.
const tblLX = tbl[0].length;//Colonnes x du tableau.
for(let l=0; l<tblLY; l=l+1)
{
for(let c=0; c<tblLX; c=c+1)
{
switch(tbl[l][c])
{
case 1 :
ctx.fillStyle = "#eb9947";//321
break;
case 2 :
ctx.fillStyle = "#ebeb47";//331
break;
case 3 :
ctx.fillStyle = "#99eb47";//231
break;
case 4 :
ctx.fillStyle = "#47eb47";//131
break;
case 5 :
ctx.fillStyle = "#47eb99";//132
break;
case 6 :
ctx.fillStyle = "#47ebeb";//133
break;
case 7 :
ctx.fillStyle = "#4799eb";//123
break;
case 8 :
ctx.fillStyle = "#4747eb";//113
break;
case 9 :
ctx.fillStyle = "#9947eb";//213
break;
case 10:
ctx.fillStyle = "#eb47eb";//313
break;
case 11:
ctx.fillStyle = "#eb4799";//312
break;
case 12:
ctx.fillStyle = "#eb4747";//311
break;
default:
ctx.fillStyle = "#000000";//000
break;
}
ctx.fillRect(50+lx*c,50+ly*l,lx,ly);
}
}
}
/******************************************************************************/
/* Interaction avec les touches. */
var cx = 0;//Coordonnée X du curseur.
var cy = 0;//Coordonnée Y du curseur.
function suivre(trace)//Coordonnées du curseur.
{
cx = trace.offsetX;
cy = trace.offsetY;
}
function action(frappe)//Clic sur un bouton.
{
/* Si dans les flèches. */
/* Flèche du haut. */
if(cx < fc.x+50 && cx > fc.x-50 && cy < fc.y+50 && cy > fc.y-50)
{
console.log(`Curseur dans les flèches (x=${cx} y=${cy}).`);
}
if(cx < fc.x+50 && cx > fc.x-50 && cy < fc.y+50 && cy > fc.y-50)
{
console.log(`Curseur dans les flèches (x=${cx} y=${cy}).`);
}
if(cx < fc.x+50 && cx > fc.x-50 && cy < fc.y+50 && cy > fc.y-50)
{
console.log(`Curseur dans les flèches (x=${cx} y=${cy}).`);
}
if(cx < fc.x+50 && cx > fc.x-50 && cy < fc.y+50 && cy > fc.y-50)
{
console.log(`Curseur dans les flèches (x=${cx} y=${cy}).`);
}
/* Si dans les cercles. */
if(cx < bc.x+40 && cx > bc.x-40 && cy < bc.y+40 && cy > bc.y-40)
{
console.log(`Curseur dans les cercles (x=${cx} y=${cy}).`);
}
/* Si dans les ellipses. */
if(cx < ec.x+40 && cx > ec.x-40 && cy < ec.y+20 && cy > ec.y-20)
{
console.log(`Curseur dans les ellipses (x=${cx} y=${cy}).`);
}
}
/* Écouteur de position. */
document.querySelector("#toile").addEventListener("mousemove", suivre);
/* Écouteur de clic. */
document.querySelector("#toile").addEventListener("click", action);
/* Construction du tableau secondaire :
* un pentomino est construit dans un
* tableau mobile.
*/
var pento = {//Pentomino nul.
l:0,//Ligne d'origine.
c:0,//Colonne d'origine.
mtx:[//Sous-tableau mobile.
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0]
]
};
nvPentomino(1,1,0,grille);
tblEcrire(grille);//Matrice initiale.
tblDessin(grille);
var accesd = accesADroite(1,1,0,grille);
var accesg = accesAGauche(1,1,0,grille);
sprPentomino(1,1,0,grille);
function essai(no)
{
sprPentomino(no,0,0,grille);
nvPentomino(no+1,0,0,grille);
tblEcrire(grille);
tblDessin(grille);
}
var no=0;
var boucle = window.setInterval( ()=>{no++; essai(no);}, 1000);
window.setTimeout( ()=>{window.clearInterval(boucle);}, 64000);
console.log("Fin.");