Theo Ertzscheid 6 vuotta sitten
vanhempi
sitoutus
1d4956ee16

+ 30 - 0
NAMING.md

@@ -0,0 +1,30 @@
+# Folder
+**"exemple_folder"**
+
+# File
+ **"exemple_file"**
+ ## Model-view-controller
+ Suffixe : view / controller
+ **"exemple_file_model"**
+
+# Code
+
+## JavaScript
+
+### Les variables
+**"exemple_variable"**
+
+### Les constantes
+**"Exemple_Constant"**
+
+### Les Classes
+
+**"ExempleClasse"**
+
+### Les fonctions
+ **"exempleFunction"**
+
+#### Les parametre
+
+Prefix : p
+**"p_exemple_parameter"**

+ 19 - 0
STRUCTURE.md

@@ -0,0 +1,19 @@
+"    |" link
+"-- "   folder
+" + "   file
+
+# Structure
+
+ -- src/
+    |
+    | -- controller/
+    |    | +
+    |
+    | -- model/
+    |    | + game.js
+    |    | + incident.js
+    |    | + law.js
+    |
+    | -- view/
+    |
+    | + index.html

+ 0 - 57
src/control/ctrlEvents.js

@@ -1,57 +0,0 @@
-/*
-possibleEvents : liste des evenements possibles avec leurs ponderations
-      - event : evenement
-      - weight : ponderations
-*/
-
-let possibleEvents = [];
-
-
-function resetPossibleEvents() {
-  possibleEvents = [];
-}
-
-
-function addPossibleEvent(pEvent) {
-  possibleEvents.push(
-    {
-      pEvent : pEvent,
-      weight : getEventWeight(pEvent)
-    }
-  );
-}
-
-// à faire
-function getEventWeight(pEvent) {
-  let weight = 1;
-  return weight;
-}
-
-
-function testPossibleEvent(pEvent) {
-  if (
-    (clergy.wealth <= pEvent.clergy.wealth) &&
-    (clergy.influence <= pEvent.clergy.influence) &&
-    (nobility.wealth <= pEvent.nobility.wealth) &&
-    (nobility.influence <= pEvent.nobility.influence) &&
-    (nobility.army <= pEvent.nobility.army) &&
-    (people.wealth <= pEvent.people.wealth) &&
-    (people.wellBeing <= pEvent.people.wellBeing)
-  ) {
-    return true;
-  }
-  return false;
-}
-
-
-function allPossibleEvents() {
-
-  resetPossibleEvents();
-
-  for (let i = 0; i < events.length; i++) {
-    let currentEvents = events[i];
-    if (testPossibleEvent(currentEvents)) {
-      addPossibleEvents(currentEvents);
-    }
-  }
-}

+ 0 - 22
src/control/ctrlGameLaws.js

@@ -1,22 +0,0 @@
-function addPlayerLaw(pLaw) {
-  playerLaws.push(pLaw);
-}
-
-function removePlayerLaw(pLaw) {
-  for (var i = 0; i < playerLaws.length; i++) {
-    if (playerLaws[i] == pLaw) {
-      playerLaws.splice(i, 1);
-      break;
-    }
-  }
-}
-
-function getPlayerLawsByType(pPlayerLawType) {
-  let playerLawsOfTheType = [];
-  for (var i = 0; i < playerLaws.length; i++) {
-    if (playerLaws[i].type == pPlayerLawType) {
-      playerLawsOfTheType.push(playerLaws[i]);
-    }
-  }
-  return playerLawsOfTheType;
-}

+ 0 - 0
src/control/ctrlIndicators.js


+ 0 - 29
src/control/ctrlLaws.js

@@ -1,29 +0,0 @@
-<<<<<<< HEAD
-function getLawsByType(pLawType) {
-  let lawsOfTheType = [];
-  for (var i = 0; i < laws.length; i++) {
-    if (laws[i].type == pLawType) {
-      lawsOfTheType.push(laws[i]);
-    }
-  }
-  return lawsOfTheType;
-}
-=======
-let laws = [];
-
-function addLaw(law) {
-    laws.push(law);
-}
-
-function removeLaw(law) {
-    let trouve = false;
-    let i = 0;
-    while (!trouve && i < laws.length) {
-        if (laws[i] == law) {
-            trouve = true;
-            laws.splice(i, 1);
-        }
-        i++;
-    }
-}
->>>>>>> eeb7ff6d99e2ccaf8b19c6a80bbf40f10c387570

+ 0 - 3
src/control/round.js

@@ -1,3 +0,0 @@
-function newRound(){
-  
-}

+ 0 - 3
src/control/utils.js

@@ -1,3 +0,0 @@
-function randInt(min, max) {
-  return Math.floor(Math.random() * (max - min + 1) ) + min;
-}

+ 3 - 0
src/controller/desc_controller.js

@@ -0,0 +1,3 @@
+function functionName() {
+
+}

+ 73 - 0
src/controller/incident_controller.js

@@ -0,0 +1,73 @@
+/*
+possibleEvents : liste des evenements possibles avec leurs ponderations
+      - event : evenement
+      - weight : ponderations
+*/
+
+function choseIncident() {
+   let all_possible_incidents = getAllPossibleIncidents();
+   let rand_weight = Math.random()*getTotalWeight(all_possible_incidents);
+
+   let relative_weight = 0;
+
+   all_possible_incidents.forEach(
+      function(p_possible_incident) {
+         if ( (relative_weight <= rand_weight) && (rand_weight < relative_weight + p_possible_incident.weight)) {
+            chosen_incident = p_possible_incident.incident;
+         }
+         relative_weight += p_possible_incident.weight;
+      }
+   );
+}
+
+function getAllPossibleIncidents() {
+   let all_possible_events = [];
+   list_incidents.forEach(
+      function(p_incident) {
+         if (isIncidentPossible(p_incident)) {
+            all_possible_events.push(
+               {
+                  incident : p_incident,
+                  weight : getIncidentWeight(p_incident),
+               }
+            );
+         }
+      }
+   );
+   return all_possible_events;
+}
+
+function isIncidentPossible(p_incident) {
+   let is_possible = true;
+   let indicator = 0;
+   while ((is_possible) && (indicator < indicators.length)) {
+     if (indicators[indicator] >= p_incident.threshold[indicator]) {
+       is_possible = false;
+     }
+     indicator++
+   }
+   return is_possible;
+}
+
+function getIncidentWeight(p_incident) {
+   let weight = 0;
+   for (var i = 0; i < indicators.length; i++) {
+      weight += getWeight(p_incident.threshold[i], indicators[i]);
+   }
+
+   weight *= p_incident.coefficient;
+   return weight;
+
+}
+
+function getWeight(p_threshold, p_indicator) {
+   return (1 - ( p_indicator / p_threshold)) ** (1/2) ;
+}
+
+function getTotalWeight(p_list_incidents) {
+   let total = 0;
+   for (let i = 0; i < p_list_incidents.length; i++) {
+     total += p_list_incidents[i].weight;
+   }
+   return total;
+}

+ 25 - 0
src/controller/indicator_controller.js

@@ -0,0 +1,25 @@
+function updateIndicators(){
+
+   for (var i = 0; i < indicators.length; i++) {
+      indicators[i] += chosen_incident.effect[i];
+
+      player_added_laws.forEach(
+         function(p_added_law) {
+            indicators[i] += p_added_law.effect[i];
+         }
+      );
+      player_removed_laws.forEach(
+         function(p_removed_law) {
+            indicators[i] += p_removed_law.effect[i];
+         }
+      );
+      player_list_taxes.forEach(
+         function(p_taxe) {
+            indicators[i] += p_taxe.effect[i];
+         }
+      );
+   }
+   drawIndicators();
+   console.log(indicators);
+
+}

+ 119 - 0
src/controller/law_controller.js

@@ -0,0 +1,119 @@
+function onClickTaxes(p_element, p_element_value, p_taxe, p_modifier) {
+   p_element.addEventListener(
+      "click",
+      function() {
+
+         if(0 <= (p_taxe.value + p_modifier) && (modifiedTaxesArePossible(player_list_taxes, p_modifier))) {
+            p_taxe.value += p_modifier;
+         }
+         p_element_value.innerHTML = p_taxe.value;
+      }
+   );
+}
+
+function onClickAction(p_element, p_element_list_laws, p_law_type, p_list_laws, p_player_list_laws) {
+   p_element.addEventListener(
+      "click",
+      function() {
+         p_element_list_laws.innerHTML = "";
+         p_list_laws.forEach(
+            function(p_law) {
+               if (p_law_type == p_law.type) {
+               drawLaw(p_element_list_laws, p_law, p_player_list_laws);
+               }
+            }
+         );
+      }
+   );
+}
+
+function onClickLaw(p_element, p_law, p_list_laws) {
+   p_element.addEventListener(
+      "click",
+      function() {
+         if (changeListLaws(p_law, p_list_laws)) {
+            p_element.classList.remove("chosen");
+         }
+         else {
+            p_element.classList.add("chosen");
+         }
+      }
+   );
+}
+
+function onClickLawType(p_element, p_element_list_laws, p_checked) {
+   p_element.addEventListener(
+      "click",
+      function() {
+         if (p_checked) {
+            p_element_list_laws.style.display = "none";
+            p_checked = false;
+         }
+         else {
+            p_element_list_laws.style = "";
+            p_checked = true;
+         }
+      }
+   );
+}
+
+function changeListLaws(p_law, p_list_laws) {
+   let found = false;
+   let law_index = p_list_laws.indexOf(p_law);
+
+   if (law_index == -1) {
+      p_list_laws.push(p_law);
+   }
+   else {
+      found = true;
+      p_list_laws.splice(law_index, 1);
+   }
+   return found;
+}
+
+function updateChosenLawsToAdd() {
+   let law_number = 2;
+   chosen_laws_to_add = [];
+
+
+
+   list_laws_types.forEach(
+      function(p_type) {
+         let temp_list_laws = [];
+
+         list_laws.forEach(
+            function(p_law) {
+               if (p_law.type == p_type && player_list_laws.indexOf(p_law) == -1 ) {
+                  temp_list_laws.push(p_law);
+
+               }
+            }
+         );
+         let i = 0;
+         while (i < law_number) {
+            let rand_law = temp_list_laws[randInt(0, temp_list_laws.length - 1)];
+            temp_list_laws.splice(temp_list_laws.indexOf(rand_law), 1);
+            chosen_laws_to_add.push(rand_law);
+            i++
+         }
+
+      }
+   );
+
+
+}
+
+function updateAllListLaws() {
+   updateListLaws(player_removed_laws, player_list_laws);
+   player_removed_laws = [];
+   updateListLaws(player_added_laws, player_list_laws);
+   player_added_laws = [];
+}
+
+function updateListLaws(p_list, p_list_to_push) {
+   p_list.forEach(
+      function(p_law) {
+         changeListLaws(p_law, p_list_to_push);
+      }
+   );
+}

+ 39 - 0
src/controller/round_controller.js

@@ -0,0 +1,39 @@
+firstRound();
+
+document.querySelector("#next-round").addEventListener(
+   "click",
+   function() {
+      newRound();
+   }
+);
+
+function firstRound() {
+   choseIncident();
+   alert(chosen_incident.name + " : " + chosen_incident.desc);
+
+   updateIndicators();
+
+   updatePlayerListTaxes();
+   updateChosenLawsToAdd();
+
+
+
+   console.log(chosen_laws_to_add);
+   drawLaws(document.querySelector("#laws"));
+}
+
+function newRound(){
+   choseIncident();
+
+   updateIndicators();
+   drawIndicators();
+   updateListTaxes();
+
+   updatePlayerListTaxes();
+   updateAllListLaws();
+   updateChosenLawsToAdd();
+
+
+
+   drawLaws(document.querySelector("#laws"));
+}

+ 3 - 0
src/controller/utils.js

@@ -0,0 +1,3 @@
+function randInt(min, max) {
+   return Math.floor(Math.random() * (max - min + 1) ) + min;
+}

+ 0 - 15
src/model/events.js

@@ -1,15 +0,0 @@
-let events = [
-  {
-    name : "Nom de l'evenement",
-    threshold : {
-      clergy : { wealth : 0, influence : 0 },
-      nobility : { wealth : 0 , influence : 0 , army : 0 },
-      people : { wealth : 0 , wellBeing : 0 }
-    },
-    coefficient : {
-      clergy : { wealth : 0, influence : 0 },
-      nobility : { wealth : 0 , influence : 0 , army : 0 },
-      people : { wealth : 0 , wellBeing : 0 }
-    }
-  },
-]

+ 0 - 6
src/model/game.js

@@ -1,6 +0,0 @@
-let playerTaxes = {
-  clergy : 15,
-  nobility : 25
-}
-
-let playerLaws = [];

+ 132 - 0
src/model/incident.js

@@ -0,0 +1,132 @@
+/**
+
+indicators' values for their threshold and coefficient vary between 0 and
+indicators : []
+  0 : clergy wealth
+  1 : clergy influence
+  2 : nobility wealth
+  3 : nobility influence
+  4 : nobility army
+  5 : people wealth
+  6 : people wellbeing
+
+*/
+
+/**
+ * Tableau contenant les événements
+ * @var {incident[]} list_incidents
+ */
+let list_incidents = [
+  {
+    id: "id1",
+    name : "Cathédrale en feu",
+    desc : "La cathédrale de la capitale, la plus importante du pays, a succombé sous les flammes. Certains soupçonnent un duc d'avoir commandé sa mise à feu. ",
+    threshold : [10000, 10000, 10000, 10000, 10000, 10000, 10000],
+    coefficient : 10,
+    effect : [-3000, -1000, 0, 0, 0, 0, 0]
+  },
+  {
+    id: "id2",
+    name : "Famine",
+    desc : "Votre peuple est en proie à la famine. Beaucoup de gens meurent, car les rècoltes ont été mauvaises.",
+    threshold : [10000, 10000, 10000, 10000, 10000, 10000, 10000],
+    coefficient : 10,
+    effect : [0, 0, 0, 0, 0, 0, -2500]
+  },
+  {
+    id: "id3",
+    name : "Tremblement de Terre",
+    desc : "Un tremblement de Terre important vient de faire d'importants dégats dans votre capitale. Il y a eu des morts, et beaucoup de blessés.",
+    threshold : [10000, 10000, 10000, 10000, 10000, 10000, 10000],
+    coefficient : 10,
+    effect : [0, 0, 0, 0, 0, 0, -1500]
+  },
+  {
+    id: "id4",
+    name : "Hérétiques",
+    desc : "Un groupes d'hérétiques commence à prendre beaucoup d'influence dans la capitale. Ils vénèrent une idole en forme de vache, avec des pis en or. Ils prétendent que du vin sort de ces pis.",
+    threshold : [0, 2000, 0, 0, 0, 0, 0], //l'influence du clergé doit être basse
+    coefficient : 30,
+    effect : [0, -2000, 0, 0, 0, 0, 0]
+  },
+  {
+    id: "id5",
+    name : "Vestes bleues",
+    desc : "Des protestataires revétant des vestes bleues sont devant le château du duc de Norcam, et ils veulent sa tête.",
+    threshold : [0, 0, 0, 0, 0, 0, 2000], //le bien-être du peuple doit être bas
+    coefficient : 50,
+    effect : [0, 0, 0, -1000, 0, 0, 500]
+  },
+  {
+    id: "id6",
+    name : "Croisade",
+    desc : "Le clergé à lancé une croisade contre un pays voisins, les déclarant comme des hérétiques. Le peuple fournit beaucoup de soldats pour cette croisade.",
+    threshold : [7000, 7000, 0, 0, 0, 0, 0],  //le clergé doit être riche et influent
+    coefficient : 60,
+    effect : [-2000, 3000, 0, 0, 0, 0, -1000]
+  },
+  {
+    id: "id7",
+    name : "Epidémie",
+    desc : "Une terrible épidémie s'est déclarée. Il y a des milliers de morts, et la maladie continue ses ravages. Votre peuple sera vite décimé si vous ne faites rien.",
+    threshold : [10000, 10000, 10000, 10000, 10000, 10000, 10000],
+    coefficient : 10,
+    effect : [0, 0, 0, 0, 0, 0, -4000]
+  },
+  {
+    id: "id8",
+    name : "Invasion",
+    desc : "Une région de votre pays vient d'être envahie par un pays voisin. Si vous ne faites rien, l'invasion pourrait continuer vers la capitale.",
+    threshold : [0, 0, 0, 0, 2222, 0, 0], //l'armé doit être faible
+    coefficient : 50,
+    effect : [0, 0, 0, 0, -1500, 0, -2000]
+  },
+  {
+    id: "id9",
+    name : "Eglises en ruine",
+    desc : "De plus en plus d'églises à travers le pays sont en ruines, et l'église n'as plus de quoi les entretenir. La foi du peuple en prend un coup.",
+    threshold : [1500, 0, 0, 0, 0, 0, 0], //le clergé doit être pauvre
+    coefficient : 20,
+    effect : [0, -1000, 0, 0, 0, 0, -1000]
+  },
+  {
+    id: "id10",
+    name : "Châteaux en ruine",
+    desc : "Les châteaux des nobles nobles toment en ruine. Leurs paysans ne veulent plus les entretenir, et ils n'ont pas de quoi payer pour les réparer. ",
+    threshold : [0, 0, 1500, 2666, 0, 0, 3000], //la noblesse doit être pauvre, peu influente et le peuple mécontent
+    coefficient : 30,
+    effect : [0, 0, 0, -1500, 0, 0, 0]
+  },
+  {
+    id: "id11",
+    name : "Piraterie",
+    desc : "Le commerce par la mer est paralysé, vos bateaux commerçants se font attaquer par des pirates.",
+    threshold : [0, 0, 0, 0, 3000, 0, 0], //l'armée doit être faible
+    coefficient : 35,
+    effect : [0, 0, -2000, 0, -500, 0, 0]
+  },
+  {
+    id: "id12",
+    name : "Pénurie de pain",
+    desc : "Le peuple n'as plus de pain, ils réclament à manger aux portes des églises.",
+    threshold : [0, 5000, 0, 0, 0, 2000, 0], //le peuple pauvre et le clergé influent
+    coefficient : 45,
+    effect : [0, 0, 0, 0, 0, 0, -1000]
+  },
+  {
+    id: "id13",
+    name : "Pénurie de pain",
+    desc : "Le peuple n'as plus de pain, ils réclament à manger aux portes des châteaux des nobles.",
+    threshold : [0, 0, 0, 5000, 0, 2000, 0], //le peuple pauvre et la noblesse influente
+    coefficient : 45,
+    effect : [0, 0, 0, 0, 0, 0, -1000]
+  },
+  {
+    id: "id14",
+    name : "Crise des transports",
+    desc : "Les calèches ne roulent plus depuis 3 jours, les cochers se plaignent de leur travail.",
+    threshold : [0, 0, 5000, 0, 0, 4000, 2000], //le peuple pauvre et la noblesse influente
+    coefficient : 30,
+    effect : [0, 0, -2000, 0, -500, 0, 0]
+  }
+]

+ 14 - 0
src/model/indicator.js

@@ -0,0 +1,14 @@
+/**
+
+indicators : []
+  0 : clergy wealth
+  1 : clergy influence
+  2 : nobility wealth
+  3 : nobility influence
+  4 : army
+  5 : people wealth
+  6 : people wellbeing
+
+*/
+
+let indicators = [3334, 5000, 3333, 5000, 700, 3333, 4000];

+ 0 - 71
src/model/indicators.js

@@ -1,71 +0,0 @@
-// INDICATEURS
-
-/*
-<<<<<<< HEAD
-=======
-TOTAL
-
-< contient l'influence et la richesse max >
-*/
-const total = { wealth : 100 , influence : 100 };
-
-/*
->>>>>>> eeb7ff6d99e2ccaf8b19c6a80bbf40f10c387570
-CLERGE :
-  - richesse : relatif a la noblesse et au peuple
-  - influence : relatif a la noblesse
-
-OBJET : { INT: wealth | INT: influence }
-*/
-<<<<<<< HEAD
-let clergy = { wealth : 0 , influence : 0 };
-
-=======
-
-let clergy = { wealth : 0 , influence : 0 };
->>>>>>> eeb7ff6d99e2ccaf8b19c6a80bbf40f10c387570
-
-/*
-NOBLESSE :
-  - richesse : relatif au clerge et au peuple
-  - influence : relatif au clerge
-  - armee : individuel
-
-OBJET : { INT: wealth | INT: influence | INT: army }
-*/
-<<<<<<< HEAD
-let nobility = { wealth : 0 , influence : 0 , army : 0 };
-
-=======
-
-let nobility = { wealth : 0 , influence : 0 , army : 0 };
->>>>>>> eeb7ff6d99e2ccaf8b19c6a80bbf40f10c387570
-
-/*
-PEUPLE :
-  - richesse : relatif a la noblesse et au clerge
-  - bien etre : individuel
-
-OBJET : { INT: wealth | INT: wellBeing }
-*/
-<<<<<<< HEAD
-let people = { wealth : 0 , wellBeing : 0 };
-
-
-// Tour de jeu actuel
-let round = 0;
-
-
-// Score actuel
-=======
-
-let people = { wealth : 0 , wellBeing : 0 };
-
-// Tour de jeu actuel
-
-let round = 0;
-
-// Score actuel
-
->>>>>>> eeb7ff6d99e2ccaf8b19c6a80bbf40f10c387570
-let score = 0;

+ 185 - 0
src/model/law.js

@@ -0,0 +1,185 @@
+let chosen_laws_to_add = [];
+
+let player_added_laws = [];
+
+let player_removed_laws = [];
+
+let player_list_laws = [];
+
+let list_laws_types = [
+  {
+    id : "noblesse",
+    name : "Noblesses",
+    desc : "Lois concernant la noblesse",
+  },
+  {
+    id : "commerce",
+    name : "Commerciales",
+    desc : "Lois légiférant le commerce",
+  },
+  {
+    id : "clerge",
+    name : "Clergé",
+    desc : "Lois concernant le clergé",
+  },
+  {
+    id : "armee",
+    name : "Armée",
+    desc : "Lois concernant l'armée",
+  },
+  {
+    id : "sociale",
+    name : "Sociales",
+    desc : "Lois sociales",
+  }
+];
+
+let list_laws = [
+  {
+    id : "0",
+    name : "Financement culte",
+    type : list_laws_types[2],
+    effect : [1000, 1500, -200, -1500, 0, -800, -100],
+    desc : "Le clergé perçoit une participation du royaume"
+  },
+  {
+    id : "1",
+    name : "Service militaire obligatoire",
+    type : list_laws_types[3],
+    effect : [0, 0, 0, 0, 1000, 0, -500],
+    desc : "Chaque habitant du royaume doit servir dans l'armée pendant 2 ans dès l'âge de 18 ans"
+  },
+  {
+    id : "2",
+    name : "Supériorité noblesse",
+    type : list_laws_types[0],
+    effect : [0, -2000, 100, 2000, 0, -100, -500],
+    desc : "Les nobles bénéficient d'une réduction lors de leurs achats au marché"
+  },
+  {
+    id : "3",
+    name : "Produits vendus par le peuple",
+    type : list_laws_types[1],
+    effect : [0, 0, 200, 0, -200, -200, -400],
+    desc : "Une taxe de 10% est appliquée par le royaume sur les produits vendus par le peuple"
+  },
+  {
+    id : "4",
+    name : "Laïcité",
+    type : list_laws_types[5],
+    effect : [-200, -1700, 100, 1700, 0, 100, 800],
+    desc : "Chaque habitant du royaume est libre de pratiquer ou non la religion de son choix dans la mesure où il le fait dans la discrétion"
+  },
+  {
+    id : "5",
+    name : "Couverture sociale pour le peuple",
+    type : list_laws_types[5],
+    effect : [-200, 0, -200, 0, 0, 100, 1000],
+    desc : "Le peuple bénéficie d'une couverture sociale"
+  },
+  {
+    id : "6",
+    name : "Aides pour les plus pauvres",
+    type : list_laws_types[5],
+    effect : [-200, 0, -200, 0, 0, 100, 900],
+    desc : "Le royaume met à disposition une aide financière pour les membres du peuple les plus pauvres"
+  },
+  {
+    id : "7",
+    name : "Contribution à l'effort de guerre",
+    type : list_laws_types[3],
+    effect : [0, 0, 0, 0, 1000, 0, 0],
+    desc : "Le 18 juin de chaque année chaque habitant doit fournir du matériel ou de la main d'oeuvre à l'armée"
+  },
+  {
+    id : "8",
+    name : "Taxe sur le titre",
+    type : list_laws_types[0],
+    effect : [0, 100, -500, -100, 0, 0, 100],
+    desc : "Les nobles doivent payer une taxe en fonction de leur titre de noblesse"
+  },
+  {
+    id : "9",
+    name : "Interdiction du vin",
+    type : list_laws_types[1],
+    effect : [-600, -200, 0, 200, 0, -500, -200],
+    desc : "Le vin est interdit à la vente et à la consommation"
+  },
+  {
+    id : "10",
+    name : "Plan réservistes",
+    type : list_laws_types[3],
+    effect : [0, 300, 0, -300, 1500, 0, -200],
+    desc : "Chaque membre du peuple peut être appelé à combattre lors d'une guerre"
+  },
+  {
+    id : "11",
+    name : "Abolition de l'impôt sur le fief",
+    type : list_laws_types[0],
+    effect : [-200, -100, 600, 100, 0, -400, -100],
+    desc : "Les nobles ne paient plus d'impôt sur leurs terres"
+  },
+  {
+    id : "12",
+    name : "Abolition des taxes sur l'import de denrées d'autres royaumes par le peuple",
+    type : list_laws_types[1],
+    effect : [-200, 0, -200, 0, 0, 400, 300],
+    desc : "Le peuple peut importer des denrées provenant d'autres royaumes sans payer de taxes"
+  },
+  {
+    id : "13",
+    name : "Ecole organisée par le clergé",
+    type : list_laws_types[2],
+    effect : [400, 800, -100, -800, 0,-300, 100],
+    desc : "Tous les enfants ayant entre 5 et 14 ans doivent aller à l'école de l'Eglise"
+  },
+  {
+    id : "14",
+    name : "Augmentation du salaire des soldats",
+    type : list_laws_types[3],
+    effect : [-300, 0, 600, 0, 1000,-300, 100],
+    desc : "Les soldats recoivent une augmentation de 10%"
+  },
+  {
+    id : "15",
+    name : "Abolition de l'esclavage",
+    type : list_laws_types[4],
+    effect : [-400, 0, -400, 0, -200,800, 500],
+    desc : "Tous les esclaves sont affranchis et l'esclavagisme est aboli"
+  },
+  {
+    id : "16",
+    name : "Succession au trône",
+    type : list_laws_types[0],
+    effect : [0, -1500, 0, 1500, 200, 0, 0],
+    desc : "N'importe quel noble ayant au moins le titre de comte peut devenir le prochain roi à condition qu'il soit choisi par ce dernier"
+  },
+  {
+    id : "17",
+    name : "Taxe sur la farine",
+    type : list_laws_types[1],
+    effect : [200, 0, 800, 0, 0, -1000, -1000],
+    desc : "La vente et la production de farine est maintenant taxées à hauteur de 5%"
+  },
+  {
+    id : "18",
+    name : "Messes obligatoires",
+    type : list_laws_types[2],
+    effect : [600, 1000, -200, -1000, 0, -400, -800],
+    desc : "Les habitants du royaume ont l'obligation de participer aux trois messes organisées par l'Eglise par jour"
+  },
+  {
+    id : "19",
+    name : "Jour d'entraînement national",
+    type : list_laws_types[3],
+    effect : [0, 0, 0, 0, 1000, 0, -500],
+    desc : "Les soldats s'entraîent tous avec le peuple chaque 04 avril de chaque année"
+  },
+  {
+    id : "20",
+    name : "Retraites",
+    type : list_laws_types[4],
+    effect : [-500, 0, -500, 0, 0, 1000, 1000],
+    desc : "Les habitants travaillant bénéficient d'une petite aide de du royaume à partir de l'âge de 70 ans"
+  }
+];

+ 0 - 14
src/model/laws.js

@@ -1,14 +0,0 @@
-let lawsTypes = ["nom du type 1","nom du type 2"];
-
-let laws = [
-  {
-    name : "Nom de la loie",
-    type : "nom du type",
-    effect : {
-      clergy : { wealth : 50, influence : 60 },
-      nobility : { wealth : -10 , influence : 33 , army : 69 },
-      people : { wealth : -420 , wellBeing : 1337 }
-    },
-    description : "Description de la loi précise est pédagogique"
-  },
-];

+ 48 - 0
src/model/taxes.js

@@ -0,0 +1,48 @@
+let player_list_taxes = [];
+
+let list_taxes = [
+   {
+      id : "taxe1",
+      name : "taxe numero 1",
+      desc : "Description de la taxe numero 1",
+
+      value : 0,
+      effect : [0, 0, 0, 0, 0, 0, 0],
+   },
+   {
+      id : "taxe2",
+      name : "taxe numero 2",
+      desc : "Description de la taxe numero 2",
+
+      value : 0,
+      effect : [0, 0, 0, 0, 0, 0, 0],
+   },
+];
+
+function updatePlayerListTaxes() {
+   player_list_taxes = [];
+   list_taxes.forEach(
+      function(p_taxe) {
+         player_list_taxes.push(p_taxe);
+      }
+   );
+}
+
+function updateListTaxes() {
+   list_taxes = [];
+   player_list_taxes.forEach(
+      function(p_taxe) {
+         list_taxes.push(p_taxe);
+      }
+   );
+}
+
+function modifiedTaxesArePossible(p_list_taxes, p_modifier) {
+   let res = 0;
+   p_list_taxes.forEach(
+      function(p_taxe) {
+         res += p_taxe.value
+      }
+   );
+   return ((res + p_modifier) <= 100);
+}

+ 46 - 32
src/view/game.html

@@ -2,51 +2,65 @@
 <html lang="fr">
   <head>
     <meta charset="utf-8">
-<<<<<<< HEAD
     <title>Tompeur</title>
+    <link rel="StyleSheet" href="style.css" type="text/css">
   </head>
   <body>
-    <canvas id="main" width="300" height="300"></canvas>
-  </body>
-  <!-- script load -->
-  <script type="text/javascript" src="../model/javascript.js"></script>
-</html>
-=======
-    <title>Home</title>
-    <link rel="stylesheet" type="text/css" href="style.css">
-  </head>
-  <body>
+    <div class="main-frame">
+      <div id="indicators">
 
-    <div id="indicator">
+         <div id="influence">
 
-    </div>
+            <div id="clergy">
+               <img src="">
+               <p>Clergé</p>
+               <p class="wealth" id="wealth-clergy">$</p>
+            </div>
 
-    <div id="main">
+            <div id="nobility">
+               <img src="">
+               <p>Noblesse</p>
+               <p class="wealth" id="wealth-nobility">$</p>
+            </div>
 
-      <div id="event">
+         </div>
+         <div class="bottom">
+            <div id="people">
+               <img src="">
+               <div id="well-being">
+                  <p class="gauge"></p>
+               </div>
+               <p>Peuple</p>
+               <p class="wealth" id="wealth-people">$</p>
+            </div>
 
-      </div>
-
-      <div id="options">
+            <div id="army">
+               <img src="">
+               <p>Armée</p>
+               <p id="army-value"></p>
+            </div>
+         </div>
 
       </div>
+      <p id="incident"></p>
 
-    </div>
+      <div id="laws"></div>
 
-    <div id="listLaws">
+      <p id="desc"></p>
 
-    </div>
+      <p id="next-round">Prochain Tour</p>
 
+    </div>
+    <script type="text/javascript" src="../controller/utils.js"></script>
+    <script type="text/javascript" src="indicator_view.js"></script>
+    <script type="text/javascript" src="../controller/incident_controller.js"></script>
+    <script type="text/javascript" src="../controller/indicator_controller.js"></script>
+    <script type="text/javascript" src="../model/law.js"></script>
+    <script type="text/javascript" src="../model/incident.js"></script>
+    <script type="text/javascript" src="../model/indicator.js"></script>
+    <script type="text/javascript" src="../model/taxes.js"></script>
+    <script type="text/javascript" src="../controller/law_controller.js"></script>
+    <script type="text/javascript" src="law_view.js"></script>
+    <script type="text/javascript" src="../controller/round_controller.js"></script>
   </body>
 </html>
-
-<script type="text/javascript" src="../js/main.js"></script>
-<script type="text/javascript" src="../js/laws.js"></script>
-<script type="text/javascript" src="../js/lawsCTRL.js"></script>
-<script type="text/javascript" src="../js/optionsCTRL.js"></script>
-<script type="text/javascript" src="../js/indicatorCTRL.js"></script>
-<script type="text/javascript" src="../js/events.js"></script>
-<script type="text/javascript" src="../js/eventCTRL.js"></script>
-<script type="text/javascript" src="../js/turn.js"></script>
-<script type="text/javascript" src="../js/start.js"></script>
->>>>>>> eeb7ff6d99e2ccaf8b19c6a80bbf40f10c387570

+ 0 - 14
src/view/index.html

@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <title>Accueil</title>
-        <link rel="stylesheet" type="text/css" href="styleacc.css">
-    </head>
-
-    <body>
-        <div>
-             <button onclick="location.href = 'game.html';">Nouvelle partie</button>
-             <button onclick="location.href = 'tuto.html';">Tutoriel</button>
-        </div>
-    </body>
-</html>

+ 49 - 0
src/view/indicator_view.js

@@ -0,0 +1,49 @@
+/**
+
+indicators : []
+  0 : clergy wealth
+  1 : clergy influence
+  2 : nobility wealth
+  3 : nobility influence
+  4 : army
+  5 : people wealth
+  6 : people wellbeing
+
+*/
+
+function drawIndicators() {
+   console.log("ca marche");
+   drawWealth(indicators[0], indicators[2], indicators[5]);
+   drawArmy(indicators[4]);
+   drawInfluence(indicators[1], indicators[3]);
+   drawWellBeing(indicators[6]);
+}
+
+function drawArmy(p_army){
+   document.getElementById("army-value").innerHTML = p_army;
+}
+function drawInfluence(p_clergy, p_nobility) {
+   let size;
+   size = (p_clergy / 10000) * 100;
+   document.getElementById("clergy").style.width = size + "%";
+   size = (p_clergy / 10000) * 100;
+   document.getElementById("nobility").style.width = size + "%";
+}
+
+function drawWealth(p_clergy, p_nobility, p_people) {
+   let size;
+
+   size = (p_clergy / 10000) * 200;
+   console.log(size);
+   document.getElementById('wealth-clergy').style.height = size + "px";
+   document.getElementById("wealth-clergy").style.width = size + "px";
+   size = (p_nobility / 10000) * 200;
+   document.getElementById("wealth-nobility").style.height = size + "px";
+   document.getElementById("wealth-nobility").style.width = size + "px";
+   size = (p_people / 10000) * 200;
+   document.getElementById("wealth-people").style.height = size + "px";
+   document.getElementById("wealth-people").style.width = size + "px";
+}
+function drawWellBeing() {
+
+}

+ 192 - 0
src/view/law_view.js

@@ -0,0 +1,192 @@
+updatePlayerListTaxes();
+
+function drawLaws(p_element) {
+   p_element.innerHTML = "";
+
+   drawTaxes(p_element);
+   list_laws_types.forEach(
+      function(p_type) {
+         drawType(p_element, p_type);
+      }
+   );
+}
+
+// Taxes
+
+function drawTaxes(p_element) {
+
+   let taxes = document.createElement("div");
+   taxes.classList.add("law-type");
+   p_element.appendChild(taxes);
+
+   let name = document.createElement("p");
+   name.classList.add("name");
+   name.innerHTML = "Taxes";
+   taxes.appendChild(name);
+
+   let list_taxes = document.createElement("div");
+   list_taxes.classList.add("list-laws");
+   taxes.appendChild(list_taxes);
+
+   list_taxes.style.display = "none";
+   let checked = false;
+   onClickLawType(name, list_taxes, checked);
+
+   player_list_taxes.forEach(
+      function(p_taxe) {
+         drawTaxe(list_taxes, p_taxe, player_list_taxes);
+      }
+   );
+}
+
+function drawTaxe(p_element, p_taxe, p_list_taxes) {
+
+   let taxe = document.createElement("div");
+   taxe.classList.add("taxe");
+   p_element.appendChild(taxe);
+
+   let name = document.createElement("p");
+   name.classList.add("name");
+   name.innerHTML = p_taxe.name;
+   taxe.appendChild(name);
+
+   let value = document.createElement("p");
+   value.classList.add("value");
+   value.innerHTML = p_taxe.value + " %";
+
+   drawTaxeBtn(taxe, value, p_taxe, -3 , "-");
+
+   taxe.appendChild(value);
+
+   drawTaxeBtn(taxe, value, p_taxe, +3, "+");
+}
+
+function drawTaxeBtn(p_element, p_element_value, p_taxe, p_modifier, p_name) {
+   let btn = document.createElement("p");
+   btn.classList.add("btn");
+   btn.innerHTML = p_name;
+   p_element.appendChild(btn);
+
+   onClickTaxes(btn, p_element_value, p_taxe, p_modifier);
+}
+
+// Types
+
+function drawType(p_element, p_law_type) {
+
+   let law_type = document.createElement("div");
+   law_type.classList.add("law-type");
+   p_element.appendChild(law_type);
+
+   let name = document.createElement("p");
+   name.classList.add("name");
+   name.innerHTML = p_law_type.name;
+   law_type.appendChild(name);
+
+
+   let container = document.createElement("div");
+   container.classList.add("name");
+
+   container.style.display = "none";
+   let checked = false;
+   onClickLawType(name, container, checked);
+
+   law_type.appendChild(container);
+
+   let list_actions = document.createElement("div");
+   list_actions.classList.add("list-actions");
+   container.appendChild(list_actions);
+
+   let list_laws = document.createElement("div");
+   list_laws.classList.add("list-laws");
+   container.appendChild(list_laws);
+
+   drawAddLaws(list_actions, list_laws, p_law_type);
+   drawRemoveLaws(list_actions, list_laws, p_law_type);
+}
+
+/*
+
+List actions
+------------
+
+<div class="list-actions">
+   <p class="btn">Ajouter</p>
+   <p class="btn">Supprimer</p>
+</div>
+
+*/
+
+function drawAddLaws(p_element, p_element_list_laws, p_law_type) {
+   let btn = document.createElement("p");
+   btn.classList.add("btn");
+   btn.innerHTML = "Ajouter";
+   p_element.appendChild(btn);
+
+   onClickAction(btn, p_element_list_laws, p_law_type, chosen_laws_to_add, player_added_laws);
+}
+
+function drawRemoveLaws(p_element, p_element_list_laws, p_law_type) {
+   let btn = document.createElement("p");
+   btn.classList.add("btn");
+   btn.innerHTML = "Supprimer";
+   p_element.appendChild(btn);
+
+   onClickAction(btn, p_element_list_laws, p_law_type, player_list_laws, player_removed_laws);
+}
+
+function drawLaw(p_element, p_law, p_list_laws) {
+   let law = document.createElement("p");
+   law.classList.add("law");
+   law.innerHTML = p_law.name;
+   p_element.appendChild(law);
+   console.log(p_list_laws.indexOf(p_law) != -1);
+   if (p_list_laws.indexOf(p_law) != -1) {
+      law.classList.add("chosen");
+   }
+
+   onClickLaw(law, p_law, p_list_laws);
+}
+
+
+/*
+
+Button
+------
+
+<p class="btn">Ajouter</p>
+
+*/
+
+function drawAction(p_element, p_action, p_law_type) {
+   let btn = document.createElement("p");
+   btn.classList.add("btn");
+   btn.innerHTML = p_action.name;
+
+   onClickAction();
+
+   p_element.appendChild(btn);
+}
+
+/*
+
+List laws
+---------
+
+<div class="list-laws">
+   <p class="law">Loi 1</p>
+   <p class="law">Loi 2</p>
+</div>
+
+*/
+
+function drawListLaws(p_element, p_list_laws, p_player_list_laws) {
+   let list_laws = document.createElement("div");
+   list_laws.classList.add("list-laws");
+
+   p_list_laws.forEach(
+      function(p_law) {
+         drawLaw(list_laws, p_law, p_player_list_laws);
+      }
+   );
+}

+ 173 - 0
src/view/style.css

@@ -0,0 +1,173 @@
+.main-frame{
+  margin:0.7rem;
+}
+
+#indicators {
+   display: flex;
+   flex-direction: column;
+   height : 350px;
+}
+
+#influence {
+   display: flex;
+   flex-direction: row;
+   height : 350px;
+   width: 500px;
+}
+
+.bottom {
+   display: flex;
+   flex-direction: row;
+}
+
+#clergy {
+   background-color: lightblue;
+   height: 100%;
+}
+#people {
+   background-color: orange;
+   height: 100%;
+   width: 300px;
+}
+
+#army {
+   background-color: green;
+}
+
+
+
+#nobility {
+   background-color: tomato;
+   height: 100%;
+}
+
+.wealth {
+   background-color: GOLD;
+}
+
+#laws {
+  display: flex;
+  flex-direction: column;
+}
+
+#laws > *{
+  margin:0.7rem 0;
+}
+
+.chosen {
+   background-color: GREY;
+}
+
+.law-type{
+  border-radius:10px;
+}
+
+
+.name {
+  font-size:2rem;
+  border-radius:10px 10px 0 0;
+  text-align:center;
+}
+
+.list-impots {
+  color:#ffffff;
+  background-color:#550c18;
+  margin-top:0;
+}
+
+.impot {
+  color:#ffffff;
+  font-size:2rem;
+}
+
+.taxe, .container {
+  margin: 1rem 0 0 2rem;
+}
+
+.list-laws .taxe {
+	margin-top: 8px;
+	margin-bottom: 8px;
+}
+
+.impots {
+  background-color:#a5907e;
+}
+
+.laws .name {
+  background-color:#550c18;
+  color:white;
+  margin-top: 0;
+  margin-bottom: 0;
+
+}
+
+.laws {
+  background-color:#a5907e;
+}
+
+.laws .container {
+	margin-top: 8px;
+	margin-bottom: 8px;
+}
+
+
+.btn {
+  display: inline-block;
+  margin: 0 5px;
+  border-radius: 6px;
+  font-family: "Lato", sans-serif;
+  font-size: 16.5px;
+  padding: 12px 20px;
+  border: 0;
+  background: #550c18;
+  color: #FFF;
+  cursor: pointer;
+  outline: 0;
+}
+
+.add {
+	background: #1abc9c;
+}
+
+.add:hover {
+	background: #2fe2bf;
+}
+
+.del {
+	background: #e74c3c;
+}
+
+.del:hover {
+	background: #ec7063;
+}
+
+#bottom-items{
+  display:flex;
+}
+
+#desc, #next-round {
+  margin-top:20px;
+}
+
+#desc{
+  background-color:#a5907e;
+  font-size:1.2rem;
+  min-height:40px;
+  border: 3px solid #550c18;
+  border-radius:5px;
+}
+
+
+#next-round{
+  font-size:2rem;
+  margin-left:auto;
+  min-width:200px;
+  text-align:center;
+  height:200px;
+  line-height:200px;
+}
+
+#next-round:hover {
+  background: #880c18;
+  cursor: pointer;
+}