diff --git a/ajout etienne/basket.css b/ajout etienne/basket.css
new file mode 100644
index 0000000..f004f82
--- /dev/null
+++ b/ajout etienne/basket.css
@@ -0,0 +1,172 @@
+#barre_nav{
+ background: black;
+ height: 56px;
+ /*padding-top: 5px;*/
+ vertical-align: center;
+}
+
+#titre{
+ font-family: "Lucida Console", Courier, monospace;
+ text-shadow: white 0 -1px;
+}
+
+#navbarSupportedContent{
+ margin: 8px;
+}
+
+.nav-item:hover{
+ background-color: orange;
+ border-radius: 10px;
+ width: 70%;
+}
+
+#image_ballon{
+ margin-bottom: 5px;
+}
+
+body{
+ background-color: #303030;
+ overflow-x: scroll;
+ overflow-y: scroll;
+}
+
+.collapse.width,
+.collapsing.width {
+ max-width: 0;
+ min-width: 0;
+ width: 0;
+ transition: all .2s ease;
+}
+
+.collapse .flex-column {
+ overflow: auto;
+ flex-wrap: nowrap; /* Optional, if you don't want the links to form columns if they overflow */
+}
+
+.collapse .flex-column li {
+ width: 100%;
+}
+
+.feather {
+ width: 16px;
+ height: 16px;
+ vertical-align: text-bottom;
+}
+
+
+.sidebar {
+ width: 20%;
+ margin-top: 56px;
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ z-index: 100; /* Behind the navbar */
+ padding: 48px 0 0; /* Height of navbar */
+ box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1);
+ background-color: #b9b7b7;
+}
+
+@media (max-width: 767.98px) {
+ .sidebar {
+ top: 5rem;
+ }
+}
+
+.sidebar-sticky {
+ position: relative;
+ top: 0;
+ height: calc(100vh - 48px);
+ padding-top: .5rem;
+ overflow-x: hidden;
+ overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
+}
+
+@supports ((position: -webkit-sticky) or (position: sticky)) {
+ .sidebar-sticky {
+ position: -webkit-sticky;
+ position: sticky;
+ }
+}
+
+.sidebar .nav-link {
+ font-weight: 500;
+ color: #333;
+}
+
+.sidebar .nav-link .feather {
+ margin-right: 4px;
+ color: #999;
+}
+
+.sidebar .nav-link.active {
+ color: #007bff;
+}
+
+.sidebar .nav-link:hover .feather,
+.sidebar .nav-link.active .feather {
+ color: inherit;
+}
+
+.sidebar-heading {
+ font-size: .75rem;
+ text-transform: uppercase;
+}
+#list-home-list{
+ height: 50px;
+ width: 49%;
+}
+#ul{
+ padding-left: 15px;
+ padding-right: 15px;
+}
+#list-home-list{
+ padding-right:10px;
+ width: 99%
+}
+#bouton{
+ margin-left: 15px;
+}
+#arbre{
+ height: 150px;
+ width: 80%;
+}
+
+#sidebarMenu{
+ min-width: 50px;
+}
+
+#terrain{
+ margin-top: 2%;
+ margin-left: 5%;
+ width: 75%;
+ height: auto;
+}
+
+#demiTerrainDroit{
+ margin-top: 2%;
+ margin-left: 20%;
+ width: 75%;
+ height: auto;
+}
+
+#demiTerrainGauche{
+ margin-top: 2%;
+ margin-left: 20%;
+ width: 75%;
+ height: auto;
+ /*transform: rotate(90deg);*/
+}
+
+.boutons {
+ margin-top: 1%;
+}
+
+#bouttonadd: hover {
+ background-color : "red";
+ border-color: "yellow";
+}
+
+#bouttonadd:active{
+box-shadow: 1px 1px 10px black inset, 0 1px 0 rgba( 255, 255, 255, 0.4);
+}
\ No newline at end of file
diff --git a/ajout etienne/basket.html b/ajout etienne/basket.html
new file mode 100644
index 0000000..fc708f6
--- /dev/null
+++ b/ajout etienne/basket.html
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ajout etienne/rectest.js b/ajout etienne/rectest.js
new file mode 100644
index 0000000..8a3d697
--- /dev/null
+++ b/ajout etienne/rectest.js
@@ -0,0 +1,584 @@
+// get canvas related references
+var canvas = document.getElementById("terrain");
+var ctx = canvas.getContext("2d");
+var BB = canvas.getBoundingClientRect();
+var offsetX = BB.left;
+var offsetY = BB.top;
+canvas.width = window.innerWidth*0.74;
+var lt = canvas.width;
+canvas.height = lt*0.536;
+var ht = canvas.height;
+var WIDTH = canvas.width;
+var HEIGHT = canvas.height;
+
+// drag related variables
+var dragok = false;
+var startX;
+var startY;
+
+//variable pour donner le ballon
+var ball = false;
+var nbball=0;
+var nba = 0;
+var nbb = 0;
+
+
+//variable pour faire une passe
+var nbjpass = 0;
+var passable = false;
+// array de cercle de joueurs
+var joueurs = [];
+// array de cercle d'adversaire
+var adversaire = [];
+// array de passes
+var passes = [];
+// array de numero de joueur pour créér la passe
+var jpass = [];
+// array d'action pour pouvoir supprimer la derniere
+var last = [];
+// listen for mouse events
+canvas.onmousedown = myDown;
+canvas.onmouseup = myUp;
+canvas.onmousemove = myMove;
+
+// call to draw the scene
+draw();
+
+// draw a single rect
+function rect(x, y, w, h) {
+ ctx.beginPath();
+ ctx.rect(x, y, w, h);
+ ctx.closePath();
+ ctx.fill();
+}
+
+function cercle(x,y,z,a,b,c,g) {
+ ctx.fillStyle = g;
+ ctx.beginPath();
+ ctx.arc(x,y,z,a,b,c);
+ ctx.fill();
+}
+
+function ligne(a,b,c,d){
+ ctx.beginPath();
+ ctx.moveTo(a, b);
+ ctx.lineTo(c, d);
+ ctx.lineWidth= 3;
+ ctx.stroke();
+}
+
+// clear the canvas
+function clear() {
+ ctx.clearRect(0, 0, WIDTH, HEIGHT);
+}
+
+// redraw the scene
+function draw() {
+ clear();
+ ctx.fillStyle = "#FAF7F8";
+ rect(0, 0, WIDTH, HEIGHT);
+ faireterrain();
+ // redraw each rect in the rects[] array
+ for (var i = 0; i < joueurs.length; i++) {
+ var r = joueurs[i];
+ if(r.setball == true){
+ r.fill = "green";
+ }
+ else{
+ r.fill = "red";
+ }
+ ctx.fillStyle = r.fill;
+ cercle(r.x,r.y,r.rayon,r.cache,r.taille,r.last,r.fill);
+
+ }
+ for (var i = 0; i < adversaire.length; i++) {
+ var r = adversaire[i];
+ if(r.setball == true){
+ r.fill = "green";
+ }
+ ctx.fillStyle = r.fill;
+ cercle(r.x,r.y,r.rayon,r.cache,r.taille,r.last);
+ }
+ for (var i = 0; i < jpass.length-1; i=i+2) {
+ var r = jpass[i];
+ var z = jpass[i+1];
+ nbjpass=0;
+ fairepasse(r,z);
+ }
+ for(var i = 0; i < passes.length; i++) {
+ var r = passes[i];
+ ligne(r.x.x,r.x.y,r.x2.x,r.y2.y);
+ }
+}
+
+
+// handle mousedown events
+function myDown(e) {
+
+ // tell the browser we're handling this mouse event
+ e.preventDefault();
+ e.stopPropagation();
+
+ // get the current mouse position
+ var mx = parseInt(e.clientX - offsetX);
+ var my = parseInt(e.clientY - offsetY);
+ //console.log(mx);
+ //console.log(my);
+ //console.log(ball);
+
+ if(ball == true){
+ dragok = false;
+ for (var i = 0; i < joueurs.length; i++) {
+ var r = joueurs[i];
+ if (mx > r.x - r.rayon && mx < r.x + r.rayon && my > r.y - r.rayon && my < r.y + r.rayon) {
+ // if yes, set that rects isDragging=true
+ document.body.style.cursor = 'pointer';
+ dragok = true;
+ if (nbball == 0){
+ r.setball = true;
+ r.gottheball = true;
+ nbball = nbball + 1;
+ last.push({
+ action : 3,
+ });
+ console.log(last);
+ }
+ else
+ window.alert("Un seul ballon sur le terrain");
+ ball = false;
+ draw();
+ }
+ }
+ for (var i = 0; i < adversaire.length; i++) {
+ var r = adversaire[i];
+ if (mx > r.x - r.rayon && mx < r.x + r.rayon && my > r.y - r.rayon && my < r.y + r.rayon) {
+ // if yes, set that rects isDragging=true
+ document.body.style.cursor = 'pointer';
+ dragok = true;
+ if (nbball == 0){
+ r.setball = true;
+ r.gottheball = true;
+ nbball = nbball + 1;
+ last.push({
+ action : 4,
+ })
+ }
+ else
+ window.alert("Un seul ballon sur le terrain");
+ ball = false;
+ draw();
+ }
+ }
+ ball = false;
+ }
+
+ if(passable == true ){
+ for (var i = 0; i < joueurs.length; i++) {
+ var r = joueurs[i];
+ if (mx > r.x - r.rayon && mx < r.x + r.rayon && my > r.y - r.rayon && my < r.y + r.rayon) {
+ // if yes, set that rects isDragging=true
+ document.body.style.cursor = 'pointer';
+ if (nbjpass == 0){
+ if(r.gottheball == false){
+ passable = false;
+ console.log(nbjpass);
+ nbjpass = 0;
+ window.alert("Seulement un joueur qui possede le ballon a un moment peut faire une passe")
+ }
+ else
+ {
+ r.gottheball = false;
+ addj(i);
+ nbjpass=nbjpass+1;
+ console.log(nbjpass);
+ }
+ }
+ else{
+
+ r.gottheball = true;
+ addj(i);
+ nbjpass=nbjpass+1;
+ console.log(nbjpass);
+ }
+
+ if(nbjpass % 2 == 0){
+ console.log(nbjpass % 2 );
+ passable=false;
+ draw();
+ }
+ }
+ }
+}
+
+else {
+ dragok = false;
+ for (var i = 0; i < joueurs.length; i++) {
+ var r = joueurs[i];
+ if (mx > r.x - r.rayon && mx < r.x + r.rayon && my > r.y - r.rayon && my < r.y + r.rayon) {
+ // if yes, set that rects isDragging=true
+ document.body.style.cursor = 'pointer';
+ dragok = true;
+ r.isDragging = true;
+ }
+ }
+ for (var i = 0; i < adversaire.length; i++) {
+ var r = adversaire[i];
+ if (mx > r.x - r.rayon && mx < r.x + r.rayon && my > r.y - r.rayon && my < r.y + r.rayon) {
+ // if yes, set that rects isDragging=true
+ document.body.style.cursor = 'pointer';
+ dragok = true;
+ r.isDragging = true;
+ }
+ }
+}
+ // save the current mouse position
+ startX = mx;
+ startY = my;
+}
+
+
+// handle mouseup events
+function myUp(e) {
+ // tell the browser we're handling this mouse event
+ e.preventDefault();
+ e.stopPropagation();
+
+ // clear all the dragging flags
+ document.body.style.cursor = 'default';
+ dragok = false;
+ for (var i = 0; i < joueurs.length; i++) {
+ joueurs[i].isDragging = false;
+ }
+ for (var i = 0; i < adversaire.length; i++) {
+ adversaire[i].isDragging = false;
+ }
+}
+
+
+// handle mouse moves
+function myMove(e) {
+ // if we're dragging anything...
+ if (dragok) {
+
+ // tell the browser we're handling this mouse event
+ e.preventDefault();
+ e.stopPropagation();
+
+ // get the current mouse position
+ var mx = parseInt(e.clientX - offsetX);
+ var my = parseInt(e.clientY - offsetY);
+
+ // calculate the distance the mouse has moved
+ // since the last mousemove
+ var dx = mx - startX;
+ var dy = my - startY;
+
+ // move each rect that isDragging
+ // by the distance the mouse has moved
+ // since the last mousemove
+ for (var i = 0; i < joueurs.length; i++) {
+ var r = joueurs[i];
+ if (r.isDragging) {
+ r.x += dx;
+ r.y += dy;
+ }
+ }
+ for (var i = 0; i < adversaire.length; i++) {
+ var r = adversaire[i];
+ if (r.isDragging) {
+ r.x += dx;
+ r.y += dy;
+ }
+ }
+
+ // redraw the scene with the new rect positions
+ draw();
+
+ // reset the starting mouse position for the next mousemove
+ startX = mx;
+ startY = my;
+
+ }
+}
+
+
+function ajouterjoueur() {
+
+ if (joueurs.length >= 5)
+ window.alert("Nombre de joueurs maximum atteint");
+ else {
+ joueurs.push({
+ x: 60,
+ y: 35 + ((joueurs.length + 1) * 50),
+ rayon: 20,
+ cache: 0,
+ taille: Math.PI*2,
+ last: false,
+ fill: "red",
+ isDragging: false,
+ setball : false,
+ gottheball : false,
+ });
+ last.push({
+ action : 1,
+ });
+ console.log(last);
+ cercle(60,35 + (joueurs.length * 50),20,0,Math.PI*2,false,"red");
+ }
+}
+
+function ajouteradversaire() {
+
+ console.log(adversaire.length);
+ if (adversaire.length >= 5)
+ window.alert("Nombre d'adversaire maximum atteint");
+ else {
+ adversaire.push({
+ x: 560,
+ y: 35 + ((adversaire.length + 1) * 50),
+ rayon: 20,
+ cache: 0,
+ taille: Math.PI*2,
+ last: false,
+ fill: "black",
+ isDragging: false,
+ setball : false
+ });
+ last.push({
+ action : 2,
+ });
+ console.log(last);
+ cercle(560,35 + (adversaire.length * 50),20,0,Math.PI*2,false,"black");
+ }
+}
+
+function fairepasse(a,b) {
+ console.log(a);
+ console.log(b);
+ passes.push({
+ x: joueurs[a.c],
+ y: joueurs[a.c],
+ x2 : joueurs[b.c],
+ y2 : joueurs[b.c],
+ });
+ // console.log("passe stp");
+ jpass.pop();
+ jpass.pop();
+ last.push({
+ action : 5,
+ depart : a.c,
+ arrivé : b.c,
+ });
+ console.log(last);
+ ligne(joueurs[a.c].x,joueurs[a.c].y,joueurs[b.c].x,joueurs[b.c].y);
+;
+}
+
+
+function faireterrain() {
+ ctx.lineWidth="5";
+
+//Bordures du terrain
+ctx.beginPath();
+ctx.rect(0, 0, lt, ht);
+ctx.stroke();
+
+
+ctx.lineWidth="2";
+//Ligne centrale
+ctx.beginPath();
+ctx.moveTo(lt/2, ht);
+ctx.lineTo(lt/2, 0);
+ctx.stroke();
+
+//Cercle central
+ctx.beginPath();
+ctx.arc(lt/2, ht/2, lt*0.064, 0, Math.PI*2, false);
+ctx.stroke();
+
+
+/* RAQUETTES */
+//Rectangle raquette gauche
+ctx.beginPath();
+ctx.rect(0, ht/3, lt*0.208, ht/3);
+ctx.stroke();
+
+//Rectangle raquette droite
+ctx.beginPath();
+ctx.rect(lt-lt*0.208, ht/3, lt-lt*0.208, ht/3);
+ctx.stroke();
+
+//Cercle raquette gauche
+ctx.beginPath();
+ctx.arc(lt*0.208, ht/2, lt*0.064, 1.5*Math.PI, 0.5*Math.PI, false);
+ctx.stroke();
+
+//Cercle raquette droite
+ctx.beginPath();
+ctx.arc(lt-(lt*0.208), ht/2, lt*0.064, 0.5*Math.PI, 1.5*Math.PI, false);
+ctx.stroke();
+
+
+/* LIGNES LANCERS FRANCS */
+//Ligne lf 1 gauche
+ctx.beginPath();
+ctx.moveTo(0, 0.06*ht);
+ctx.lineTo(lt*0.075, 0.06*ht);
+ctx.stroke();
+
+//Ligne lf 2 gauche
+ctx.beginPath();
+ctx.moveTo(0, 0.94*ht);
+ctx.lineTo(lt*0.075, 0.94*ht);
+ctx.stroke();
+
+// Cercle lf gauche
+ctx.beginPath();
+ctx.arc(lt*0.063, ht/2, ht*0.44, 1.5*Math.PI, 0.5*Math.PI, false);
+ctx.stroke();
+
+
+//Ligne lf 1 droite
+ctx.beginPath();
+ctx.moveTo(lt, 0.06*ht);
+ctx.lineTo(lt*0.925, 0.06*ht);
+ctx.stroke();
+
+//Ligne lf 2 droite
+ctx.beginPath();
+ctx.moveTo(lt, 0.94*ht);
+ctx.lineTo(lt*0.925, 0.94*ht);
+ctx.stroke();
+
+//Cercle lf droite
+ctx.beginPath();
+ctx.arc(lt*0.937, ht/2, lt*0.236, 0.5*Math.PI, 1.5*Math.PI, false);
+ctx.stroke();
+
+
+/* PANIERS */
+//Cercle panier gauche
+ctx.beginPath();
+ctx.arc(lt*0.063, ht/2, ht*0.083, 1.5*Math.PI, 0.5*Math.PI, false);
+ctx.stroke();
+
+//Panier gauche
+ctx.beginPath();
+ctx.moveTo(lt*0.06, ht*0.44);
+ctx.lineTo(lt*0.06, ht*0.56);
+ctx.stroke();
+
+ctx.beginPath();
+ctx.arc(lt*0.072, ht/2, ht*0.01, 0, Math.PI*2, false);
+ctx.stroke();
+
+ctx.beginPath();
+ctx.moveTo(lt*0.06, ht/2);
+ctx.lineTo(lt*0.067, ht/2);
+ctx.stroke();
+
+
+//Cercle panier droit
+ctx.beginPath();
+ctx.arc(lt-lt*0.063, ht/2, ht*0.083, 0.5*Math.PI, 1.5*Math.PI, false);
+ctx.stroke();
+
+//Panier droit
+ctx.beginPath();
+ctx.moveTo(lt-lt*0.06, ht-ht*0.44);
+ctx.lineTo(lt-lt*0.06, ht-ht*0.56);
+ctx.stroke();
+
+ctx.beginPath();
+ctx.arc(lt-lt*0.072, ht/2, ht*0.01, 0, Math.PI*2, false);
+ctx.stroke();
+
+ctx.beginPath();
+ctx.moveTo(lt-lt*0.06, ht-ht/2);
+ctx.lineTo(lt-lt*0.067, ht-ht/2);
+ctx.stroke();
+
+}
+
+
+
+
+function triggerdonnerlaballe(){
+ ball = true;
+ console.log(ball);
+}
+
+function triggerfairepasse(){
+ if(joueurs.length < 2){
+ window.alert("On ne peut faire une passe si on a pas 2 joueurs")
+ }
+ else{
+ passable = true;
+ console.log(passable);
+ }
+}
+
+function addj(a){
+ jpass.push({
+ c : a,
+ });
+}
+
+function retourarriere(){
+
+ console.log(last);
+ console.log("allo");
+ x = last.length;
+ if(x == 0){
+ window.alert("Vous ne pouvez revenir en arriere")
+ }
+ else{
+ if(last[x-1].action == 1){
+ joueurs.pop();
+ last.pop();
+ draw();
+ }
+ if(last[x-1].action == 2){
+ adversaire.pop();
+ last.pop();
+ draw();
+ }
+ if(last[x-1].action == 3){
+
+ for (var i = 0; i < joueurs.length; i++) {
+ var r = joueurs[i];
+ if(r.setball == true){
+ r.setball = false;
+ nbball = nbball - 1;
+ last.pop();
+ draw();
+ }
+ }
+ }
+
+ if(last[x-1].action == 4){
+
+ for (var i = 0; i < adversaire.length; i++) {
+ var r = adversaire[i];
+ if(r.setball = true){
+ r.setball = false;
+ nbball = nbball - 1;
+ last.pop();
+ draw();
+ }
+ }
+ }
+ if(last[x-1].action == 5){
+ joueurs[last[x-1].arrivé].gottheball = false;
+ joueurs[last[x-1].depart].gottheball = true;
+ last.pop();
+ passes.pop();
+ draw();
+
+ }
+ }
+
+ }
+
+
+