Votre adresse email ne sera pas publiée. les champs requis sont indiqués *

#comprendre
#comprendre
#comprendre
#comprendre

#define SCREEN_WIDTH 128 // Largeur d'affichage OLED, en pixels
#define SCREEN_HEIGHT 64 // Hauteur d'affichage OLED, en pixels
#define OLED_RESET 4 // Réinitialiser la broche # (ou -1 si partage la broche de réinitialisation Arduino)

Affichage Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT et Wire, OLED_RESET); // Déclaration pour un écran SSD1306 connecté à I2C (broches SDA, SCL)

résolution int [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, balle [2] = {20, (résolution [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, VITESSE = 3;
int playerScore = 0
, aiScore = 0
, playerPos = 0
, aiPos = 0;
char ballDirectionHori = 'R'
, ballDirectionVerti = 'S';
boolean inProgress = true;

// Prototipo das funcoes
void movePlayer ();
void moveAi ();
void drawScore ();
void eraseScore ();
void drawNet ();
void drawPixel (int posX, int posY, int dimensions);
void erasePixel (int posX, int posY, int dimensions);

instagram viewer

void drawPlayerPaddle (int row);
void erasePlayerPaddle (int row);
void drawAiPaddle (int row);
void eraseAiPaddle (int row);
void drawBall (int x, int y);
void eraseBall (int x, int y);

void setup() {
Serial.begin (9600);

// SSD1306_SWITCHCAPVCC = générer une tension d'affichage de 3,3 V en interne
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresse 0x3D pour 128x64
Serial.println (F ("Échec de l'allocation SSD1306"));
pour (;;); // Ne continue pas, boucle pour toujours
}
display.display ();
retard (2000); // Pause pendant 2 secondes

// Vider le tampon
display.clearDisplay ();
}

boucle vide () {
if (aiScore> 3 || playerScore> 3) {// vérifier l'état du jeu
inProgress = false;

// quelqu'un a gagné
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (BLANC);
display.setCursor (0, 0); // comprendre qui
if (aiScore> playerScore)
display.println ("VOUS PERDEZ!");
sinon si (playerScore> aiScore)
display.println ("VOUS GAGNEZ!");
}

if (inProgress) {
eraseScore ();
eraseBall (balle [0], balle [1]);

if (ballDirectionVerti == 'U') // déplacer la balle en diagonale
balle [1] = balle [1] - VITESSE;

if (ballDirectionVerti == 'D') // déplacer la balle vers le bas en diagonale
balle [1] = balle [1] + VITESSE;

if (ball [1] = resolution [1]) // rebondir la balle du bas
ballDirectionVerti = 'U';

if (ballDirectionHori == 'R') {
balle [0] = balle [0] + VITESSE; // déplacer la balle
if (balle [0]> = (résolution [0] - 6)) {// la balle est au bord AI de l'écran
if ((aiPos + 12)> = balle [1] && (aiPos - 12) (aiPos + 2)) // dévier la balle vers le bas
ballDirectionVerti = 'D';
sinon si (balle [1] ballDirectionVerti = 'U';
else // déviation de balle droite
ballDirectionVerti = 'S';

ballDirectionHori = 'L'; // changer la direction de la balle
} else {// BUT!
balle [0] = 6; // déplacer la balle de l'autre côté de l'écran
ballDirectionVerti = 'S'; // réinitialiser la balle en course droite
balle [1] = résolution [1] / 2; // déplace la balle au milieu de l'écran
++ playerScore; // augmenter le score du joueur
}
}
}

if (ballDirectionHori == 'L') {
balle [0] = balle [0] - VITESSE; // déplacer la balle
if (ball [0] = ball [1] && (playerPos - 12) (playerPos + 2)) // dévier la balle vers le bas
ballDirectionVerti = 'D';
sinon si (balle [1] aiPos)
++ aiPos;
sinon si (boule [1] --aiPos;

drawAiPaddle (aiPos);
}

void drawScore () {// Dessiner l'IA et les scores des joueurs
display.setTextSize (2);
display.setTextColor (BLANC);
display.setCursor (45, 0);
display.println (playerScore);

display.setCursor (75, 0);
display.println (aiScore);
}

void eraseScore () {// Effacer l'IA et les scores des joueurs
display.setTextSize (2);
display.setTextColor (NOIR);
display.setCursor (45, 0);
display.println (playerScore);

display.setCursor (75, 0);
display.println (aiScore);
}

void drawNet () {// Dessiner un champ de ligne
pour (int i = 0; i drawPixel (((résolution [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}

void drawPixel (int posX, int posY, int dimensions) {// Dessine un groupe de pixels
pour (int x = 0; x pour (int y = 0; y display.drawPixel ((posX + x), (posY + y), BLANC);
}

void erasePixel (int posX, int posY, int dimensions) {// Effacer le groupe de pixels
pour (int x = 0; x pour (int y = 0; y display.drawPixel ((posX + x), (posY + y), NOIR);
}

void drawPlayerPaddle (int row) {
drawPixel (0, ligne - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (0, ligne - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, ligne, PADDLE_WIDTH);
drawPixel (0, ligne + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, ligne + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}

void erasePlayerPaddle (int row) {
erasePixel (0, ligne - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (0, ligne - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, ligne, PADDLE_WIDTH);
erasePixel (0, ligne + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, ligne + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}

void drawAiPaddle (int row) {
int colonne = résolution [0] - PADDLE_WIDTH;
drawPixel (colonne, ligne - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (colonne, ligne - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (colonne, ligne, PADDLE_WIDTH);
drawPixel (colonne, ligne + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (colonne, ligne + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

void eraseAiPaddle (int row) {
int colonne = résolution [0] - PADDLE_WIDTH;
erasePixel (colonne, ligne - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (colonne, ligne - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (colonne, ligne, PADDLE_WIDTH);
erasePixel (colonne, ligne + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (colonne, ligne + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

void drawBall (int x, int y) {
display.drawCircle (x, y, BALL_SIZE, WHITE);
}

void eraseBall (int x, int y) {
display.drawCircle (x, y, BALL_SIZE, BLACK);
}