diff --git a/site/img/1920px-NAND_ANSI.svg.png b/site/img/1920px-NAND_ANSI.svg.png new file mode 100644 index 0000000..d7ed50f Binary files /dev/null and b/site/img/1920px-NAND_ANSI.svg.png differ diff --git a/site/img/1920px-NOR_ANSI.svg.png b/site/img/1920px-NOR_ANSI.svg.png new file mode 100644 index 0000000..028f1dc Binary files /dev/null and b/site/img/1920px-NOR_ANSI.svg.png differ diff --git a/site/img/1920px-NOT_ANSI.svg.png b/site/img/1920px-NOT_ANSI.svg.png new file mode 100644 index 0000000..8b5fc02 Binary files /dev/null and b/site/img/1920px-NOT_ANSI.svg.png differ diff --git a/site/img/logiqueetnon.png b/site/img/logiqueetnon.png new file mode 100644 index 0000000..257d7f2 Binary files /dev/null and b/site/img/logiqueetnon.png differ diff --git a/site/img/non.png b/site/img/non.png new file mode 100644 index 0000000..8f46c79 Binary files /dev/null and b/site/img/non.png differ diff --git a/site/img/nonou.png b/site/img/nonou.png new file mode 100644 index 0000000..bd281b8 Binary files /dev/null and b/site/img/nonou.png differ diff --git a/site/js/const.js b/site/js/const.js index 6357940..a7e8e61 100644 --- a/site/js/const.js +++ b/site/js/const.js @@ -1,12 +1,15 @@ //Portes Logiques -const imageHeight = 45; -const imageWidth = 50; -const imageRotation = 0; +var imageHeight = 45; +var imageWidth = 50; +var imageRotation = 0; //Image const pathImg = "../img/"; const imageLogiqueEt = "eee.png"; const imageLogiqueOu = "logiqueou.png"; +const imageLogiqueEtNon = "logiqueetnon.png"; +const imageLogiqueInv = "non.png"; +const imageLogiqueNonOu = "nonou.png"; const imageEnd = "idea_white.png"; //line @@ -23,4 +26,9 @@ const colorSwitchInnactiveBackground = "red"; const colorSwitchActiveBackground = "green"; //timer -const timeEnd = 15; \ No newline at end of file +var timeEnd = 70; + +//grid +var colonneTot = 4; +var numberPerColonne = [1,1,3]; +var liveColonneNumber = [[],[],[]]; \ No newline at end of file diff --git a/site/js/createElement.js b/site/js/createElement.js index 51968a6..4eb1599 100644 --- a/site/js/createElement.js +++ b/site/js/createElement.js @@ -1,9 +1,16 @@ -function createEnd(x, y) { +function createEnd() { + + //find X and Y + + var X = stage.width() - stage.width() /100 * 10; + console.log(X); + var Y = stage.height() / 3; + var imageObj2 = new Image(); imageObj2.onload = function () { var end = new Konva.Image({ - x: x, - y: y, + x: X, + y: Y, image: imageObj2, width: 50, height: 50, @@ -14,8 +21,8 @@ function createEnd(x, y) { }; end = { name: "end", - x: x, - y: y, + x: X, + y: Y, type: "end", position: 1, let:1, @@ -69,7 +76,11 @@ function createLink(entre, sortie) { let switchMidY = entre.getY() + entre.getHeight() / 2; let logiqueMidX = sortie.x; - let logiqueMidY = sortie.y + (imageHeight / 3); + if(sortie.type === "inv"){ + var logiqueMidY = sortie.y + (imageHeight / 2); + }else{ + var logiqueMidY = sortie.y + (imageHeight / 3); + } createLine([switchMidX, switchMidY, logiqueMidX, logiqueMidY], "line" + lineId); setLine(sortie, "id1", "line" + lineId); entre.id3 = "line" + lineId; @@ -91,7 +102,11 @@ function createLink(entre, sortie) { let switchMidY = entre.y + imageHeight / 2; let logiqueMidX = sortie.x; - let logiqueMidY = sortie.y + (imageHeight / 3); + if(sortie.type === "inv"){ + var logiqueMidY = sortie.y + (imageHeight / 2); + }else{ + var logiqueMidY = sortie.y + (imageHeight / 3); + } createLine([switchMidX, switchMidY, logiqueMidX, logiqueMidY], "line" + lineId); setLine(sortie, "id1", "line" + lineId); setLine(entre, "id3", "line" + lineId); @@ -139,6 +154,15 @@ function createLogique(x, y, id, type) { case "ou": imageObj.src = pathImg + imageLogiqueOu; break; + case "etnon": + imageObj.src = pathImg + imageLogiqueEtNon; + break; + case "inv": + imageObj.src = pathImg + imageLogiqueInv; + break; + case "nonou": + imageObj.src = pathImg + imageLogiqueNonOu; + break; } imageObj.id = id; @@ -156,3 +180,25 @@ function createLogique(x, y, id, type) { } logiques.push(logique); } + +function switchCreator(number){ + let split = number + 1; + let space = (stage.height() - stage.height()/100*25) / split; + for(let i = 1; i < number+1 ; i++){ + createSwitch("s"+i, 20, (i) * space); + } +} + +function insertLogiqueColonne(nomLogique, TypeLogique, colonne){ + var X = stage.width() / (colonneTot+1) * (colonne+1); + //calcul position Y + if(numberPerColonne[colonne] == 1){ + var Y = stage.height() / 3; + }else{ + let numberAlreadyAdded = liveColonneNumber[colonne].length+1; + let split = (stage.height() - stage.height()/100*25) / (numberPerColonne[colonne]+1); + var Y = split * numberAlreadyAdded; + } + createLogique(X, Y, nomLogique,TypeLogique); + liveColonneNumber[colonne].push(1); +} \ No newline at end of file diff --git a/site/js/creator.js b/site/js/creator.js new file mode 100644 index 0000000..3462d4d --- /dev/null +++ b/site/js/creator.js @@ -0,0 +1,60 @@ +function createGame1(){ + + timeEnd = 20; + + initTimer(); + + createSwitch("s1", 20, 20); + createSwitch("s2", 20, 90); + createSwitch("s3", 20, 300); + createSwitch("s4", 20, 500); + createSwitch("s5", 20, 700); + createSwitch("s6", 20, 600); + createSwitch("s7", 350, 600); + + createLogique(200, 100, "logique1","et"); + createLogique(300,200,"logique2","nonou"); + createLogique(500,300,"logique3","et"); + createLogique(500,400,"logique4","etnon"); + createLogique(500,500,"logique5","inv"); + + createLink(stage.findOne("#s7"), findLogique("logique5")); + createLink(stage.findOne("#s5"), findLogique("logique4")); + createLink(stage.findOne("#s6"), findLogique("logique4")); + createLink(stage.findOne("#s3"), findLogique("logique2")); + createLink(stage.findOne("#s2"), findLogique("logique1")); + createLink(stage.findOne("#s1"), findLogique("logique1")); + createLink(findLogique("logique1"),findLogique("logique2")); + createLink(stage.findOne("#s4"), findLogique("logique3")); + createLink(findLogique("logique2"),findLogique("logique3")); + initAllSwitch(); + createEnd(800, 320); + initEnd(); +} +function createGame2(){ + + timeEnd = 40; + + initTimer(); + + switchCreator(7); + + insertLogiqueColonne("logique1", "et", 0); + insertLogiqueColonne("logique2", "nonou", 1); + insertLogiqueColonne("logique3", "et", 2); + insertLogiqueColonne("logique4", "etnon", 2); + insertLogiqueColonne("logique5", "inv", 2); + + createLink(stage.findOne("#s7"), findLogique("logique5")); + createLink(stage.findOne("#s5"), findLogique("logique4")); + createLink(stage.findOne("#s6"), findLogique("logique4")); + createLink(stage.findOne("#s3"), findLogique("logique2")); + createLink(stage.findOne("#s2"), findLogique("logique1")); + createLink(stage.findOne("#s1"), findLogique("logique1")); + createLink(findLogique("logique1"),findLogique("logique2")); + createLink(stage.findOne("#s4"), findLogique("logique3")); + createLink(findLogique("logique2"),findLogique("logique3")); + initAllSwitch(); + createEnd(); + initEnd(); +} \ No newline at end of file diff --git a/site/js/func.js b/site/js/func.js index ba9d29f..c0e6a7a 100644 --- a/site/js/func.js +++ b/site/js/func.js @@ -45,17 +45,21 @@ function checkSortieLogique(logiqueId) { if (element.name === logique.name) { let line1State, line2State; let id1Color = stage.findOne("#" + element.id1).stroke(); - let id2Color = stage.findOne("#" + element.id2).stroke(); + if (element.type !== "inv") { + let id2Color = stage.findOne("#" + element.id2).stroke(); + if (id2Color == colorLineInnactive) { + line2State = false; + } else { + line2State = true; + } + } + if (id1Color == colorLineInnactive) { line1State = false; } else { line1State = true; } - if (id2Color == colorLineInnactive) { - line2State = false; - } else { - line2State = true; - } + switch (logique.type) { case "et": if (line1State == true && line2State == true) { @@ -65,6 +69,14 @@ function checkSortieLogique(logiqueId) { changeLineColorBlack(element.id3); } break; + case "inv": + if (line1State == false) { + changeLineColorYellow(element.id3); + } + else { + changeLineColorBlack(element.id3); + } + break; case "ou": if (line1State == true || line2State == true) { changeLineColorYellow(element.id3); @@ -73,6 +85,25 @@ function checkSortieLogique(logiqueId) { changeLineColorBlack(element.id3); } break; + case "nonou": + if (line1State == true || line2State == true) { + changeLineColorBlack(element.id3); + } + else { + changeLineColorYellow(element.id3); + } + break; + case "etnon": + if (line1State == false && line2State == false) { + changeLineColorYellow(element.id3); + } else if (line1State == false && line2State == true) { + changeLineColorYellow(element.id3); + } else if (line1State == true && line2State == false) { + changeLineColorYellow(element.id3); + } else { + changeLineColorBlack(element.id3); + } + break; } } }); @@ -92,16 +123,16 @@ function checkLineSwitch(switchId) { return false; } -function checkEnd(){ +function checkEnd() { let ter = true; - endLines.forEach(function(element){ - if(stage.findOne("#line"+element).stroke() == "black"){ + endLines.forEach(function (element) { + if (stage.findOne("#line" + element).stroke() == "black") { ter = false; - + } }); - if(ter){ - setTimeout(() => { alert("Niveau terminé"); }, 40); + if (ter) { + setTimeout(() => { alert("Niveau terminé"); }, 40); } } diff --git a/site/js/logique.js b/site/js/logique.js index 91e8736..8ecd754 100644 --- a/site/js/logique.js +++ b/site/js/logique.js @@ -11,22 +11,29 @@ function findLogique(logiqueId) { function giveLineId(logiqueId){ let lineId = null; let logique = findLogique(logiqueId); - logiques.forEach(function(element, index) { - if (element.name === logique.name) { - Object.keys(element).map(function(objectKey, index) { - if(objectKey == "id1"){ - if(element[objectKey] == null){ - lineId = "id1"; + if(logique.type === "inv"){ + if(logique.id1 == null){ + lineId = "id1"; + } + } + else{ + logiques.forEach(function(element, index) { + if (element.name === logique.name) { + Object.keys(element).map(function(objectKey, index) { + if(objectKey == "id1"){ + if(element[objectKey] == null){ + lineId = "id1"; + } } - } - if(objectKey == "id2"){ - if(element[objectKey] == null){ - lineId = "id2"; + if(objectKey == "id2"){ + if(element[objectKey] == null){ + lineId = "id2"; + } } + }); } }); - } - }); + } return lineId } diff --git a/site/js/timer.js b/site/js/timer.js index e88912f..dffff75 100644 --- a/site/js/timer.js +++ b/site/js/timer.js @@ -1,7 +1,13 @@ function initTimer(){ var TimerElem = document.getElementById("progressBar"); TimerElem.style.width = "0%"; - document.getElementById("timerend").innerHTML = timeEnd; + let seconds = timeEnd; + let minutes = 0; + while(seconds - 60 > 0){ + minutes++; + seconds = seconds - 60; + } + document.getElementById("timerend").innerHTML = " / " + minutes +" m "+ seconds + " s"; } function move() { diff --git a/site/vues/jeu.html b/site/vues/jeu.html index 2cc5b11..6544579 100644 --- a/site/vues/jeu.html +++ b/site/vues/jeu.html @@ -11,6 +11,7 @@ + @@ -56,7 +57,7 @@
Temps : 0 m 0 s - / 0 m 20 s + 20
@@ -69,7 +70,7 @@ container.style.height = innerHeight /100*80 + "px"; var width = container.offsetWidth; - initTimer(); + var stage = new Konva.Stage({ container: 'play-container', @@ -83,30 +84,9 @@ initLayer(); - - createSwitch("s1", 20, 20); - createSwitch("s2", 20, 90); - createSwitch("s3", 20, 300); - createSwitch("s4", 20, 500); - createSwitch("s5", 20, 700); - createSwitch("s6", 20, 600); + createGame2(); - createLogique(200, 100, "logique1","et"); - createLogique(300,200,"logique2","ou"); - createLogique(500,300,"logique3","et"); - createLogique(500,400,"logique4","et"); - - createLink(stage.findOne("#s5"), findLogique("logique4")); - createLink(stage.findOne("#s6"), findLogique("logique4")); - createLink(stage.findOne("#s3"), findLogique("logique2")); - createLink(stage.findOne("#s2"), findLogique("logique1")); - createLink(stage.findOne("#s1"), findLogique("logique1")); - createLink(findLogique("logique1"),findLogique("logique2")); - createLink(stage.findOne("#s4"), findLogique("logique3")); - createLink(findLogique("logique2"),findLogique("logique3")); - initAllSwitch(); - createEnd(800, 320); - initEnd(); + checkAllSortieLogique();