PImage backgroundImage; Equipe[] equipes; Position[] positions; int nombreEquipes = 42; PFont quicksandFont; boolean EDITING=false; Table positionTable, scoreboard; void setup() { size(displayWidth, displayHeight); fullScreen(1); //randomSeed(3); //frameRate(60); colorMode(RGB, 255); rectMode(CENTER); noStroke(); // modifier les positions des cases du plateau //EDITING=true; // chargement du scoreboard ou génération du scoreboard vide loadScoreboard(); positionTable = loadTable("data/positionTable.csv", "header"); quicksandFont = loadFont("Quicksand-Bold-40.vlw"); backgroundImage = loadImage("backgroundImage.jpg"); // génération des équipes equipes = new Equipe[nombreEquipes]; for (int i=0; i0) { float angle = PI; // ce bloc est incompréhensible... mais il fait son taf for(int j=0; jthreshold && distEquipe>threshold && (p.hovered || p.dragged)) { // cloture des deux états p.dragStop(); p.hoverStop(); break; // si la souris est sous le seuil de collision du pion et qu'il n'est pas déjà dans l'état survolé } else if ((distPion<=threshold || distEquipe<=threshold) && !p.hovered) { // activation de l'état survolé p.hoverStart(); if (distEquipe<=threshold) { p.lazored = true; } break; } } if (!EDITING) return; for (int i = 0 ; i < positions.length; i++) { Position p = positions[i]; float distPosition = dist(p.posX, p.posY, mouseX, mouseY); float threshold = p.radius/2; if (distPosition>threshold && (p.hovered || p.dragged)) { p.dragStop(); p.hoverStop(); break; } else if (distPosition<=threshold && !p.hovered) { p.hoverStart(); break; } } } void mousePressed() { for (int i = 0 ; i < equipes.length; i++) { Pion p = equipes[i].pion; float d = dist(p.posX, p.posY, mouseX, mouseY); if (d20 && radius<120) { p.radius = radius; } } } // écrit la position des cases dans un .csv void savePositionTable() { positionTable = new Table(); positionTable.addColumn("id"); positionTable.addColumn("posx"); positionTable.addColumn("posy"); for (int i = 0 ; i < positions.length; i++) { Position p = positions[i]; TableRow position = positionTable.addRow(); position.setInt("id", p.id); position.setFloat("posx", p.posX); position.setFloat("posy", p.posY); } saveTable(positionTable, "data/positionTable.csv", "csv"); } // écrit le tableau des score dans un .csv void saveScoreboard() { scoreboard = new Table(); scoreboard.addColumn("equipe"); scoreboard.addColumn("score"); for (int i = 0 ; i < equipes.length; i++) { Equipe e = equipes[i]; TableRow scoreEquipe = scoreboard.addRow(); scoreEquipe.setInt("equipe", e.id+1); scoreEquipe.setInt("score", e.score); } saveTable(scoreboard, "data/scoreboard.csv", "csv"); } void loadScoreboard() { if (fileExists("scoreboard.csv")) { scoreboard = loadTable("data/scoreboard.csv", "header"); } else { scoreboard = new Table(); scoreboard.addColumn("equipe"); scoreboard.addColumn("score"); for (int i = 0 ; i < nombreEquipes; i++) { TableRow scoreEquipe = scoreboard.addRow(); scoreEquipe.setInt("equipe", i+1); scoreEquipe.setInt("score", 0); } } } // renvoie la Position la plus proche du Pion fourni en paramètre Position findClosestPositionFrom(Pion pion) { Position closest = positions[0]; for (int i = 0 ; i < positions.length; i++) { Position position = positions[i]; float distPion = dist(pion.posX, pion.posY, position.posX, position.posY); float distClosest = dist(pion.posX, pion.posY, closest.posX, closest.posY); if (distPion<=distClosest) closest = positions[i]; } return closest; } boolean fileExists(String filename) { File f = dataFile(filename); return f.isFile(); } void draw() { image(backgroundImage, 0, 0, displayWidth, displayHeight); for (int i = 0 ; i < equipes.length; i++) { equipes[i].update(); } if (!EDITING) return; for (int i = 0 ; i < positions.length; i++) { positions[i].draw(); } }