diff --git a/Cercle.java b/Cercle.java new file mode 100644 index 0000000..a88d31e --- /dev/null +++ b/Cercle.java @@ -0,0 +1,131 @@ +package linea; + +import java.awt.BasicStroke; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Stroke; +import java.awt.geom.Arc2D; + +public class Cercle extends ObjetGraphique{ // il s'agit plutôt d'arcs de cercle + // Hérite de la classe ObjetGraphique + // Ne pas oublier qu'il y a des propriétés et méthodes reçues par l'héritage + + + //------------------------------------------------------------------------- + // PROPRIETES + //------------------------------------------------------------------------- + protected double rayon = 30; + protected double depY = 0; // déplacement + + // début et fin de l'arc, en degrés + protected double debut = 0; + protected double fin = 360; + + // Est-ce que le joueur est en train d'appuyer sur "up" + protected boolean montee = false; + + // Vitesse du cercle + protected double vitesse = -1.0; + + // Un pas pour l'application des forces, permet de régler + // un peu la jouabilité + protected double pas = 0.2; + + // Valeur de la force (norme) appliquée lorsque le joueur appuie sur up + protected double impulsion = 25; + + + //------------------------------------------------------------------------- + // METHODES + //------------------------------------------------------------------------- + + //------------------------------------------------------------------------- + // Constructeurs de la classe + //------------------------------------------------------------------------- + public Cercle(){ + x=400; + y=200; + } + + public Cercle(double debutArc, double finArc){ + x=400; + y=200; + debut = debutArc; + fin = finArc; + } + + + //------------------------------------------------------------------------- + // Méthode d'accès en lecture au rayon, peut être utile + // par exemple pour la classe qui vérifiera si la ligne passe dans le + // cercle + //------------------------------------------------------------------------- + public double getRayon(){ + return rayon; + } + + + //------------------------------------------------------------------------- + // Méthode qui note que up a été appuyée + // -> le booléen permet de ne plus être tributaire + // de la vitesse de répétition du clavier + //------------------------------------------------------------------------- + public void Monter(){ + montee = true; + } + + + //------------------------------------------------------------------------- + // Méthode qui note que up a été relâchée + //------------------------------------------------------------------------- + public void ArreterMonter(){ + montee = false; + } + + + + //------------------------------------------------------------------------- + // Redéfinition de la méthode Afficher, spécifiquement pour la classe + //------------------------------------------------------------------------- + @Override + void Afficher(Graphics g) { + // choix de la couleur et de l'épaisseur + Graphics2D g2D = (Graphics2D) g; + g2D.setStroke(new BasicStroke(5.0f)); + g.setColor(this.couleur); + + // dessin de l'arc + g2D.draw(new Arc2D.Double(x-rayon/2, y-rayon, rayon, rayon*2, debut, fin, Arc2D.OPEN)); + } + + + //------------------------------------------------------------------------- + // Redéfinition de la méthode Animer, spécifiquement pour la classe + //------------------------------------------------------------------------- + @Override + void Animer() { + // pas est à prendre comme un "delta t" + + // chute libre + vitesse = vitesse + 9.81 * pas; + + // impulsion + if (montee==true) { + vitesse = vitesse - impulsion *pas; + } + + depY = 1/2 * 9.81 + vitesse * pas; + + if (depY<-10) { + depY=-10; + } + if (depY>10){ + depY =10; + } + y+=depY; + } + + + + +} diff --git a/Jeu.java b/Jeu.java new file mode 100644 index 0000000..a49ef86 --- /dev/null +++ b/Jeu.java @@ -0,0 +1,145 @@ +package linea; + +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; + +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.Timer; + +public class Jeu implements KeyListener, ActionListener{ + //------------------------------------------------------------------------- + // PROPRIETES + //------------------------------------------------------------------------- + + // Ecran : instance de ZoneDessin, qui contiendra tous les objets graphiques + // et les animera + protected ZoneDessin ecran = new ZoneDessin(); + + // Le cercle : en fait 2 demis-cercles, un qui passera sous la ligne + // un qui passera dessus + protected Cercle demiCercleAvant = new Cercle(90,-180); // celui qui est sur la ligne + protected Cercle demiCercleArriere = new Cercle(90,180); // celui qui est derrière la ligne + + // A FAIRE : ajouter les objets graphiques manquants, s'il y en a + + // Timer : un objet qui émet des événements à un intervalle choisi, + // il sert à donner le pas de l'animation + protected Timer horloge; + + // Une variable qui contiendra le score + protected double score=0; + + // un label qui servira à afficher le score + protected JLabel labScore; + + + //------------------------------------------------------------------------- + // METHODES + //------------------------------------------------------------------------- + + //------------------------------------------------------------------------- + // Constructeur de la classe + //------------------------------------------------------------------------- + public Jeu(){ + // Gestion du score : a réactiver en fin de TP, inutile au début + /* + labScore = new JLabel(); + labScore.setText("