1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- const boulier = [[true,true,true,false,false,false], [true,true,true,false,false,false]];
- move(0, 1);
- print();
- move(0, 0);
- move(1, 2);
- print();
- move(1, 0);
- print();
- move(0, 4);
- move(1, 5);
- print();
- function move(line, col) {
- if (boulier.length <= line || boulier[line].length <= col || ! boulier[line][col]) {
- return false;
- }
- let data = boulier[line]
- // Détermine si il faut bouger les boules vers la gauche ou la droite
- let right = true;
- for (let i = col; i < data.length; i++) {
- if (!data[i]) {
- right = false;
- break;
- }
- }
- // Si a droite inverse la ligne
- if (right) {
- data = data.reverse();
- col = data.length - col - 1;
- }
- data = makemove(data, col);
- // Si a droite remet la ligne
- if (right) {
- data = data.reverse();
- }
- }
- function makemove(data, col) {
- // Compte le nombre de boule à deplacer et l'index pour faire le déplacement
- let cpt = 0;
- let gap = false;
- let index = null;
- for (let i = col; i < data.length; i++) {
- if (!gap && data[i]) {
- cpt++;
- data[i] = false;
- } else if (gap && data[i]) {
- index = i - 1;
- break;
- } else {
- gap = true;
- }
- }
- if (index == null) {
- index = data.length - 1;
- }
- // Déplace les boules
- for (let i = 0; i < cpt; i++) {
- data[index - i] = true;
- }
- return data;
- }
- function print() {
- let str = '';
- for (const line of boulier) {
- str += '-|';
- for (const boule of line) {
- if (boule) {
- str += 'o';
- } else {
- str += '-';
- }
- }
- str += '|-\n';
- }
- console.log(str);
- }
|