Bonjour,
Je cherche actuellement à coder un jeu type casse briques pour mes études. J'ai écrit presque tout le code ( toutes les bases les détails ne sont pas définis ) pour une brique et une balle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
 
int i;
int vie=1;
float contbri=4;
float tbrique=40, tbille=10;
float xvitesse, yvitesse;
float xbille=random(5, 346), ybille=445;
float xbrique, ybrique=55;
boolean lancer;
 
void setup() {
  size ( 350, 450);
  background(0);
  /////
  lancer=false;
  xbrique=int(random(0, 7));
  xbrique=xbrique*50+5;
}
 
void draw() {
  background(0);
  dessin_brique();
  dessin_bille();
  lance_bille();
  collision_mur();
  collision_brique();
}
 
void dessin_brique() {
  stroke(255, 0, 0);
  strokeWeight(contbri);
  fill(0);
  rect(xbrique, ybrique, tbrique, tbrique);
  fill(255);
  text(vie, xbrique+(tbrique/2-3), ybrique+(tbrique/8*5));
  if (vie==0) {
    xbrique=ybrique=500;
  }
}
 
void lance_bille() {
  if (lancer==false) {
    fill(0, 0, 0, 0);
    stroke(255);
    strokeWeight(10);
    arc(xbille, ybille, 87.5, 87.5, 16*PI/14, 30*PI/16);
  }
}
 
void dessin_bille() {
  noStroke();
  fill(255);
  ellipse(xbille, ybille, tbille, tbille);
  if ( lancer==true) {
    xbille=xbille+xvitesse;
    ybille=ybille+yvitesse;
  }
}
 
void collision_mur() {
  if (xbille>345) {
    xvitesse*=(-1);
  }
  if (xbille<5) {
    xvitesse*=(-1);
  }
  if (ybille<5) {
    yvitesse*=(-1);
  }
  if (ybille>445) {
    xbille=xbille-xvitesse;
    ybille=ybille-yvitesse;
    lancer=false;
  }
}
 
void mousePressed() {
  if (mouseX>=xbille) {
    xvitesse=((mouseX-xbille)*7)/(43.75);
    yvitesse=((mouseY-ybille)*7)/(43.75);
    lancer=true;
  } else {
    xvitesse=-((xbille-mouseX)*7)/(43.75);
    yvitesse=((mouseY-ybille)*7)/(43.75);
    lancer=true;
  }
}
 
void collision_brique() {
  if (ybille>((ybrique-contbri)-tbille/2) && (xbille>((xbrique-contbri)-tbille/2)) && (xbille<((xbrique+tbrique+contbri)+tbille/2)) && (ybille<((ybrique+tbrique+contbri)+tbille/2))) { //Quand la bille touche la brique ...
    vie=vie-1;
    if (xvitesse>=0 && yvitesse<=0 && xbille>(xbrique-contbri)) {  //... et arrive par la gauche sur le bas de la brique ...
      yvitesse*=(-1);  //... yvitesse est multiplié par -1 pour que la bille change de direction.
    } else if (xvitesse<=0 && yvitesse<=0 && xbille<(xbrique+contbri+tbrique)) {  //... et arrive par la droite sur le bas de la brique ...
      yvitesse*=(-1);  //... yvitesse est multiplié par -1 pour que la bille change de direction.
    } else if (xvitesse<=0 && yvitesse>=0 && xbille<(xbrique+contbri+tbrique)) {  //... et arrive par la droite sur le haut de la brique ...
      yvitesse*=(-1);  //... yvitesse est multiplié par -1 pour que la bille change de direction.
    } else if (xvitesse>=0 && yvitesse>=0 && xbille>(xbrique-contbri)) {  //... et arrive par la gauche sur le haut de la brique ...
      yvitesse*=(-1);  //... yvitesse est multiplié par -1 pour que la bille change de direction.
    } else {  //... et arrive sur les cotés droit ou gauche de la brique par le haut ou par le bas...
      xvitesse*=(-1);  //... xvitesse est multiplié par -1 pour que la bille change de direction.
    }
  }
}
PS : Il faut cliquer sur l'arc de cercle blanc pour lancer la balle.
J'aimerais maintenant avoir plusieurs briques et plusieurs balles ; on m'a dit de créer des objets ( si il y a d'autres solutions je serais ravi de les connaître ^^ ).J'ai créé un tableau pour les briques avec un variable "visible" qui les affiches ou non
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
int nbrique=56;
int n=0;
Brique rect[] = new Brique[nbrique];
 
 
class Brique {     // nom de la classe
  int xbrique, ybrique ;
  int tbrique=40;
  int visible;
  int contbri = 4;
 
 
  Brique(int posx, int posy, int vis) {  //constructeur
    xbrique=posx ; 
    ybrique=posy ;
    visible=vis;
  }
 
 
  /*  void bouger (int decalageX, int decalageY) {
   x=x+decalageX;
   y=y+decalageY;
   }
   */
  void dessiner() {
    if (visible==1) {
      stroke(255, 0, 0);
      strokeWeight(contbri);
      fill(0);
      rect(xbrique, ybrique, tbrique, tbrique);
    }
  }
 
  void collision()
  {
  }
}
 
 
 
 
void setup() {
  int xbrique=5, ybrique=55 ;
  int tbrique=40;
  int visible;
  size (350, 450);
  background(0);
 
  int n;
 
  for (n=0; n<56; n++)
  {
    rect[n]=new Brique (xbrique, ybrique, 1);
    xbrique=xbrique+50;
    if (xbrique>305) {
      xbrique=5;
      ybrique+=50;
    }
  }
}
 
void draw() {
  background(0);
  //rect[6].dessiner();
  for (n=0; n<nbrique; n=n+1) {
    rect[n].dessiner();
  }
}
J'ai essayé d'introduire la partie du code pour la collision entre les billes et les briques mais cela ne fonctionne pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
int nbrique=56;
int n=0;
Brique rect[] = new Brique[nbrique];
 
class Brique {     // nom de la classe
  int xbrique, ybrique ;
  int tbrique=40;
  int visible;
  int contbri = 4;
 
 
  Brique(int posx, int posy, int vis) {  //constructeur
    xbrique=posx ; 
    ybrique=posy ;
    visible=vis;
  }
 
  void bouger (int decalageX, int decalageY) {
  }
 
  void dessiner() {
    if (visible==1) {
      stroke(255, 0, 0);
      strokeWeight(contbri);
      fill(0);
      rect(xbrique, ybrique, tbrique, tbrique);
    }
  }
}
 
 
 
class Bille {
  int tbille=10;
  float xvitesse, yvitesse;
  float xbille=random(5, 346), ybille=445;
  boolean lancer;
 
  Bille(float posx, float posy, int taille) {
    xbille=posx;
    ybille=posy;
    tbille=taille;
  }
  void dessin_bille() {
    noStroke();
    fill(255);
    ellipse(xbille, ybille, tbille, tbille);
    if ( lancer==true) {
      xbille=xbille+xvitesse;
      ybille=ybille+yvitesse;
    }
  }
  void collision_mur() {
    if (xbille>345) {
      xvitesse*=(-1);
    }
    if (xbille<5) {
      xvitesse*=(-1);
    }
    if (ybille<5) {
      yvitesse*=(-1);
    }
    if (ybille>445) {
      xbille=xbille-xvitesse;
      ybille=ybille-yvitesse;
      lancer=false;
    }
  }
  void lance_bille() {
    if (lancer==false) {
      fill(0, 0, 0, 0);
      stroke(255);
      strokeWeight(10);
      arc(xbille, ybille, 87.5, 87.5, 16*PI/14, 30*PI/16);
    }
  }
  void testLance(int mX, int mY) {
    if (mX>=xbille) {
      xvitesse=((mX-xbille)*7)/(43.75);
      yvitesse=((mY-ybille)*7)/(43.75);
      lancer=true;
    } else {
      xvitesse=-((xbille-mX)*7)/(43.75);
      yvitesse=((mY-ybille)*7)/(43.75);
      lancer=true;
    }
  }
}
 
 
Bille b1;
void setup() {
  float xvitesse, yvitesse;
  int xbrique=5, ybrique=55 ;
  float xbille=random(5, 346), ybille=445;
  int tbrique=40, tbille=10;
  int visible;
  int n;
  size (350, 450);
  background(0);
  // lancer=false;
  b1=new Bille(xbille, ybille, tbille);
 
  for (n=0; n<56; n++)
  {
    rect[n]=new Brique (xbrique, ybrique, 1);
    xbrique=xbrique+50;
    if (xbrique>305) {
      xbrique=5;
      ybrique+=50;
    }
  }
}
 
void draw() {
  background(0);
  rect[2].dessiner();
  rect[4].dessiner();
  rect[10].dessiner();
  b1.dessin_bille();
  b1.lance_bille();
  b1.collision_mur();
  collision_brique();
}
 
 
 
void mousePressed() { 
  b1.testLance(mouseX, mouseY);
}
 
void collision_brique() {
  if (b1.ybille>((rect[n].ybrique-rect[n].contbri)-b1.tbille/2) && (b1.xbille>((rect[n].xbrique-rect[n].contbri)-b1.tbille/2)) && (b1.xbille<((rect[n].xbrique+rect[n].tbrique+rect[n].contbri)+b1.tbille/2)) && (b1.ybille<((rect[n].ybrique+rect[n].tbrique+rect[n].contbri)+b1.tbille/2))) { //Quand la bille touche la brique ...
   // vie=vie-1;
    if (b1.xvitesse>=0 && b1.yvitesse<=0 && b1.xbille>(rect[n].xbrique-rect[n].contbri)) {  //... et arrive par la gauche sur le bas de la brique ...
      b1.yvitesse*=(-1);  //... yvitesse est multiplié par -1 pour que la bille change de direction.
    } else if (b1.xvitesse<=0 && b1.yvitesse<=0 && b1.xbille<(rect[n].xbrique+rect[n].contbri+rect[n].tbrique)) {  //... et arrive par la droite sur le bas de la brique ...
      b1.yvitesse*=(-1);  //... yvitesse est multiplié par -1 pour que la bille change de direction.
    } else if (b1.xvitesse<=0 && b1.yvitesse>=0 && b1.xbille<(rect[n].xbrique+rect[n].contbri+rect[n].tbrique)) {  //... et arrive par la droite sur le haut de la brique ...
      b1.yvitesse*=(-1);  //... yvitesse est multiplié par -1 pour que la bille change de direction.
    } else if (b1.xvitesse>=0 && b1.yvitesse>=0 && b1.xbille>(rect[n].xbrique-rect[n].contbri)) {  //... et arrive par la gauche sur le haut de la brique ...
      b1.yvitesse*=(-1);  //... yvitesse est multiplié par -1 pour que la bille change de direction.
    } else {  //... et arrive sur les cotés droit ou gauche de la brique par le haut ou par le bas...
      b1.xvitesse*=(-1);  //... xvitesse est multiplié par -1 pour que la bille change de direction.
    }
  }
}
On peut néanmoins remarquer que la bille se cogne contre une brique invisible en haut à gauche. Je fais donc appel à vous pour comprendre mes problèmes pour que j’essaie de les résoudre et avoir des regards extérieurs pour optimiser et améliorer le code. Par avance merci pour ceux qui prendrons le temps de répondre à mes questions.
Mr.Kyrox