有粘性的html5小游戏,HTML5 Canvas很有趣的拷贝猫小游戏

JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

Math.linearTween = function(currentTime, debut, degreduChangement, duration) {

return degreduChangement * currentTime / duration + debut;

};

Math.easeInOutQuad = function(t, b, c, d) {

t /= d / 2;

if (t < 1) return c / 2 * t * t + b;

t--;

return -c / 2 * (t * (t - 2) - 1) + b;

};

Math.easeInOutQuart = function(t, b, c, d) {

t /= d / 2;

if (t < 1) return c / 2 * t * t * t * t + b;

t -= 2;

return -c / 2 * (t * t * t * t - 2) + b;

};

Math.outElastic = function(t, b, c, d) {

var ts = (t /= d) * t;

var tc = ts * t;

return b + c * (29.445 * tc * ts + -98.0825 * ts * ts + 113.88 * tc + -53.69 * ts + 9.4475 * t);

};

Math.inElastic = function(t, b, c, d) {

var ts = (t /= d) * t;

var tc = ts * t;

return b + c * (-5.3475 * tc * ts + 12.6475 * ts * ts + -10 * tc + 2.6 * ts + 1.1 * t);

};

var Utl = {};

// true si valeur est entre deux autres valeurs

Utl.entre = function(valeur, min, max) {

return (valeur - min) * (valeur - max) < 0;

};

Utl.aleatoire = function(min, max) {

return min + Math.random() * (max - min);

};

// Distance entre deux points

Utl.distance = function(p1, p2) {

return Math.hypot(p1.x - p2.x, p1.y - p2.y);

}

Utl.lerp = function(value1, value2, amount) {

return value1 + (value2 - value1) * amount;

};

// collision Point > Carre

Utl.pointCarre = function(x, y, carre) {

return Calcul.entre(x, carre.pos.x, carre.pos.x + carre.taille) && Calcul.entre(y, carre.pos.y, carre.pos.y + carre.taille);

};

// Morceler un tableau de plusieurs lignes

Utl.morceler = function(tableau, largeur) {

var resultat = [];

for (var i = 0; i < tableau.length; i += largeur) resultat.push(tableau.slice(i, i + largeur))

return resultat;

};

class Menu {

constructor(parent, x, y, choix) {

this.parent = parent;

this.ctx = parent.ctx;

this.choix = choix;

this.pos = {

x: x,

y: y

};

this.actif = false;

this.selection = 0;

this.max = this.choix.length - 1;

this.curseur = this.parent.ressources.curseur;

this.touches = [];

let valeur = [];

for (var i = 0; i < this.choix.length; i++) {

valeur.push(this.choix[i].nom.length);

}

this.texteMax = Math.max(...valeur) * 6 + 60;

}

changement(keyCode) {

if (keyCode === 38 && this.selection > 0) {

// haut

this.parent.sons.selection.url.play();

this.selection -= 1;

this.rendu();

} else if (keyCode === 40 && this.selection < this.max) {

// bas

this.parent.sons.selection.url.play();

this.selection += 1;

this.rendu();

} else if (keyCode === 88) {

// action

this.parent.sons.validation.url.play();

this.actif = false;

this.parent.phase(this.choix[this.selection].lien);

}

}

selectionne() {}

rendu() {

this.ctx.fillStyle = "#fff1e8";

// dessiner le cadre

this.parent.boite(this.pos.x - this.texteMax / 2, this.pos.y - 10, this.texteMax, 26 * this.choix.length);

// on affiche le titre

for (var i = 0; i < this.choix.length; i++) {

this.parent.ecrire(this.choix[i].nom, this.pos.x, this.pos.y + 25 * i);

}

// on affiche la selection

this.ctx.drawImage(this.curseur.img, 48, 0, 16, 16, this.pos.x - this.texteMax / 2 + 8, this.pos.y + 25 * (this.selection) - 4, 16, 16);

}

}

class Entite {

constructor(monde, x, y, sprite) {

this.monde = monde;

this.limite = monde.limite;

this.ctx = monde.ctx;

this.pos = {

x: x,

y: y

};

this.taille = monde.taille;

this.cible = {

x: this.pos.x * this.taille,

y: this.pos.y * this.taille,

};

this.depart = {

x: this.pos.x * this.taille,

y: this.pos.y * this.taille,

};

this.sprite = new Sprite(this.monde, this, sprite);

this.transition = {

etat: false,

temps: null,

duration: 200,

style: "marche"

};

this.derniereDirection = "none";

this.peutBouger = true;

this.collision = false;

this.validation = false;

this.monde.sons.apparition.url.play();

this.monde.effets.push(new Effet(this.monde, this.depart.x, this.depart.y, this.monde.ressources.explosion));

}

controles() {

if (!this.transition.etat && this.peutBouger) {

if (this.monde.touches[38]) {

this.diriger("haut");

}

if (this.monde.touches[39]) {

this.diriger("droite");

}

if (this.monde.touches[37]) {

this.diriger("gauche");

}

if (this.monde.touches[40]) {

this.diriger("bas");

}

}

}

diriger(direction) {

let mouvement = {};

switch (direction) {

case "gauche":

mouvement = {

x: this.pos.x - 1,

y: this.pos.y

};

break;

case "droite":

mouvement = {

x: this.pos.x + 1,

y: this.pos.y

};

break;

case "bas":

mouvement = {

x: this.pos.x,

y: this.pos.y + 1

};

break;

case "haut":

mouvement = {

x: this.pos.x,

y: this.pos.y - 1

};

break;

}

this.deplacer(mouvement, direction);

}

deplacer(coordonne, direction) {

if (!this.transition.etat) {

this.tuileCible = this.monde.infoClef(coordonne.x, coordonne.y);

if (!this.tuileCible.collision) {

if (this.tuileCible.action === "glace") {

this.transition.style = "glace";

this.transition.duration = 80;

} else {

this.transition.style = "marche";

this.transition.duration = 200;

}

this.collision = false;

this.validation = false;

this.transition.etat = true;

this.derniereDirection = direction;

this.transition.temps = new Date();

this.pos.x = coordonne.x;

this.pos.y = coordonne.y;

this.cible.x = this.pos.x * this.taille;

this.cible.y = this.pos.y * this.taille;

} else {

this.collision = true;

}

}

}

translation() {

if (this.transition.etat) {

let time = new Date() - this.transition.temps;

if (time < this.transition.duration) {

if (this.transition.style === "marche") {

this.sprite.pos.x = Math.easeInOutQuart(time, this.depart.x, this.cible.x - this.depart.x, this.transition.duration);

this.sprite.pos.y = Math.easeInOutQuart(time, this.depart.y, this.cible.y - this.depart.y, this.transition.duration);

} else {

this.sprite.pos.x = Math.linearTween(time, this.depart.x, this.cible.x - this.depart.x, this.transition.duration);

this.sprite.pos.y = Math.linearTween(time, this.depart.y, this.cible.y - this.depart.y, this.transition.duration);

}

} else {

this.transition.etat = false;

this.sprite.pos.x = this.cible.x;

this.sprite.pos.y = this.cible.y;

this.depart.x = this.cible.x;

this.depart.y = this.cible.y;

// en fonction du type de sol

switch (this.tuileCible.action) {

case "glace":

this.diriger(this.derniereDirection);

if (!this.collision) {

this.peutBouger = false;

} else {

this.peutBouger = true;

}

break;

case "gauche":

this.monde.sons.validation.url.play();

this.peutBouger = false;

this.diriger("gauche");

break;

case "haut":

this.monde.sons.validation.url.play();

this.peutBouger = false;

this.diriger("haut");

break;

case "bas":

this.monde.sons.validation.url.play();

this.peutBouger = false;

this.diriger("bas");

break;

case "droite":

this.monde.sons.validation.url.play();

this.peutBouger = false;

this.diriger("droite");

break;

case "piege":

this.monde.sons.eboulement.url.play();

this.monde.effets.push(new Effet(this.monde, this.pos.x * this.taille, this.pos.y * this.taille, this.monde.ressources.poussiere));

this.monde.terrain.geometrie[this.pos.y][this.pos.x] = 7;

this.peutBouger = true;

break;

case "suivant":

this.validation = true;

this.peutBouger = true;

this.monde.action("suivant");

break;

default:

this.monde.sons.mouvement.url.play();

this.peutBouger = true;

this.validation = false;

// sol normal

}

}

}

}

rendu() {

this.sprite.rendu();

this.translation();

this.controles();

}

}

class Effet {

constructor(monde, x, y, sprite) {

this.monde = monde;

this.ctx = monde.ctx;

this.sprite = sprite;

this.taille = monde.taille;

this.l = Math.round(this.sprite.img.width / this.sprite.sep),

this.h = this.sprite.img.height / this.sprite.ligne

this.pos = {

x: x,

y: y

};

this.longueur = this.sprite.sep;

this.frame = 0;

this.taille = monde.taille;

this.selectLigne = 0;

this.animation = true;

this.allure = 0.4;

}

rendu() {

if (this.animation) {

this.frame += this.allure;

if (this.frame >= this.longueur) {

this.monde.effets.splice(this.monde.effets.indexOf(this), 1);

}

}

this.ctx.drawImage(this.sprite.img, Math.floor(this.frame) * this.l, this.selectLigne, this.l, this.h, this.pos.x - this.l / 4, this.pos.y - this.l / 4, this.l, this.h);

}

}

class Sprite {

constructor(monde, parent, sprite) {

this.ctx = monde.ctx;

this.sprite = sprite;

this.taille = monde.taille;

this.l = Math.round(this.sprite.img.width / this.sprite.sep),

this.h = this.sprite.img.height / this.sprite.ligne

this.pos = {

x: parent.pos.x * this.taille,

y: parent.pos.y * this.taille

};

this.longueur = this.sprite.sep;

this.frame = 0;

this.taille = monde.taille;

this.selectLigne = 0;

this.animation = true;

this.allure = 0.2;

}

dessiner() {

this.ctx.drawImage(this.sprite.img, Math.floor(this.frame) * this.l, this.selectLigne, this.l, this.h, this.pos.x, this.pos.y, this.l, this.h);

}

animer() {

if (this.animation) {

this.frame += this.allure;

if (this.frame >= this.longueur) {

this.frame = 0;

}

}

}

rendu() {

this.animer();

this.dessiner();

}

}

/*

_____ _

/ ____| (_)

| | ___ ___ _ _ _ __ _ ___

| | / _ \ / _ \ | | | '__| / __|

| |___| (_) | __/ |_| | |_ | \__ \

\_____\___/ \___|\__,_|_(_)| |___/

_/ |

|__/

*/

class Monde {

constructor(parametres, niveaux) {

// parametres

this.alphabet = "abcdefghijklmnopqrstuvwxyz0123456789 ?!():'";

this.taille = parametres.taille;

this.touches = [];

this.zoom = parametres.zoom || 2;

this.remplissage = false;

this.etat = "menu";

// fps

this.fps = 60;

// ressources

this.prop = {

compte: 0,

nombreImg: parametres.stockImages.length + parametres.stockSon.length

};

this.ressources = {};

// volume

this.volumePrincipal = 0.05;

// Chargement + lancement

this.creerContexte();

if (this.prop !== 0) {

this.traitement(parametres.stockImages, parametres.stockSon, parametres.clefs);

}

// niveaux

this.niveaux = niveaux;

this.niveauActuel = 0;

// on recupere la derniere sauvegarde

if (localStorage.copycat) {

console.info('mémoire récupérée')

this.niveauMax = JSON.parse(localStorage.copycat);

} else {

// s'il n'y a rien on genere une mémoire

localStorage.setItem("copycat", JSON.stringify(4));

this.niveauMax = JSON.parse(localStorage.copycat);

}

this.cat = [];

// Menu niveaux

let self = this;

this.menuNiveaux = {

monde: self,

ctx: self.ctx,

nombre: self.niveaux.length,

selection: 0,

rendu: function() {

this.ctx.fillStyle = "#fff1e8";

this.monde.boite(10, 10, this.monde.L - 20, 200 - 20);

this.monde.ecrire("select level", this.monde.L / 2, 25);

for (let i = 0; i < this.nombre; i++) {

let numero = i + 1;

if (i > this.monde.niveauMax - 1) {

this.ctx.globalAlpha = 0.6;

this.monde.ctx.drawImage(this.monde.ressources.lock.img, (32 + Math.floor(i % 7) * 32) - this.monde.ressources.lock.img.width / 2, (64 + Math.floor(i / 7) * 32) + 10);

}

this.monde.ecrire(numero.toString(), 32 + Math.floor(i % 7) * 32, 64 + Math.floor(i / 7) * 32);

this.ctx.globalAlpha = 1;

}

this.monde.ctx.drawImage(this.monde.ressources.curseur.img, 0, 16, 32, 32, 16 + Math.floor(this.selection % 7) * 32, 51 + Math.floor(this.selection / 7) * 32, 32, 32);

},

changement: function(keyCode) {

if (keyCode === 38 && this.selection - 6 > 0) {

// haut

this.monde.sons.selection.url.play();

this.selection -= 7;

this.rendu();

}

if (keyCode === 40 && this.selection + 6 < this.monde.niveauMax) {

// bas

this.monde.sons.selection.url.play();

this.selection += 7;

this.rendu();

}

if (keyCode === 37 && this.selection > 0) {

// gauche

this.monde.sons.selection.url.play();

this.selection -= 1;

this.rendu();

}

if (keyCode === 39 && this.selection + 1 < this.monde.niveauMax) {

// droit

this.monde.sons.selection.url.play();

this.selection += 1;

this.rendu();

}

}

}

//transition

this.transition = {

duration: 800,

}

this.effets = [];

}

creerContexte() {

this.toile = document.createElement("canvas");

this.ctx = this.toile.getContext('2d');

this.L = this.toile.width = 16 * 16;

this.H = this.toile.height = 16 * 16;

this.limite = {

x: this.L,

y: this.H

}

this.toile.style.width = this.L * this.zoom + "px";

this.toile.style.height = this.H * this.zoom + "px";

this.ctx.msImageSmoothingEnabled = false;

this.ctx.imageSmoothingEnabled = false;

document.body.appendChild(this.toile);

console.log('%c Monde créé ', 'padding:2px; border-left:2px solid green; background: lightgreen; color: #000');

}

/*

_____ _ _

/ ____| | | |

| | | |__ __ _ _ __ __ _ ___ _ __ ___ ___ _ __ | |_

| | | '_ \ / _` | '__/ _` |/ _ \ '_ ` _ \ / _ \ '_ \| __|

| |____| | | | (_| | | | (_| | __/ | | | | | __/ | | | |_

\_____|_| |_|\__,_|_| \__, |\___|_| |_| |_|\___|_| |_|\__|

__/ |

|___/

*/

chargement() {

this.prop.compte += 1;

if (this.prop.compte === this.prop.nombreImg) {

console.log('%c les ressources sont chargées ' + this.prop.nombreImg + " / " + this.prop.nombreImg, 'padding:2px; border-left:2px solid green; background: lightgreen; color: #000');

// menu

let bouttons = [{

nom: "start game",

lien: "start"

}, {

nom: "levels",

lien: "niveaux"

}, {

nom: "how to play",

lien: "regles"

}, {

nom: "about",

lien: "info"

}, ];

this.menu = new Menu(this, this.L / 2, 110, bouttons);

// Fin de chargement

this.phase("menu");

document.addEventListener("keydown", event => this.touchePresse(event), false);

document.addEventListener("keyup", event => this.toucheLache(event), false);

} else {

// écran de chargement

this.ctx.fillStyle = "#000";

this.ctx.fillRect(0, 0, this.L, this.H);

this.ctx.fillStyle = "#fff";

this.ctx.fillRect(0, (this.H / 2) - 1, (this.prop.compte * this.L) / this.prop.nombreImg, 2);

}

}

chargerImages(url) {

let img = new Image();

let self = this;

img.onload = function() {

self.chargement();

}

img.src = url;

return img;

}

chargerSon(url) {

let audio = new Audio(url);

audio.addEventListener('canplaythrough', this.chargement(), false);

audio.volume = this.volumePrincipal;

return audio;

}

traitement(stockImages, stockSon, clefs) {

// traitement images

let IM = {};

for (let i = 0; i < stockImages.length; i++) {

let sujet = stockImages[i];

let nom = sujet.nom;

sujet.img = this.chargerImages(stockImages[i].img);

IM[nom] = stockImages[i];

}

this.ressources = IM;

// traitement images

let IS = {};

for (let i = 0; i < stockSon.length; i++) {

let sujet = stockSon[i];

let nom = sujet.nom;

sujet.url = this.chargerSon(stockSon[i].url);

IS[nom] = stockSon[i];

}

this.sons = IS;

// traitement clefs

this.nettoyer = new Array(clefs.length).fill(false)

let CM = {};

for (let i = 0; i < clefs.length; i++) {

let sujet = clefs[i];

let nom = sujet.id;

if (sujet.type === "sprite") {

sujet.frame = 0;

sujet.sprite = this.ressources[sujet.apparence];

sujet.memoireBoucle = false;

sujet.peutAnimer = true;

sujet.boucle = true;

}

CM[nom] = clefs[i];

}

this.clefs = CM;

}

/*

______ __ _

| ____| /_/ | |

| |____ _____ _ __ ___ _ __ ___ ___ _ __ | |_

| __\ \ / / _ \ '_ \ / _ \ '_ ` _ \ / _ \ '_ \| __|

| |___\ V / __/ | | | __/ | | | | | __/ | | | |_

|______\_/ \___|_| |_|\___|_| |_| |_|\___|_| |_|\__|

*/

touchePresse(event) {

this.touches[event.keyCode] = true;

if (this.touches[70]) {

this.activeRemplissage();

}

switch (this.etat) {

case "menu":

this.menu.changement(event.keyCode);

break;

case "start":

if (this.touches[69] && this.animation) {

this.sons.validation.url.play();

this.phase("menu")

}

if (this.touches[82] && this.animation) {

this.sons.validation.url.play();

cancelAnimationFrame(this.animation);

this.animation = null;

this.arret = true;

this.outro();

}

break;

case "fin":

if (this.touches[67]) {

this.sons.validation.url.play();

this.phase("menu")

}

break;

case "regles":

if (this.touches[67]) {

this.sons.validation.url.play();

this.phase("menu")

}

break;

case "info":

if (this.touches[67]) {

this.sons.validation.url.play();

this.phase("menu")

}

break;

case "niveaux":

this.menuNiveaux.changement(event.keyCode);

if (this.touches[67]) {

this.sons.validation.url.play();

this.phase("menu")

}

if (this.touches[88]) {

this.niveauActuel = this.menuNiveaux.selection;

this.phase("start")

}

break;

default:

console.log("aucune touche reconnue");

}

}

toucheLache(event) {

this.touches[event.keyCode] = false;

}

activeRemplissage() {

if (!this.remplissage) {

this.toile.webkitRequestFullScreen()

this.remplissage = true;

this.toile.style.width = "100vmin";

this.toile.style.height = "100vmin";

} else {

document.webkitCancelFullScreen()

this.remplissage = false;

this.toile.style.width = this.L * this.zoom + "px";

this.toile.style.height = this.H * this.zoom + "px";

}

}

/*

______ _ _

| ____| | | (_)

| |__ ___ _ __ ___| |_ _ ___ _ __ ___

| __/ _ \| '_ \ / __| __| |/ _ \| '_ \/ __|

| | | (_) | | | | (__| |_| | (_) | | | \__ \

|_| \___/|_| |_|\___|\__|_|\___/|_| |_|___/

*/

chercheClef(recherche) {

let blockRecherche = [];

for (var j = 0; j < this.terrain.dimension.y; j++) {

for (var i = 0; i < this.terrain.dimension.x; i++) {

let id = this.terrain.geometrie[j][i];

if (this.clefs[id].nom === recherche) {

let info = {

pos: {

x: i,

y: j

}

}

blockRecherche.push(info);

}

}

}

return blockRecherche;

}

infoClef(x, y) {

if (x > -1 && x < this.terrain.dimension.x && y > -1 && y < this.terrain.dimension.y) {

return this.clefs[this.terrain.geometrie[y][x]];

} else {

return false;

}

}

ecrire(texte, x, y) {

let largeur = 6,

hauteur = 9;

let centre = (texte.length * largeur) / 2

for (let i = 0; i < texte.length; i++) {

let index = this.alphabet.indexOf(texte.charAt(i)),

clipX = largeur * index,

posX = (x - centre) + (i * largeur);

this.ctx.drawImage(this.ressources.pixelFont.img, clipX, 0, largeur, hauteur, posX, y, largeur, hauteur);

}

}

boite(x, y, l, h) {

this.ctx.fillStyle = "#fff1e8";

// dessiner le fond

this.ctx.fillRect(x + 1, y + 1, l - 2, h - 2);

// dessiner les bords

//haut Gauche

this.ctx.drawImage(this.ressources.curseur.img, 32, 16, 16, 16, x, y, 16, 16);

//haut Droit

this.ctx.drawImage(this.ressources.curseur.img, 32 + 8, 16, 16, 16, x + l - 16, y, 16, 16);

//bas Gauche

this.ctx.drawImage(this.ressources.curseur.img, 32, 16 + 8, 16, 16, x, y + h - 16, 16, 16);

//bas Gauche

this.ctx.drawImage(this.ressources.curseur.img, 32 + 8, 16 + 8, 16, 16, x + l - 16, y + h - 16, 16, 16);

// haut

this.ctx.drawImage(this.ressources.curseur.img, 32 + 4, 16, 16, 16, x + 16, y, l - 32, 16);

// bas

this.ctx.drawImage(this.ressources.curseur.img, 32 + 4, 16 + 8, 16, 16, x + 16, y + h - 16, l - 32, 16);

// gauche

this.ctx.drawImage(this.ressources.curseur.img, 32, 16 + 4, 16, 16, x, y + 16, 16, h - 32);

// droit

this.ctx.drawImage(this.ressources.curseur.img, 32 + 8, 16 + 4, 16, 16, x + l - 16, y + 16, 16, h - 32);

}

bitMasking() {

let tuileBitMask = [];

let compte = 0;

this.terrain.apparence = [];

for (var j = 0; j < this.terrain.dimension.y; j++) {

for (var i = 0; i < this.terrain.dimension.x; i++) {

let id = this.terrain.geometrie[j][i];

// haut gauche droit bas

let voisine = [0, 0, 0, 0];

compte += 1;

if (j - 1 > -1) {

if (id === this.terrain.geometrie[j - 1][i]) {

//haut

voisine[0] = 1;

}

} else {

voisine[0] = 1;

}

if (i - 1 > -1) {

if (id === this.terrain.geometrie[j][i - 1]) {

// gauche

voisine[1] = 1;

}

} else {

voisine[1] = 1;

}

if (i + 1 < this.terrain.dimension.x) {

if (id === this.terrain.geometrie[j][i + 1]) {

// droite

voisine[2] = 1;

}

} else {

voisine[2] = 1;

}

if (j + 1 < this.terrain.dimension.y) {

if (id === this.terrain.geometrie[j + 1][i]) {

//bas

voisine[3] = 1;

}

} else {

voisine[3] = 1;

}

id = 1 * voisine[0] + 2 * voisine[1] + 4 * voisine[2] + 8 * voisine[3];

this.terrain.apparence.push(id);

}

}

this.terrain.apparence = Utl.morceler(this.terrain.apparence, this.terrain.dimension.x);

}

renduTerrain() {

for (let j = 0; j < this.terrain.dimension.y; j++) {

for (let i = 0; i < this.terrain.dimension.x; i++) {

let id = this.terrain.geometrie[j][i];

if (this.clefs[id].apparence === "auto") {

var sourceX = Math.floor(this.terrain.apparence[j][i]) * this.taille;

var sourceY = Math.floor(this.terrain.apparence[j][i]) * this.taille;

this.ctx.drawImage(this.ressources.feuille.img, sourceX, this.clefs[id].ligne * this.taille, this.taille, this.taille, i * this.taille, j * this.taille, this.taille, this.taille);

} else if (this.clefs[id].type === "sprite") {

if (!this.clefs[id].memoireBoucle) {

if (this.clefs[id].peutAnimer) {

this.clefs[id].frame += this.clefs[id].allure;

}

if (this.clefs[id].frame >= this.clefs[id].sprite.sep) {

if (!this.clefs[id].boucle) {

this.clefs[id].peutAnimer = false;

}

this.clefs[id].frame = 0;

}

this.clefs[id].memoireBoucle = true;

// on sait quel id est déjà passé :^)

this.nettoyer[id] = true;

}

this.ctx.drawImage(this.clefs[id].sprite.img, Math.floor(this.clefs[id].frame) * this.taille, 0, this.taille, this.taille, i * this.taille, j * this.taille, this.taille, this.taille);

} else {

var sourceX = Math.floor(this.clefs[id].apparence % 16) * this.taille;

var sourceY = Math.floor(this.clefs[id].apparence / 16) * this.taille;

this.ctx.drawImage(this.ressources.feuille.img, sourceX, sourceY, this.taille, this.taille, i * this.taille, j * this.taille, this.taille, this.taille);

}

}

}

for (var i = 0; i < this.nettoyer.length; i++) {

if (this.nettoyer[i]) {

this.clefs[i].memoireBoucle = false;

}

}

if (this.niveaux[this.niveauActuel].indice) {

this.boite(0, this.H - 32, this.L, 32);

this.ecrire(this.niveaux[this.niveauActuel].indice, this.L / 2, this.H - 20);

}

}

/*

______ _

| ____| (_)

| |__ _ __ _ ___ _ _

| __| | '_ \ | |/ _ \ | | |

| |____| | | | | | __/ |_| |

|______|_| |_| | |\___|\__,_|

_/ |

|__/

*/

initialiserMap() {

this.terrain = {};

this.arret = false;

this.terrain.geometrie = JSON.parse(JSON.stringify(this.niveaux[this.niveauActuel].geometrie));

this.terrain.dimension = {

x: this.terrain.geometrie[0].length,

y: this.terrain.geometrie.length

};

this.terrain.apparence = [];

this.bitMasking();

}

initJoueur() {

this.effets = [];

this.cat = [];

let posCat = this.chercheClef("joueur");

for (var i = 0; i < posCat.length; i++) {

this.cat.push(new Entite(this, posCat[i].pos.x, posCat[i].pos.y, this.ressources.joueurSprite));

}

}

rendu() {

this.renduTerrain();

for (var i = 0; i < this.cat.length; i++) {

this.cat[i].rendu();

}

for (var i = this.effets.length - 1; i >= 0; i--) {

this.effets[i].rendu();

}

// afficher indice

}

boucle() {

this.ctx.fillStyle = "black";

this.ctx.fillRect(0, 0, this.L, this.H);

this.rendu();

if (!this.arret) {

this.animation = requestAnimationFrame(() => this.boucle());

}

}

outro() {

cancelAnimationFrame(this.animation);

this.animation = null;

this.arret = true;

this.ctx.fillStyle = "black";

let x = 0;

let cibleX = this.H / 2;

let departX = 0;

let monde = this;

this.transition.temps = new Date();

boucle();

function boucle() {

let time = new Date() - monde.transition.temps;

if (time < monde.transition.duration) {

monde.ctx.fillRect(0, 0, monde.L, x);

monde.ctx.fillRect(0, monde.H, monde.L, x * -1);

x = Math.easeInOutQuart(time, departX, cibleX - departX, monde.transition.duration);

requestAnimationFrame(boucle);

} else {

if (monde.niveauActuel < monde.niveaux.length) {

monde.phase("start");

cancelAnimationFrame(boucle);

} else {

// fin du jeu

monde.arret = true;

monde.phase("fin");

monde.niveauActuel = 0;

}

}

}

}

intro() {

this.initialiserMap();

let x = this.H / 2;

let cibleX = 0;

let departX = this.H / 2;

let monde = this;

this.transition.temps = new Date();

boucle();

function boucle() {

let time = new Date() - monde.transition.temps;

if (time < monde.transition.duration) {

monde.renduTerrain();

monde.ctx.fillStyle = "black";

monde.ctx.fillRect(0, 0, monde.L, x);

monde.ctx.fillRect(0, monde.H, monde.L, x * -1);

x = Math.easeInOutQuart(time, departX, cibleX - departX, monde.transition.duration);

requestAnimationFrame(boucle);

} else {

monde.initJoueur();

monde.boucle();

cancelAnimationFrame(boucle);

}

}

}

phase(phase) {

this.etat = phase;

cancelAnimationFrame(this.animation);

this.animation = null;

this.ctx.fillStyle = "#fff1e8";

this.ctx.fillRect(0, 0, this.L, this.H);

switch (phase) {

case "menu":

// affiche le menu du jeu

let pat = this.ctx.createPattern(this.ressources.pattern.img, "repeat");

this.ctx.fillStyle = pat;

this.ctx.fillRect(0, 0, this.L, this.H);

this.ctx.drawImage(this.ressources.titre.img, 0, 0);

this.menu.rendu();

this.ctx.fillStyle = "#83769c";

this.ctx.fillRect(0, this.H - 35, this.L, 18);

this.ecrire("arrow keys to select 'x' to confirm", this.L / 2, this.H - 30);

break;

case "start":

this.intro();

break;

case "fin":

// affiche le tableau de mort du joueur

this.ecrire("thanks for playing :) !", this.L / 2, 15);

this.ecrire("if you have something to tell me about", this.L / 2, 40);

this.ecrire("this pen please do so", this.L / 2, 55);

this.ecrire("in the comment section.", this.L / 2, 70);

this.ecrire("any feedback is appreciated", this.L / 2, 85);

this.ctx.fillStyle = "#83769c";

this.ctx.fillRect(0, this.H - 35, this.L, 18);

this.ecrire("press 'c' to return to menu", this.L / 2, this.H - 30);

break;

case "regles":

// affiche les regles

this.ecrire("game control : ", this.L / 2, 15);

this.ecrire("arrow keys to move", this.L / 2, 60);

this.ecrire("'f' to toggle fullscreen", this.L / 2, 80);

this.ecrire("'r' if you're stuck", this.L / 2, 100);

this.ecrire("'e' to exit the game", this.L / 2, 120);

this.ctx.fillStyle = "#83769c";

this.ctx.fillRect(0, this.H - 35, this.L, 18);

this.ecrire("press 'c' to return to menu", this.L / 2, this.H - 30);

break;

case "info":

// Affiche les infos

this.ecrire("about : ", this.L / 2, 15);

this.ecrire("made with html5 canvas", this.L / 2, 40);

this.ecrire("by gtibo on codepen", this.L / 2, 55);

this.ecrire("credits:", this.L / 2, 80);

this.ecrire("sound effect : noiseforfun.com", this.L / 2, 100);

this.ctx.fillStyle = "#83769c";

this.ctx.fillRect(0, this.H - 35, this.L, 18);

this.ecrire("press 'c' to return to menu", this.L / 2, this.H - 30);

break;

case "niveaux":

// Afficher menu niveaux

this.menuNiveaux.rendu();

this.ctx.fillStyle = "#83769c";

this.ctx.fillRect(0, this.H - 35, this.L, 28);

this.ecrire("arrow keys to select 'x' to confirm", this.L / 2, this.H - 30);

this.ecrire("press 'c' to return to menu", this.L / 2, this.H - 20);

break;

default:

console.log("aucune action reconnue");

}

}

action(action) {

switch (action) {

case "suivant":

let tab = [];

for (var i = 0; i < this.cat.length; i++) {

tab.push(this.cat[i].validation);

}

let confirmation = tab.every(function(vrai) {

return vrai === true;

});

if (confirmation) {

this.niveauActuel += 1;

if (this.niveauMax < this.niveauActuel) {

this.niveauMax = this.niveauActuel;

localStorage.setItem("copycat", JSON.stringify(this.niveauActuel));

}

this.outro();

this.sons.bravo.url.play();

}

break;

case "autre":

break;

default:

console.log("aucune action reconnue");

}

}

}

let parametres = {

taille: 16,

zoom: 2,

stockImages: [{

img: "https://image.ibb.co/mHNuWF/font.png",

nom: "pixelFont"

}, {

img: "https://image.ibb.co/hzo1BF/curseur.png",

nom: "curseur"

}, {

img: "https://image.ibb.co/j1Zmdv/titre.png",

nom: "titre"

}, {

img: "https://image.ibb.co/hKwMBF/joueur.png",

nom: "joueurSprite",

sep: 12,

ligne: 1

}, {

img: "https://image.ibb.co/h2Ns1F/explosion.png",

nom: "explosion",

sep: 9,

ligne: 1

}, {

img: "https://image.ibb.co/b7aegF/feuille.png",

nom: "feuille"

}, {

img: "https://image.ibb.co/mwXuWF/sortie.png",

nom: "sortie",

sep: 10

}, {

img: "https://image.ibb.co/k95ZFa/poussiere.png",

nom: "poussiere",

sep: 9,

ligne: 1

}, {

img: "https://image.ibb.co/j7aZFa/pattern.png",

nom: "pattern"

}, {

img: "https://image.ibb.co/gAGzyv/lock.png",

nom: "lock"

}, ],

stockSon: [{

url: "http://www.noiseforfun.com/waves/interface-and-media/NFF-select-04.wav",

nom: "mouvement"

}, {

url: "http://www.noiseforfun.com/waves/interface-and-media/NFF-select.wav",

nom: "selection"

}, {

url: "http://www.noiseforfun.com/waves/musical-and-jingles/NFF-bravo.wav",

nom: "bravo"

}, {

url: "http://www.noiseforfun.com/waves/interface-and-media/NFF-click-switch.wav",

nom: "validation"

}, {

url: "http://www.noiseforfun.com/waves/interface-and-media/NFF-bubble-input.wav",

nom: "apparition"

}, {

url: "http://www.noiseforfun.com/waves/action-and-game/NFF-moving-block.wav",

nom: "eboulement"

}, ],

clefs: [{

type: "tuile",

nom: "eau",

id: 0,

collision: true,

apparence: "auto",

ligne: 3

}, {

type: "tuile",

nom: "herbe",

id: 1,

collision: false,

apparence: 1

}, {

type: "tuile",

nom: "mur",

id: 2,

collision: true,

apparence: "auto",

ligne: 1

}, {

type: "tuile",

nom: "glace",

action: "glace",

id: 3,

collision: false,

apparence: "auto",

ligne: 2

}, {

type: "sprite",

nom: "suivant",

id: 4,

collision: false,

action: "suivant",

apparence: "sortie",

ligne: 2,

allure: 0.3

}, {

type: "tuile",

nom: "joueur",

id: 5,

collision: false,

apparence: 5

}, {

type: "tuile",

nom: "piege",

action: "piege",

id: 6,

collision: false,

apparence: 6

}, {

type: "tuile",

nom: "trou",

id: 7,

collision: true,

apparence: 7

}, {

type: "tuile",

nom: "barriere",

id: 8,

collision: true,

apparence: "auto",

ligne: 4

}, {

type: "tuile",

nom: "flecheGauche",

action: "gauche",

id: 9,

collision: false,

apparence: 9

}, {

type: "tuile",

nom: "flecheHaut",

action: "haut",

id: 10,

collision: false,

apparence: 10

}, {

type: "tuile",

nom: "flecheDroite",

action: "droite",

id: 11,

collision: false,

apparence: 11

}, {

type: "tuile",

nom: "flecheBas",

action: "bas",

id: 12,

collision: false,

apparence: 12

}, ],

}

let niveaux = [

{

"nom": "debut",

"indice": "try to move forward",

"geometrie": [

[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[0, 0, 1, 1, 1, 1, 1, 8, 8, 8, 1, 1, 1, 1, 1, 1],

[0, 1, 1, 1, 1, 1, 1, 8, 1, 8, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 8, 4, 8, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 8, 1, 8, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 8, 1, 8, 1, 1, 1, 1, 1, 0],

[1, 1, 1, 1, 1, 1, 1, 8, 1, 8, 1, 1, 1, 1, 0, 0],

[1, 1, 1, 1, 1, 1, 1, 8, 5, 8, 1, 1, 1, 0, 0, 0],

[1, 1, 1, 1, 1, 1, 1, 8, 1, 8, 1, 1, 0, 0, 0, 0],

[1, 1, 1, 1, 1, 1, 1, 8, 8, 8, 1, 1, 0, 0, 0, 0],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

]

}, {

"nom": "adeuxcestmieux",

"geometrie": [

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 8, 8, 8, 8, 8, 1, 1, 8, 8, 8, 8, 8, 1, 1],

[1, 1, 8, 1, 1, 1, 8, 1, 1, 8, 1, 1, 1, 8, 1, 1],

[1, 1, 8, 1, 4, 1, 8, 1, 1, 8, 1, 4, 1, 8, 1, 1],

[1, 1, 8, 1, 1, 1, 8, 1, 1, 8, 1, 1, 1, 8, 1, 1],

[1, 1, 8, 1, 1, 1, 8, 1, 1, 8, 1, 1, 1, 8, 1, 1],

[1, 1, 8, 2, 2, 1, 8, 1, 1, 8, 1, 2, 2, 8, 1, 1],

[1, 1, 8, 1, 1, 1, 8, 1, 1, 8, 1, 1, 1, 8, 1, 1],

[1, 1, 8, 1, 5, 1, 8, 1, 1, 8, 1, 5, 1, 8, 1, 1],

[1, 1, 8, 1, 1, 1, 8, 1, 1, 8, 1, 1, 1, 8, 1, 1],

[1, 1, 8, 8, 8, 8, 8, 1, 1, 8, 8, 8, 8, 8, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

]

}, {

"nom": "séparé",

"geometrie": [

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 1, 1],

[1, 1, 2, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 2, 1, 1],

[1, 1, 2, 1, 1, 1, 1, 0, 0, 1, 4, 1, 1, 2, 1, 1],

[1, 1, 2, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 2, 1, 1],

[1, 1, 2, 4, 1, 1, 1, 0, 0, 1, 2, 1, 1, 2, 1, 1],

[1, 1, 2, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 2, 1, 1],

[1, 1, 2, 8, 8, 8, 1, 0, 0, 1, 1, 1, 1, 2, 1, 1],

[1, 1, 2, 5, 1, 1, 1, 0, 0, 1, 1, 5, 1, 2, 1, 1],

[1, 1, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

]

},

{

"nom": "aquatrecestmieux",

"geometrie": [

[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],

[2, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 2],

[2, 1, 1, 1, 1, 1, 1, 0, 0, 1, 5, 1, 1, 1, 1, 2],

[2, 1, 2, 4, 1, 1, 1, 0, 0, 1, 1, 1, 4, 1, 2, 2],

[2, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 2],

[2, 1, 1, 1, 1, 5, 1, 0, 0, 1, 2, 1, 1, 1, 1, 2],

[2, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 2],

[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2],

[2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2],

[2, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 2],

[2, 1, 1, 1, 4, 1, 1, 0, 0, 1, 1, 1, 4, 5, 1, 2],

[2, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 2],

[2, 1, 1, 1, 2, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 2],

[2, 2, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 2],

[2, 1, 1, 5, 1, 1, 1, 0, 0, 1, 1, 1, 2, 1, 1, 2],

[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

]

},

{

"nom": "introTrou",

"indice": "you can restart with touch 'r'",

"geometrie": [

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1],

[1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1],

[1, 1, 1, 1, 2, 1, 1, 1, 1, 5, 8, 2, 1, 1, 1, 1],

[1, 1, 1, 1, 2, 8, 6, 8, 8, 8, 8, 2, 1, 1, 1, 1],

[1, 1, 1, 1, 2, 1, 1, 1, 6, 1, 1, 2, 1, 1, 1, 1],

[1, 1, 1, 1, 2, 8, 8, 8, 1, 8, 1, 2, 1, 1, 1, 1],

[1, 1, 1, 1, 2, 1, 1, 1, 6, 8, 1, 2, 1, 1, 1, 1],

[1, 1, 1, 1, 2, 8, 1, 8, 8, 8, 8, 2, 1, 1, 1, 1],

[1, 1, 1, 1, 2, 1, 6, 1, 1, 1, 1, 2, 1, 1, 1, 1],

[1, 1, 1, 1, 2, 1, 8, 8, 8, 8, 1, 2, 1, 1, 1, 1],

[1, 1, 1, 1, 2, 1, 1, 1, 1, 8, 4, 2, 1, 1, 1, 1],

[1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

]

}, {

"nom": "introGlace",

"indice": "you can't change your direction on ice",

"geometrie": [

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 8, 1, 5, 1, 1, 8, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 8, 1, 2, 2, 2, 8, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 8, 3, 3, 3, 3, 8, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 8, 3, 3, 3, 3, 8, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 8, 3, 3, 1, 3, 8, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 8, 2, 3, 3, 3, 8, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 8, 3, 3, 3, 3, 8, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 8, 3, 3, 3, 3, 8, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 8, 3, 3, 4, 3, 8, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

]

}, {

"nom": "glisseadeux",

"geometrie": [

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1],

[1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1],

[1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 2, 1],

[1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 8, 5, 1, 1, 2, 1],

[1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 2, 1],

[1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1],

[1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1],

[1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1],

[1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1],

[1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1],

[1, 2, 1, 1, 5, 1, 3, 3, 3, 3, 3, 4, 1, 1, 2, 1],

[1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1],

[1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1],

[1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

]

}, {

"nom": "ice cavern",

"geometrie": [

[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],

[2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],

[2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2],

[2, 2, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 4, 2, 2],

[2, 2, 2, 3, 3, 2, 3, 3, 2, 3, 2, 2, 3, 2, 2, 2],

[2, 2, 2, 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 3, 1, 1, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 5, 2, 2, 2],

[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2],

[2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],

[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

]

}, {

"nom": "introswitch",

"indice": "switches are cool",

"geometrie": [

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 8, 8, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 12, 3, 3, 3, 9, 5, 8, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 3, 1, 1, 1, 8, 8, 8, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 8, 4, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 8, 4, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 3, 1, 1, 1, 8, 8, 8, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 10, 3, 3, 3, 9, 5, 8, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 8, 8, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

]

}, {

"nom": "glissefeche",

"geometrie": [

[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],

[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],

[2, 2, 2, 3, 3, 11, 1, 3, 3, 3, 3, 12, 2, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 3, 3, 2, 2, 2],

[2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 2, 2, 2],

[2, 2, 2, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2, 2],

[2, 2, 2, 3, 3, 11, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 1, 3, 2, 2, 2, 2],

[2, 2, 2, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 10, 2, 2, 2],

[2, 2, 2, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 2, 2, 2],

[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],

[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

]

}, {

"nom": "unpeudaide",

"geometrie": [

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 8, 8, 8, 1, 1, 1, 1, 1, 1, 8, 8, 8, 1, 1],

[1, 1, 8, 1, 8, 1, 1, 1, 1, 1, 1, 8, 1, 8, 1, 1],

[1, 1, 8, 4, 8, 1, 1, 1, 1, 1, 1, 8, 1, 8, 1, 1],

[1, 1, 8, 1, 8, 1, 1, 1, 1, 1, 1, 8, 1, 8, 1, 1],

[1, 1, 8, 1, 8, 1, 1, 1, 1, 1, 1, 8, 6, 8, 1, 1],

[1, 1, 8, 1, 8, 1, 1, 1, 1, 1, 1, 8, 4, 8, 1, 1],

[1, 1, 8, 1, 8, 1, 1, 1, 1, 1, 1, 8, 3, 8, 1, 1],

[1, 1, 8, 5, 8, 1, 1, 1, 1, 1, 1, 8, 3, 8, 1, 1],

[1, 1, 8, 1, 8, 1, 1, 1, 1, 1, 1, 8, 5, 8, 1, 1],

[1, 1, 8, 8, 8, 1, 1, 1, 1, 1, 1, 8, 8, 8, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

]

}

];

let demo = new Monde(parametres, niveaux);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值