Comment créer un compte à rebour 2D en java

cybrid27 Messages postés 14 Date d'inscription samedi 2 octobre 2010 Statut Membre Dernière intervention 22 février 2011 - 2 oct. 2010 à 18:00
cybrid27 Messages postés 14 Date d'inscription samedi 2 octobre 2010 Statut Membre Dernière intervention 22 février 2011 - 3 oct. 2010 à 20:00
Bonjour à tous !

Voilà, je suis étudiant à L'INSA de Rouen et dans le cadre d'un projet informatique, j'ai décidé de créer un jeu du type "qui veut gagner des millions" en java.

Mon problème c'est que je galère à créer un compte à rebour dans ma fenêtre de jeu. J'aimerais inclure dans cette fenêtre un petit décompte de temps de 60 secondes mais jarrive pas à programmer quelque chose de potable.

J'ai vu que des gens on postés des choses sur les comptes à rebour graphiques sur ce site mais ça fonctionne pas sous eclipse (I doit me manquer des package je pense).

Je serait très reconaissant si quelqu'un pouvait m'aider ou me donner un programme java utilisable sous éclipse pour créer un compte à rebour.

Merci d'avance =)






Un bon matheux est un glandeur, je suis donc un génie

8 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
2 oct. 2010 à 18:38
En fait, le problème ne peut pas venir d'éclipse mais plutot du la version de ton compilateur. Je ne sais pas si tu as regardé ma source, elle devrait fonctionner.

http://www.javafr.com/codes/COMPTE-REBOURS_51281.aspx

Tu peux améliorer l'aspect du compte à rebours en utilisant cette source :

http://www.javafr.com/codes/BUTTON-GRAPHIQUE-EFFET-GLASS_42967.aspx

Et voilà, tiens moi au courant...
0
cybrid27 Messages postés 14 Date d'inscription samedi 2 octobre 2010 Statut Membre Dernière intervention 22 février 2011
2 oct. 2010 à 20:32
oui oui, j'ai vu ton code source, j'ai essayé de le faire marcher mais il comprends pas le "package util;". Je sais pas si c'est ça mais quand je le run, il me fait des erreurs de compilation que je connais pas.

Il me donne ça à la compilation :

java.lang.NoClassDefFoundError: Chrono$testchrono
Caused by: java.lang.ClassNotFoundException: Chrono$testchrono
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Exception in thread "main"

peut-être qu'il faut que je crée une classe de test pour pouvoir le lancer tel quel ? j'ai vu qu'il y avait une static void main mais ça suffit peut être pas pour compiler sous eclipse ...


Un bon matheux est un glandeur, je suis donc un génie
0
cybrid27 Messages postés 14 Date d'inscription samedi 2 octobre 2010 Statut Membre Dernière intervention 22 février 2011
2 oct. 2010 à 21:34
Bon, j'ai modifié ton source en faisant carément une classe de test à part et il me sort plus que ça à la compilation :

Exception in thread "main" java.lang.Error: Unresolved compilation problem:

at Chrono.main(testchrono.java:126)

Sinon il me souligne juste ta classe "public class Chrono extends JPanel" en me disant que le type "Chrono" est déja définit dans ton programme.

Si tu peux me débloquer ......




Un bon matheux est un glandeur, je suis donc un génie
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
3 oct. 2010 à 08:16
Bonjour, je ne sais pas bien de quoi peut provenir cette erreur. J'ai un peu retouché le code, il fonctionne chez moi. Et chez toi ?

Si le type Chrono est déjà définit c'est peut être que tu as déjà une classe qui s'appelle comme ca dans ton projet (ce n'est pas certain, éclipse le détecterais) par précaution, j'ai changé le nom.

Dis moi si ca marche. Si ca ne marche pas, donne moi la stackTrace() et aussi la version de ton compilateur. Et dis moi si ton pc est récent ou non.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;


/**
 * 
 * @classe Chronometre
 * 
 * @extends JPanel
 * 
 * @description Classe qui définit un chronometre
 *
 */

public class CompteRebours extends JPanel implements Runnable{

/** serialVersionUID : numero de serie */
private static final long serialVersionUID = 1L;
/** f : Font appliqué au texte */
private static Font f = new Font("Book Antiqua", Font.BOLD, 25);
/** couleur : couleur de fond du chronometre */
private Color couleur=Color.orange;
/** tempsRestant : temps restant */
private int tempsRestant;
/** temps : temps initial */
private int temps;
/** fonctionne : booleen vrai si le compte a rebours est en marche*/
private boolean fonctionne=true;


/**
 * Construction du chronometre
 * @param N : le nombre de secondes initial
 */
public CompteRebours(int N){
this(N, Color.orange);
}

public CompteRebours(int N, Color couleur){
this.couleur=couleur;
setOpaque(false);
setPreferredSize(new Dimension(72, 72));
this.setTempsRestant(N);
this.setTemps(N);
start();

}


/**
 * Permet de démarrer le chronometre
 */
public void start(){
fonctionne=true;
}

/**
 * Permet d'arreter le chronometre
 */
public void stop(){
fonctionne=false;
}

public void run() {
while(fonctionne){
if(tempsRestant>0){
tempsRestant--;
repaint();
try {
Thread.sleep(1000);
} 
catch (InterruptedException e) {
e.printStackTrace();
}
}
else{
stop();
}
}
}


/**
 * Redéfinition de la méthode paintCompnent
 */
public void paintComponent(Graphics g) {
this.drawCircle(g, 35, 35, 30); 
}

/**
 * Fonction qui permet de dessiner le chronometre
 * @param cg : element graphique
 * @param xCenter : abscice du centre du cercle
 * @param yCenter : ordonnee du centre du cercle
 * @param r : rayon du cercle
 */
private void drawCircle(Graphics cg, int xCenter, int yCenter, int r) {
cg.setColor(Color.white);
cg.fillOval(xCenter-r, yCenter-r, 2*r, 2*r);
cg.setColor(couleur);
cg.fillArc(xCenter-r, yCenter-r, 2*r, 2*r, 90, -(360-tempsRestant*360/temps));
cg.setColor(Color.black);
cg.setFont(f);
if(tempsRestant>9){
cg.drawString(""+this.tempsRestant, 24, 42);
}
else{
cg.drawString("0"+this.tempsRestant, 24, 42);
}
}

public int getTempsRestant() {
return tempsRestant;
}

public void setTempsRestant(int tempsRestant) {
this.tempsRestant = tempsRestant;
}

public int getTemps() {
return temps;
}

public void setTemps(int temps) {
this.temps = temps;
}



public static void main(String[] args){
JFrame f = new JFrame("Test du compte à rebours");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CompteRebours c = new CompteRebours(60);
f.add(c);
f.pack();
f.setVisible(true);
c.run();

}
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
3 oct. 2010 à 08:18
Essaye sans rien modifier pour qu'on sache si le probleme vient de chez toi ou s'il y a un soucis dans le code.
0
cybrid27 Messages postés 14 Date d'inscription samedi 2 octobre 2010 Statut Membre Dernière intervention 22 février 2011
3 oct. 2010 à 11:30
bah en fait je l'ai réessayé sur mon pc portable et ça ne marche toujour pas. Par contre sur mon fixe, ça me pose plus aucun problème =)

Je pense que tu avais raison, mon compilateur est plus récent sur mon fixe, ça doit être pour ça. Il me reste plus qu'à le mettre à jour sur mon portable.

En tout cas, ça marche. Merci infiniment de ton aide

Au fait, ça te dérange pas que je t'emprunte ton script pour faire mon programme ?





Un bon matheux est un glandeur, je suis donc un génie
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
3 oct. 2010 à 19:33
Non, ça ne m’embête pas du tout, au contraire, si ca peut te servir, j'en suis content.
0
cybrid27 Messages postés 14 Date d'inscription samedi 2 octobre 2010 Statut Membre Dernière intervention 22 février 2011
3 oct. 2010 à 20:00
Merci

De toute façon tu pourra voir le résultat, puisque je posterais mon programme une fois terminé =)



Un bon matheux est un glandeur, je suis donc un génie
0
Rejoignez-nous