Soyez le premier à donner votre avis sur cette source.
Vue 12 049 fois - Téléchargée 975 fois
import java.applet.*; import java.awt.*; import java.awt.event.*; import java.awt.Event; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; // réalisé par fate123 public class toto extends Applet implements Runnable { int x_pos = 17; // dimension de la balle int y_pos = 100; int radius = 7; int hauteur = 5; // dimension de la raquette int largeur = 40;// int possx = 50; // position de la raquette int possy = 170; int vit = 1; // vitesse int score = 0; boolean perdu = false; boolean coll = false; boolean activation= true; public void init() { int vit = 2; // vitesse int score = 0; setBackground (Color.black); } public void start () { Thread th = new Thread (this); th.start (); } public void stop() { } public void destroy() { } public void run () { Thread.currentThread().setPriority(Thread.MIN_PRIORITY); while (!(perdu)) { if((x_pos>0 ) && (x_pos<12)){ // X collisions x_pos= 15; coll = false; } else if((x_pos>188 ) && (x_pos<210 )){ x_pos=184; coll =true; } if (y_pos>0 && y_pos<8){ // Y collisions y_pos= 12; activation=true; } else if ((y_pos>=possy-2 && y_pos<=possy-1)&&(x_pos >= possx && x_pos<= possx+largeur+1)) { // raquette collision y_pos= possy - 10; score = score+15; activation = false; } //coin droit de la barre else if ((y_pos>possy-3 && y_pos<=possy+3)&&(x_pos > possx+(largeur+1) && x_pos< possx+largeur+9)){ score = score+15; y_pos= possy - 7; x_pos= x_pos+10; coll = false; // la balle repart dans le sens inverse si elle touche le coin de la barre activation = false; } //coin gauche de la barre else if ((y_pos>possy-1 && y_pos<=possy+4)&&(x_pos < possx+1 && x_pos> possx-9)){ score = score+15; y_pos= possy - 17; x_pos= x_pos-10; coll = true; // la balle repart dans le sens inverse si elle touche le coin de la barre activation = false; } if((x_pos>=15 ) && (coll==false) ){ // mouvement de la balle après collisions x_pos=x_pos+vit; } else if ((x_pos<=184) && (coll==true) ){ x_pos=x_pos-vit; } if((y_pos>= 12 ) && (activation==true) ){ y_pos=y_pos+vit; } else if ((y_pos<=183) && (activation==false) ){ y_pos=y_pos-vit; } if(y_pos> possy+30) { perdu = true; } repaint(); try { Thread.sleep (20); } catch (InterruptedException ex) { } Thread.currentThread().setPriority(Thread.MAX_PRIORITY); } } public void paint (Graphics g) { g.setColor (Color.green); g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius); g.setColor (Color.yellow); g.drawString("Score : "+ score, 20, 190); switch (score){ case 60 : vit=2;g.drawString("NIVEAU "+ vit,60,80); break; case 150 : vit=3;g.drawString("NIVEAU "+ vit,60,80); break; case 415 : vit=4;g.drawString("NIVEAU "+ vit,60,80); break; } if((perdu)){ g.drawString("GAME OVER",50,80); } g.setColor(Color.red); g.fillRect(possx,170,largeur,hauteur); } public boolean mouseMove(Event evt, int x, int y) { possx=x; repaint(); return true;} }
10 mars 2011 à 23:41
pour les Threads effectivement il n'y a pas lieu de se précipiter. J'ai été un peu vite en besogne ( :=D ). Il est vrai que ce n'est pas le premier sujet à aborder.
10 mars 2011 à 12:14
non au contraire merci pour tes conseils, j'ai jeté un oeil à la synchronisation des threads et franchement ça me dépasse, je vais y aller progressivement.Je vais donc commmencé par rendre le code plus lisible et tenter d'ajouter des fonctionnalités au programme du moins je vais essayé.
9 mars 2011 à 13:38
moi je trouve que c'est déjà une très bon début pour un débutant d'avoir compris à quoi sert la méthode run() de Thread et la méthode paint() de Applet.
Après, si tu veux que ton programme soit plus fluide, il faudrait à mon avis réserver un Thread pour la gestion de la balle, deux Threads pour les deux raquettes et enfin, un Thread pour le traitement principal.
La principale difficulté, et surement pas des moindres, serait alors de réussir une parfaite communication entre tous ces Threads. Mais bon, cela serait peut être un peu rapide pour débuter (Mais, si je peux me permettre, tu as l'air de pouvoir apprendre vite, alors pourquoi pas aller plus loin avec les Threads et la synchronisation, histoire d'être encore plus performant ? :). Pour info, je programme en Java depuis 5 ans, et je commence à peine la synchrosation. Mais quelque chose me dit que tu pourrais être beaucoup plus rapide que moi).
Autre chose, ton code run() est trop complexe à lire pour quelqu'un qui n'a pas été à tes côtés au moment du développement :
-> utiliser un certain nombre de fonctions afin de la réduire à une vingtaine de ligne maximum pourrait faciliter
-> remplacer les valeurs numériques par des constantes (variables déclarées comme étant final) aussi faciliterait la visibilité
Deux méthodes très simples pour clarifier ton code (le nommage des variables, quant à lui, semble déjà assez explicite et judicieux).
Voilà, j'espère que tu ne m'en voudras pas pour ce que je me suis permis de te dire.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.