Skip to content

Instantly share code, notes, and snippets.

@Cric75
Last active July 24, 2021 18:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Cric75/f7517f64378645a5cfde847dce37ec38 to your computer and use it in GitHub Desktop.
Save Cric75/f7517f64378645a5cfde847dce37ec38 to your computer and use it in GitHub Desktop.
Pong_1_Player
#include <Gamebuino-Meta.h>
// Caractéristiques de la balle
struct s_balle{int posX; int posY; int speedX; int speedY; int taille;};
s_balle balle={20, 20, 2, -2, 4};
// Caractéristiques des raquettes de gauche (1) et de droite (2)
struct s_raquette{int posX; int posY; int vitesse; int hauteur; int largeur;};
s_raquette raquette1={10, 30, 2, 12, 3};
s_raquette raquette2={gb.display.width()-12, 30, 2, 12, 3};
// Initialisation du score de chaque joueur
int score1 = 0; // score joueur de droite
int score2 = 0; // score joueur de gauche
void setup() {
gb.begin();
}
void loop() {
while (!gb.update());
gb.display.clear();
// Contrôles de la raquette de gauche (1)
if (gb.buttons.repeat(BUTTON_UP, 0) && (raquette1.posY > 0)) {
raquette1.posY -= 2;
}
if (gb.buttons.repeat(BUTTON_DOWN, 0) && (raquette1.posY+raquette1.hauteur < gb.display.height())) {
raquette1.posY += 2;
}
// Contrôles de l'IA de la raquette de droite (2)
if (balle.posY > (raquette2.posY+raquette2.hauteur/2)
&& raquette2.posY+raquette2.hauteur < gb.display.height()) {
raquette2.posY += 2;
} else if (balle.posY < (raquette2.posY + raquette2.hauteur/2)
&& raquette2.posY > 0) {
raquette2.posY -= 2;
}
balle.posX += balle.speedX;
balle.posY += balle.speedY;
// La balle rebondit en haut ou en bas de l'écran
if (balle.posY < 0) {
balle.speedY = 2;
}
if (balle.posY > gb.display.height()-balle.taille) {
balle.speedY = -2;
}
// La balle sort de l'écran à droite : c'est perdu, on remet au centre
if (balle.posX < 0) {
balle.posX = 20;
balle.posY = random(20, gb.display.height() - 20); // Position aléatoire au centre de l'écran;
if (random(0, 2) == 1) { // 50% du temps
balle.speedY = 2;
}
else { // 50% du temps
balle.speedY = -2;
}
score2 +=1;
}
// La balle sort de l'écran à gauche : c'est perdu, on remet au centre
if (balle.posX+balle.taille > gb.display.width()) {
balle.posX = 20;
balle.posY = random(20, gb.display.height() - 20); // Position aléatoire au centre de l'écran;
if (random(0, 2) == 1) { // 50% du temps
balle.speedY = 2;
}
else { // 50% du temps
balle.speedY = -2;
}
score1 +=1;
}
// Contrôles de collisions raquette de gauche (1)
if ((balle.posX == raquette1.posX+raquette1.largeur)
&& (balle.posY+balle.taille >= raquette1.posY)
&& (balle.posY <= raquette1.posY+raquette1.hauteur)) {
balle.speedX = 1;
}
// Contrôles de collisions raquette de droite (2)
if ((balle.posX+balle.taille == raquette2.posX)
&& (balle.posY+balle.taille >= raquette2.posY)
&& (balle.posY <= raquette2.posY+raquette2.hauteur)) {
balle.speedX = -1;
}
if (score1 >= 10) {
gb.display.setCursor(10, 30);
gb.display.print("Le joueur gagne");
} else if (score2 >= 10) {
gb.display.setCursor(17, 30);
gb.display.print("La GB gagne");
}
gb.display.fillRect(balle.posX, balle.posY, balle.taille, balle.taille);
gb.display.fillRect(raquette1.posX, raquette1.posY, raquette1.largeur, raquette1.hauteur);
gb.display.fillRect(raquette2.posX, raquette2.posY, raquette2.largeur, raquette2.hauteur);
gb.display.setCursor(33, 5);
gb.display.print(score1);
gb.display.print(" - ");
gb.display.print(score2);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment