You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

585 lines
14 KiB

// 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();
}
}
}