CODE
Vous pouvez retrouver ici le code intégrale de notre programme.
String page = "menu";
//réinitialisation millis()
int T0;
//int deplacementBx, deplacementBy;
//int Bx, By;
ArrayList<Balle> balles;
//Balle B;
//Balle Bonus;
// Dimension aire de jeu
float AireDX, AireDY;
float deplacementAireDX;
int RaqX, RaqY, RaqDX, RaqDY;
int vie;
int level;
int score;
int bestScore;
boolean bonus;
//Création d'un objet (variable) de la classe Table.
Table table;
class Balle {
int Px, Py, Vx, Vy;
int Dx, Dy;
String type;
Balle(int px, int py, int vx, int vy, String _type) {
Px = px;
Py = py;
Vx = vx;
Vy = vy;
Dx = 25;
Dy = 25;
type = _type;
}
boolean bouger() {
Px = Px + Vx;
Py = Py + Vy;
if (Px < 20) {
return false;
} else {
return true;
}
}
void dessiner() {
if (type == "normal") {
fill(#F21414);
}
if (type == "bonus") {
fill(#10E80E);
}
ellipse(Px, Py, Dx, Dy);
}
void gere_rebond() {
if (Px > AireDX - Dx/2) {
Vx = -Vx;
Px = int(AireDX - Dx/2);
}
if (Px < Dx/2) {
Vx = -Vx;
}
if (Py < Dy/2) {
Vy = -Vy;
}
if (Py > AireDY-Dy/2) {
Vy = -Vy;
}
if (Px<RaqX+RaqDX+Dx/2 && Py>RaqY && Py<RaqY+RaqDY && Vx<0) {
Vx = -Vx;
score = score + 1;
//bonus = true;
}
}
}
void setup() {
size(1265, 950);
background (0);
RaqX = 15;
RaqY = 60;
vie = 3;
RaqDX = 30;
RaqDY = 130;
AireDX =1265;
AireDY=950;
T0 = millis();
deplacementAireDX = -0.5;
score = 0;
bonus = false;
level = 1;
balles = new ArrayList<Balle>();
balles.add(new Balle(500, 500, 8, 5, "normal"));
//on charge dans la variable table le fichier csv(comma separated values) nommé "bestScore.csv".
//"header" signifie que les colonnes du tableau en format CSV ont des noms
table = loadTable("bestScore.csv", "header");
bestScore = table.getInt(0, 0);
}
void draw() {
if (page=="menu") {
draw_menu();
}
if (page=="jeu") {
draw_jeu();
}
if (page=="GameOver") {
draw_GameOver();
}
if (page=="TransitionLevel") {
draw_TransitionLevel();
}
}
void draw_menu() {
background(0);
fill(#FFFFFF);
textSize(40);
text("P.O.N.G.", 575, 100);
text("President Of National Game company", 300, 200);
text("PLAY", 605, 503);
text("Try to pass all 3 levels and become the P.O.N.G.", 200, 700);
noFill();
stroke(#E00000);
rect(550, 50, 200, 75);
noFill();
stroke(#E00000);
rect(550, 450, 200, 75);
noFill();
stroke(#E00000);
if (mousePressed) {
if (mouseX >550)
if (mouseY >450)
if (mouseX <750)
if (mouseY <525) {
page = "jeu";
}
}
}
void draw_jeu() {
nettoyer();
rebondir();
bouger();
dessinerMur();
Score();
dessiner();
BougerMur();
if (score % 4 == 2) {
if (bonus) {
balles.add(new Balle(600, 600, 15, 10, "bonus"));
RaqDY = RaqDY + 30;
bonus = false;
}
}
else {
bonus = true;
}
if (AireDX<633 && level == 1) {
level = 2;
page = "TransitionLevel";
AireDX = 1265;
for (int i = 0; i < balles.size(); i++) {
balles.remove(i);
}
balles.add(new Balle(500, 500, 15, 8, "normal"));
}
if (AireDX<633 && level == 2) {
level = 3;
page = "TransitionLevel";
AireDX = 1265;
for (int i = 0; i < balles.size(); i++) {
balles.remove(i);
}
balles.add(new Balle(500, 500, 17, 10, "normal"));
RaqDY = 100;
}
if (AireDX<633 && level == 3) {
background(0);
textSize(50);
text("You Win", 500, 450);
if (mousePressed) {
page = "menu";
setup();
}
}
}
void nettoyer() {
background(0);
}
void dessiner() {
// Dessine la raquette
fill(#FFFFFF);
rect(RaqX, RaqY, RaqDX, RaqDY);
// Dessine les balles
for (int i = 0; i < balles.size(); i++) {
Balle B = balles.get(i);
B.dessiner();
}
// Dessine les vies
fill(#FFFFFF);
if (vie == 3) {
ellipse(1200, 30, 25, 25);
ellipse(1150, 30, 25, 25);
ellipse(1100, 30, 25, 25);
}
if (vie == 2) {
ellipse(1200, 30, 25, 25);
ellipse(1150, 30, 25, 25);
}
if (vie == 1) {
ellipse(1200, 30, 25, 25);
}
//dessine level
if (level == 1) {
textSize(50);
text("level 1", 565, 50);
}
if (level == 2) {
text("level 2", 565, 50);
}
if (level == 3) {
text("level 3", 565, 50);
}
}
void bouger() {
for (int i = 0; i < balles.size(); i++) {
Balle B = balles.get(i);
boolean en_jeu = B.bouger();
if (en_jeu == false) {
if (B.type == "normal") {
vie = vie-1;
if (vie > 0 && level == 1) {
balles.add(new Balle(500, 500, 8, 5, "normal"));
}
if (vie > 0 && level == 2) {
balles.add(new Balle(500, 500, 15, 8, "normal"));
}
if (vie > 0 && level == 3) {
balles.add(new Balle(500, 500, 17, 10, "normal"));
}
if (vie == 0) {
page = "GameOver";
//on entre dans la table à la ligne 0 et à la colonne 0 la variable bestScore
table.setInt(0, 0, bestScore);
//on enregistre la table avec la nouvelle valeur de la variable bestScore
saveTable(table, "data/bestScore.csv");
}
}
if (B.type == "bonus") {
RaqDY = RaqDY - 30;
}
balles.remove(i);
}
}
RaqY = (mouseY) - RaqDY/2;
}
void rebondir() {
for (int i = 0; i < balles.size(); i++) {
Balle B = balles.get(i);
B.gere_rebond();
}
}
void BougerMur() {
AireDX = AireDX + deplacementAireDX;
}
void dessinerMur() {
fill (200);
rect (AireDX, 0, AireDX, AireDY);
}
void Score() {
textSize (40);
fill (255);
text ("score : "+str(score), 1050, 100);
text("best score : " + str(bestScore), 950, 150);
if (score > bestScore) {
bestScore = score;
}
}
void draw_GameOver() {
background(0);
textSize(50);
fill(#F21414);
text("GameOver", 500, 450);
textSize(20);
fill(#0D36FA);
text("(click to display the menu)", 497, 650);
if (mousePressed) {
page = "menu";
setup();
}
}
void draw_TransitionLevel() {
background(0);
textSize(50);
fill(#F21414);
text("Level " + level, 550, 450);
textSize(20);
fill(#0D36FA);
text("(click for next level)", 535, 550);
if (mousePressed) {
page = "jeu";
}
}
