diff --git a/site/vue/css/style.css b/site/vue/css/style.css index 9594076..7a790d7 100644 --- a/site/vue/css/style.css +++ b/site/vue/css/style.css @@ -8,6 +8,10 @@ src: url(../font/dys.otf); } +:root { + --cool-color: #fe8a71; +} + * { transition: .01s; } @@ -385,6 +389,7 @@ hr { background-color: lightcoral; cursor: pointer; } + .input-color-container { position: relative; overflow: hidden; @@ -393,20 +398,36 @@ hr { border: solid 2px #ddd; border-radius: 40px; } -input[type=color]{ + +input[type=color] { position: absolute; - right: -8px; - top: -8px; - width: 56px; - height: 56px; - border: none; + right: -8px; + top: -8px; + width: 56px; + height: 56px; + border: none; } -.input_line{ +.input_line { display: flex; justify-content: center; } -.colomn_line_input{ - margin-right:25px; - margin-left:25px; + +.colomn_line_input { + margin-right: 25px; + margin-left: 25px; +} + +#button_next_level { + height: 50px; + width: 150px; + transition: 0.5s; +} + +#button_next_level:hover { + cursor: pointer; +} + +#show_stage { + margin: 0 20px 0 20px; } \ No newline at end of file diff --git a/site/vue/index.html b/site/vue/index.html index ef4edfa..2975901 100644 --- a/site/vue/index.html +++ b/site/vue/index.html @@ -12,6 +12,21 @@
+ @@ -61,36 +77,37 @@

- + - - + + - - + + - - + + - - + + - +
a b S
0 0 0
0 1 1
1 0 1
1 1 1




-

Ne plus afficher les aides

+

Ne plus afficher les aides

@@ -102,28 +119,30 @@

- + - - + + - - + + - +
a S
0 1
1 0




-

+

@@ -353,11 +375,12 @@ - - + + - + + diff --git a/site/vue/js/const.js b/site/vue/js/const.js index 7dfbf2f..4174312 100644 --- a/site/vue/js/const.js +++ b/site/vue/js/const.js @@ -1,5 +1,5 @@ //Portes Logiques -var imageHeight = 75/2; +var imageHeight = 75 / 2; var imageWidth = 50; var imageRotation = 0; @@ -19,6 +19,7 @@ var colorLineInnactive = "black"; var colorLineActive = "#4CFEFE";//FFF033 const lineStroke = 4; const pourcentageBreak = 15; +const tension = 0.3; //switch const SwitchHeight = 25; @@ -50,4 +51,10 @@ var windowHeight = 0; var mobile = false; -var allowedInfoPorte = true; \ No newline at end of file +var allowedInfoPorte = true; + +var double = false; + +var click = 0; + +var successPanel = true; \ No newline at end of file diff --git a/site/vue/js/createElement.js b/site/vue/js/createElement.js index a3299c4..f27dddd 100644 --- a/site/vue/js/createElement.js +++ b/site/vue/js/createElement.js @@ -32,6 +32,7 @@ function createSwitch(id, x, y) { id: id, x: x, y: y, + id3: [], }; switchsInfo.push(switche); switchsInfoCopy.push(switche); @@ -62,6 +63,7 @@ function createLine(points, id) { stroke: colorLineInnactive, strokeWidth: lineStroke, id: id, + tension: tension, }); layer.add(line); } @@ -89,15 +91,16 @@ function createLink(entre, sortie) { } createLine([switchMidX, switchMidY, logiqueMidX, logiqueMidY], "line" + lineId); setLine(sortie, "id1", "line" + lineId); - + let truc = entre.x; - entre.id3 = "line" + lineId; + getSwitchById(entre.id()).id3.push("line" + lineId); break; case "id2": - + createLine([entre.getX() + entre.getWidth(), entre.getY() + entre.getHeight() / 2, sortie.x, sortie.y + (imageHeight / 3) * 2], "line" + lineId); setLine(sortie, "id2", "line" + lineId); - entre.id3 = "line" + lineId; + getSwitchById(entre.id()).id3.push("line" + lineId); + break; } } @@ -135,9 +138,9 @@ function createLink(entre, sortie) { break; } break; - default: - console.log("error"); - break; + default: + console.log("error"); + break; } } @@ -221,14 +224,14 @@ function createLinkSwitch() { var distance = stage.width(); //Trouver la porte logique la plus proche des switchs logiques.forEach(function (element) { - if(element.type != "inv"){ + if (element.type != "inv") { if (element.id1 == null || element.id2 == null) { if (element.x < distance) { logique = element; distance = element.x; } } - }else{ + } else { if (element.id1 == null) { if (element.x < distance) { logique = element; @@ -272,7 +275,7 @@ function getNumberOfSwitchEmpty() { } function createAllLinkSwitch() { - for(let i = 0; i < numberOfSwitch;i++){ + for (let i = 0; i < numberOfSwitch; i++) { createLinkSwitch(); } /*while (getNumberOfSwitchEmpty() > 0) { @@ -312,8 +315,8 @@ function createLinkAuto(logiqueId) { } function createStage(container) { - height = document.querySelector("#"+container).offsetHeight; - width = document.querySelector("#"+container).offsetWidth; + height = document.querySelector("#" + container).offsetHeight; + width = document.querySelector("#" + container).offsetWidth; if (window.innerWidth <= 900) { if (!mobile) { mobile = true; @@ -321,22 +324,22 @@ function createStage(container) { container: container, width: height, height: width, - rotation:90, - x:height, + rotation: 90, + x: height, }); } stage = new Konva.Stage({ container: container, width: height, height: width, - rotation:90, - x:height, + rotation: 90, + x: height, }); - + } else { if (mobile) { mobile = false; - }else{ + } else { stage = new Konva.Stage({ container: container, width: width, @@ -346,5 +349,5 @@ function createStage(container) { } stage.draw(); - + } \ No newline at end of file diff --git a/site/vue/js/func.js b/site/vue/js/func.js index d6e4e41..4f36311 100644 --- a/site/vue/js/func.js +++ b/site/vue/js/func.js @@ -50,6 +50,10 @@ function setColor(color) { document.querySelectorAll(".border").forEach(function (element) { element.style.border = "5px solid" + whiteColor; }); + document.querySelectorAll(".color").forEach(function (element) { + element.style.color = whiteColor; + }); + } else { document.body.style.color = blackColor; @@ -65,11 +69,27 @@ function setColor(color) { document.querySelectorAll(".border").forEach(function (element) { element.style.border = "5px solid" + blackColor; }); + document.querySelectorAll(".color").forEach(function (element) { + element.style.color = blackColor; + }); } //fun document.querySelector(".secret").style.color = "#fe8a71"; } +document.querySelector("#button_next_level").onmouseover = function () { mouseOver() }; +document.querySelector("#button_next_level").onmouseout = function () { mouseOut() }; + +function mouseOver() { + document.querySelector("#button_next_level").style.backgroundColor = document.querySelector(".modal-body").style.borderColor; + document.querySelector("#button_next_level").style.color = document.querySelector(".modal-body").style.backgroundColor; +} + +function mouseOut() { + document.querySelector("#button_next_level").style.backgroundColor = document.querySelector(".modal-body").style.backgroundColor; + document.querySelector("#button_next_level").style.color = document.querySelector(".modal-body").style.borderColor; +} + function setLang(newLang) { var textToChange = document.querySelectorAll(".txt"); if (newLang === "fr") { @@ -115,9 +135,9 @@ function setLine(logiqueElement, lineId, lineName) { if (element.name === logiqueElement.name) { Object.keys(element).map(function (objectKey, index) { if (objectKey == lineId) { - if(lineId === "id3"){ + if (lineId === "id3") { element[objectKey].push(lineName); - }else + } else element[objectKey] = lineName; } }); @@ -125,7 +145,7 @@ function setLine(logiqueElement, lineId, lineName) { }); } -function changeSwitchColor(switchId){ +function changeSwitchColor(switchId) { let swi = stage.findOne("#" + switchId); var colorswi = swi.fill() == colorSwitchActiveBackground ? colorSwitchInnactiveBackground : colorSwitchActiveBackground; swi.fill(colorswi); @@ -156,6 +176,71 @@ function checkAllSortieLogique() { }); } +function getSwitchById(switchId) { + let switche; + switchsInfoCopy.forEach(function (element) { + if (element.id == switchId) + switche = element; + }); + return switche; +} + +function checkEntreCroisement(logiqueId) { + let croisement = false; + let logique = findLogique(logiqueId); + if (logique.id1 != null && logique.id2 != null) { + if (stage.findOne("#" + logique.id1).points()[1] > stage.findOne("#" + logique.id2).points()[1]) { + if (getSwitchFromLine(logique.id1) != null && getSwitchFromLine(logique.id2) != null) { + let switch1 = getSwitchFromLine(logique.id1).id; + let switch2 = getSwitchFromLine(logique.id2).id; + removeLine(logique.id1); + removeLine(logique.id2); + logique.id1 = null; + logique.id2 = null; + createLink(stage.findOne("#" + switch1), logique); + createLink(stage.findOne("#" + switch2), logique); + } else if (getLogiqueFromLine(logique.id1) != null && getLogiqueFromLine(logique.id2) != null) { + console.log("blem la "); + let logique1 = getLogiqueFromLine(logique.id1); + let logique2 = getLogiqueFromLine(logique.id2); + + removeLine(logique.id1); + removeLine(logique.id2); + + logique.id1 = null; + logique.id2 = null; + createLink(logique1, logique); + createLink(logique2, logique); + } + else { + console.log("wait"); + } + croisement = true; + } + } + return croisement; +} + +function getLogiqueFromLine(lineId) { + var logique = null; + logiques.forEach(function (element) { + element.id3.forEach(function (line) { + if (line == lineId) logique = element; + }) + }); + return logique; +} + +function getSwitchFromLine(lineId) { + var switche = null; + switchsInfoCopy.forEach(function (element) { + element.id3.forEach(function (line) { + if (line == lineId) switche = element; + }); + }); + return switche; +} + function checkSortieLogique(logiqueId) { let logique = findLogique(logiqueId); logiques.forEach(function (element, index) { @@ -226,6 +311,21 @@ function checkSortieLogique(logiqueId) { }); } +function isLineCollapsing() { + var isCollapsing = false; + if (stage.findOne("#s2") != undefined && stage.findOne("#s2") != null && stage.findOne("#s1") != undefined && stage.findOne("#s1") != null) { + var distance = stage.findOne("#s2").getY() - stage.findOne("#s1").getY(); + switchsInfoCopy.forEach(function (element) { + element.id3.forEach(function (line) { + if (Math.abs(element.y - stage.findOne("#" + line).points()[7]) > distance) { + isCollapsing = true; + } + }) + }); + } + return isCollapsing; +} + function getRandomArbitrary(min, max) { return Math.floor(Math.random() * (max - min) + min); } @@ -244,22 +344,70 @@ function checkLineSwitch(switchId) { return false; } +function activeSwitch(idSwitch) { + getSwitchById(idSwitch); + var switche = getSwitchById(idSwitch); + changeSwitchColor(switche.id); + switche.id3.forEach(function (element) { + changeLineColor(element); + }); + +} + +function checkIfEnd() { + var ter = true; + endLines.forEach(function (element) { + if (stage.findOne("#line" + element).stroke() == colorLineInnactive) { + ter = false; + + } + }); + return ter; +} + function checkEnd() { let ter = true; endLines.forEach(function (element) { - if (stage.findOne("#line" + element).stroke() == "black") { + if (stage.findOne("#line" + element).stroke() == colorLineInnactive) { ter = false; } }); if (ter && !isTuto) { - setTimeout(() => { nextLevel(); }, 100); + setTimeout(() => { success(); }, 100); } } +function success() { + timeTot = timeTot + timer.getTimeValues().seconds; + timer.stop(); + stage.findOne("#end").fill("yellow"); + layer.draw(); + if (successPanel) { + openModal("success"); + document.querySelector("#click_number").innerHTML = click; + var previewStage = new Konva.Stage({ + container: 'show_stage', + width: window.innerWidth / 1.5, + height: window.innerHeight / 2.5, + scaleX: 1 / 1.5, + scaleY: 1 / 1.5 + }); + let previewLayer = layer.clone({ hitGraphEnabled: false }); + previewStage.add(previewLayer); + previewLayer.batchDraw(); + } else { + setTimeout(() => { nextLevel(); }, 1000); + } +} + +function successCheck() { + if (document.querySelector("#success_check_input").checked === true) successPanel = true; + else successPanel = false; +} + function nextLevel() { niveauActuel++; - timeTot = timeTot + timer.getTimeValues().seconds; launchGameOne(); } diff --git a/site/vue/js/init.js b/site/vue/js/init.js index 40785bd..cc634ef 100644 --- a/site/vue/js/init.js +++ b/site/vue/js/init.js @@ -1,9 +1,10 @@ function initAllSwitch() { + switchs.forEach(function (element) { let switche = stage.findOne("#" + element); switche.on('click touchstart', function () { - changeSwitchColor(switche.id()); - changeLineColor(switche.id3); + click++; + activeSwitch(switche.id()); checkAllSortieLogique(); layer.draw(); checkEnd(); @@ -15,14 +16,11 @@ function initAllSwitch() { document.body.style.cursor = "default"; }); //faire le random de l'inversion de switch - if(getRandomArbitrary(0,3) == 1){ - changeSwitchColor(switche.id()); - changeLineColor(switche.id3); + if (getRandomArbitrary(0, 3) == 1) { + activeSwitch(switche.id()); } }); - - } function initLayer() { @@ -40,7 +38,7 @@ function initEnd() { var listeLogique = []; let countLogique = 0; logiques.forEach(function (element) { - if(element.id3.length === 0) { + if (element.id3.length === 0) { countLogique++; listeLogique.push(element); } @@ -48,8 +46,7 @@ function initEnd() { listeLogique.sort(compareLogiqueForEnd); end.position = countLogique; end.let = countLogique; - console.log(listeLogique); listeLogique.forEach(function (element) { - createLink(element, end); + createLink(element, end); }); } \ No newline at end of file diff --git a/site/vue/js/lang.js b/site/vue/js/lang.js index bd98590..404516b 100644 --- a/site/vue/js/lang.js +++ b/site/vue/js/lang.js @@ -9,16 +9,16 @@ const lang = { retour: "Retour", dysfont: "Dyslexie :", setting_title_perso: "Personnalisation du jeu", - active_line_setting : "Couleur lignes actives", - inactive_line_setting : "Couleur lignes inactives", - active_switch_setting : "Couleur intérupteur actif", - inactive_switch_setting : "Couleur intérupteur inactif", + active_line_setting: "Couleur lignes actives", + inactive_line_setting: "Couleur lignes inactives", + active_switch_setting: "Couleur intérupteur actif", + inactive_switch_setting: "Couleur intérupteur inactif", scoreTitle: "Tableau des scores", infoTitle: "Comment jouer ?", gameOverTitle: "Perdu", inactive_end_setting: "Couleur objectif : ", - modeDeJeu : "Mode de jeu", - niveau : "Niveau ", + modeDeJeu: "Mode de jeu", + niveau: "Niveau ", temps: "Temps : ", infoFirstTimeEt: "Porte \"et\"", infoFirstTimeEtInfo1: "L'opérateur ET renvoie VRAI seulement si ses deux entrées sont à 1.


Voici la table de vérité :", @@ -26,10 +26,12 @@ const lang = { infoFirstTimeOuInfo1: "L'opérateur OU renvoie VRAI si au moins une entrés est à 1.


Voici la table de vérité :", infoFirstTimeinv: "Porte \"non\"", infoFirstTimeinvInfo1: "La sortie est l'inverse de l'entrée.


Voici la table de vérité :", - cache_reinit:"Réinitialiser toutes les données en caches", + cache_reinit: "Réinitialiser toutes les données en caches", reset_cache_message: "Toutes les données ont été supprimées.


La page va automatiquement se rafraichir dans 3s ...", reset: "Reset", - close_helps:"Ne plus afficher les aides", + close_helps: "Ne plus afficher les aides", + successTitle: "Niveau réussi !", + successInfo: "Vous avez réussi en ", }, en: { @@ -40,17 +42,17 @@ const lang = { mode2: "Chameleon", themeDark: "Dark Theme :", retour: "Back", - dysfont:"Dyslexia :", + dysfont: "Dyslexia :", setting_title_perso: "Game customization", - active_line_setting : "Color active lines : ", - inactive_line_setting : "Color inactive lines : ", - active_switch_setting : "Color inactive switch : ", - inactive_switch_setting : "Color inactive switchs : ", + active_line_setting: "Color active lines : ", + inactive_line_setting: "Color inactive lines : ", + active_switch_setting: "Color inactive switch : ", + inactive_switch_setting: "Color inactive switchs : ", scoreTitle: "Scoreboard", infoTitle: "How to play ?", inactive_end_setting: "End color : ", - modeDeJeu : "Gamemode", - niveau : "Level ", + modeDeJeu: "Gamemode", + niveau: "Level ", temps: "Time : ", gameOverTitle: "Game Over", } diff --git a/site/vue/js/logique.js b/site/vue/js/logique.js index 9bf8c1a..c7e44da 100644 --- a/site/vue/js/logique.js +++ b/site/vue/js/logique.js @@ -8,42 +8,55 @@ function findLogique(logiqueId) { return elem; } -function giveSwitchYWithLineId(lineId){ +function giveSwitchYWithLineId(lineId) { var elementY = null; - switchsInfoCopy.forEach(function(element){ - if(stage.findOne("#"+element.id).id3 == lineId){ + switchsInfoCopy.forEach(function (element) { + if (stage.findOne("#" + element.id).id3 == lineId) { elementY = (element.y); } }); return elementY; } -function removeLineFromSwitch(lineId){ - switchsInfoCopy.forEach(function(element){ - stage.findOne("#"+element.id).id3.forEach(function(element){ - if(element == lineId){ - ax = stage.findOne("#"+element.id).id3.indexOf(lineId); - stage.findOne("#"+element.id).id3.splice(ax, 1); +function removeLineFromSwitch(lineId) { + switchsInfoCopy.forEach(function (element) { + element.id3.forEach(function (line) { + if (line == lineId) { + ax = element.id3.indexOf(lineId); + element.id3.splice(ax, 1); + } + }); + + }); +} +function removeLineFromLogique(lineId) { + logiques.forEach(function (element) { + element.id3.forEach(function (line) { + if (line == lineId) { + ax = element.id3.indexOf(lineId); + element.id3.splice(ax, 1); } }); - }); } -function removeLine(lineId){ +function removeLine(lineId) { //remove from switch - removeLineFromSwitch(lineId); + if (getSwitchFromLine(lineId) != null) + removeLineFromSwitch(lineId); + else + removeLineFromLogique(lineId); let line = stage.findOne("#" + lineId); line.destroy(); } -function giveLineId(logiqueId,entre) { +function giveLineId(logiqueId, entre) { var newEntre = entre; isSwitch = false; - if(entre.id !== undefined){ - switchsInfoCopy.forEach(function(element){ - if(entre.id() == element.id){ + if (entre.id !== undefined) { + switchsInfoCopy.forEach(function (element) { + if (entre.id() == element.id) { isSwitch = true; newEntre = element; } @@ -51,7 +64,7 @@ function giveLineId(logiqueId,entre) { } let lineId = null; let logique = findLogique(logiqueId); - if(logique.y >= newEntre.y){ + if (logique.y >= newEntre.y) { if (logique.type === "inv") { if (logique.id1 == null) { lineId = "id1"; @@ -72,9 +85,9 @@ function giveLineId(logiqueId,entre) { lineId = "id2"; } }*/ - } + } } - }else{ + } else { if (logique.type === "inv") { if (logique.id1 == null) { lineId = "id1"; @@ -86,11 +99,11 @@ function giveLineId(logiqueId,entre) { } else if (logique.id1 == null) { lineId = "id1"; } - - + + } } - + return lineId } @@ -98,11 +111,11 @@ function checkLogiqueLines(logiqueId, lineId) { let logique = findLogique(logiqueId); logiques.forEach(function (element, index) { if (element.name === logique.name) { - Object.keys(element).map(function(objectKey, index) { - if(objectKey == lineId && objectKey != null){ - return true; - } - }); + Object.keys(element).map(function (objectKey, index) { + if (objectKey == lineId && objectKey != null) { + return true; + } + }); } }); return false; diff --git a/site/vue/js/main.js b/site/vue/js/main.js index 5316067..532ac0b 100644 --- a/site/vue/js/main.js +++ b/site/vue/js/main.js @@ -45,6 +45,9 @@ function tutoCreateLayer() { initEnd(); } +width = (window.innerWidth - window.innerWidth / 100 * 10); +height = window.innerHeight / 1.5; + function resetAllTabs(save) { if (!save) { logiques = []; @@ -52,23 +55,27 @@ function resetAllTabs(save) { numberPerColonne = []; liveColonneNumber = []; timeEnd = 5; - switchsInfoCopy = []; + numberOfSwitch = 0; colonneTot = 0; } - switchs = [], lineCount = [], lines = [], endLines = [], end, switchsInfo = [], lineRemove = []; - - width = (window.innerWidth - window.innerWidth / 100 * 10); - height = window.innerHeight / 1.5; + switchs = [], lineCount = [], lines = [], endLines = [], end, switchsInfo = [], lineRemove = [], switchsInfoCopy = []; layer.destroyChildren(); + stage.draw(); } function gameOne() { + document.querySelector("#play_container").style.maxHeight = window.innerHeight / 1.5 + "px"; createGameOne(niveauActuel); + click = 0; + while (checkIfEnd() || isLineCollapsing()) { + resetAllTabs(false); + createGameOne(niveauActuel); + } //console.log(stage); //gameData = new GameData(height,width,2,10,"mode1",false,"play_container"); //gameData.createGame(); @@ -85,8 +92,9 @@ function createGameOne(niveau) { var isOuNonAllowed = false; var isNotAllowed = false; var isOuAllowed = false; + double = false; var firstTime = []; - switch(niveauActuel) { + switch (niveauActuel) { case 1: firstTime.push("et"); break; @@ -133,6 +141,7 @@ function createGameOne(niveau) { numberColonne1 = 4; numberColonne2 = 1; isNotAllowed = true; + double = true; timeEnd = 20; break; case 10: @@ -175,7 +184,7 @@ function createGameOne(niveau) { liveColonneNumber.push([]); timeEnd = 20; insertLogiqueColonne("logique" + logiqueCount, firstTime[0], 0); - if(allowedInfoPorte){ + if (allowedInfoPorte) { openModal('firstTime' + firstTime[0]); timer.pause(); } @@ -218,38 +227,58 @@ function createGameOne(niveau) { logiques.forEach(function (element) { createLinkAuto(element.name); }); - + initEndGame(); +} + +function initEndGame() { + + + + calculNombreSwitch(); switchCreator(numberOfSwitch); - + createAllLinkSwitch(); initAllSwitch(); + + logiques.forEach(function (element) { + checkEntreCroisement(element.name); + }); + createEnd(); initEnd(); initTimer(); checkAllSortieLogique(); - - } -function resetCache(){ +function resetCache() { openModal("reset_cache"); setTimeout(() => { location.reload(); }, 3000); } window.addEventListener('resize', saveStage); +function getSwitchState() { + var stateSwitch = new Array(); + switchsInfoCopy.forEach(function (element) { + if (stage.findOne("#" + element.id).fill() == colorSwitchActiveBackground) stateSwitch.push(1); + else stateSwitch.push(0); + }); + return stateSwitch; +} + function saveStage() { + var oldSwitch = getSwitchState(); resetAllTabs(true); - if(isTuto){ + if (isTuto) { createStage("setting_container"); - }else{ + } else { createStage("play_container"); } - + stage.add(layer); logique2 = logiques; logiques = []; @@ -266,19 +295,25 @@ function saveStage() { logiques.forEach(function (element) { createLinkAuto(element.name); }); - calculNombreSwitch(); - switchCreator(numberOfSwitch); - createAllLinkSwitch(); - initAllSwitch(); - createEnd(); - initEnd(); + initEndGame(); + for (let i = 0; i < oldSwitch.length; i++) { + let id = i + 1; + if (oldSwitch[i] == 1) { + if (stage.findOne("#s" + id).fill() == colorSwitchInnactiveBackground) + activeSwitch("s" + id); + } else { + if (stage.findOne("#s" + id).fill() == colorSwitchActiveBackground) + activeSwitch("s" + id); + } + } checkAllSortieLogique(); + } -function showInfo(){ - if(document.querySelector("#info_check_input").checked) allowedInfoPorte = false; +function showInfo() { + if (document.querySelector("#info_check_input").checked) allowedInfoPorte = false; else allowedInfoPorte = true; } diff --git a/site/vue/txt b/site/vue/txt new file mode 100644 index 0000000..568ed79 --- /dev/null +++ b/site/vue/txt @@ -0,0 +1,11 @@ +Au depart j'avais une idée assez flou du jeu que j'allais réaliser, j'ai d'abord commencer par imaginer fonctionnement, en m'inspirant de l'application mobile Make It True. +J'ai par la suite essayé de réaliser des schéma simple et des circuit court afin de comprendre comment j'allais pouvoir réaliser des circuits plus complexe et comment j'allais m'organiser. +Une fois la réalisation des circuit faites, je devais me pencher sur un mécanisme de fonctionnement, le programme allez devoir créer des niveaux par lui même, et qui soit jouable sur n'importe qu'elle résolution d'écrans. +J'ai d'abord commencer par m'imaginer une grille, composer de lignes et de colonnes, chaque colonne correspond à chaque étapes. la première etant les intérupteur et la derniere la fin/l'objectif. +des portes logiques de même colonne ne peuvent pas êtres connecté les uns vers les autres. + +Par la suite, j'ai eu des soucis, le générateur fonctionnent, je n'avais pas pensé a certains problèmes, comme le fait que les niveaux pouvaient être déjà terminé, ou bien que les fils se croisent. +Pour le croisement des fils j'ai découpé cela en plusieurs étapes. +Premierement, pour le choix d'accrochage, il choisit par défault la porte logique qui se rapproche le plus de son Y. +Mais même avec ceci il restait des problèmes de connection et de fil qui se croisaient, comme quand les distances étaient les mêmes pour 2 portes, +Pour cela j'ai tout simplement créer un converteur qui inverse les 2 entrees.