L'indirizzo email non verrà pubblicato. i campi richiesti sono contrassegnati *
#includere
#includere
#includere
#includere
#define SCREEN_WIDTH 128 // Larghezza schermo OLED, in pixel
#define SCREEN_HEIGHT 64 // Altezza del display OLED, in pixel
#define OLED_RESET 4 // Reimposta pin # (o -1 se condividi Arduino reimposta pin)
Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT e Wire, OLED_RESET); // Dichiarazione per un display SSD1306 collegato a I2C (pin SDA, SCL)
int risoluzione [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, palla [2] = {20, (risoluzione [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, VELOCITÀ = 3;
int playerScore = 0
, aiScore = 0
, playerPos = 0
, aiPos = 0;
char ballDirectionHori = 'R'
, ballDirectionVerti = 'S';
booleano inProgress = true;
// Prototipo das funcoes
void movePlayer ();
void moveAi ();
void drawScore ();
void eraseScore ();
void drawNet ();
void drawPixel (int posX, int posY, int dimensioni);
void erasePixel (int posX, int posY, int dimensioni);
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 = genera internamente una tensione di visualizzazione da 3.3V
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Indirizzo 0x3D per 128x64
Serial.println (F ("Allocazione SSD1306 non riuscita"));
per (;;); // Non procedere, loop per sempre
}
Display.Display ();
ritardo (2000); // Pausa per 2 secondi
// Cancella il buffer
display.clearDisplay ();
}
void loop () {
if (aiScore> 3 || playerScore> 3) {// controlla lo stato del gioco
inProgress = false;
// qualcuno ha vinto
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
display.setCursor (0, 0); // capire chi
if (aiScore> playerScore)
display.println ("YOU LOSE!");
altrimenti if (playerScore> aiScore)
display.println ("TU VINCI!");
}
if (inProgress) {
eraseScore ();
eraseBall (palla [0], palla [1]);
if (ballDirectionVerti == 'U') // sposta la palla verso l'alto in diagonale
palla [1] = palla [1] - VELOCITÀ;
if (ballDirectionVerti == 'D') // sposta la palla verso il basso in diagonale
palla [1] = palla [1] + VELOCITÀ;
if (palla [1] = risoluzione [1]) // rimbalza la palla dal fondo
ballDirectionVerti = 'U';
if (ballDirectionHori == 'R') {
palla [0] = palla [0] + VELOCITÀ; // sposta la palla
if (palla [0]> = (risoluzione [0] - 6)) {// la palla si trova sul bordo AI dello schermo
if ((aiPos + 12)> = ball [1] && (aiPos - 12) (aiPos + 2)) // deflect ball down
ballDirectionVerti = 'D';
else if (palla [1] ballDirectionVerti = 'U';
altrimenti // devia la palla dritta
ballDirectionVerti = 'S';
ballDirectionHori = 'L'; // cambia la direzione della palla
} else {// GOAL!
palla [0] = 6; // sposta la palla sull'altro lato dello schermo
ballDirectionVerti = 'S'; // resetta la palla per viaggiare dritto
palla [1] = risoluzione [1] / 2; // sposta la palla al centro dello schermo
++ playerScore; // aumenta il punteggio del giocatore
}
}
}
if (ballDirectionHori == 'L') {
palla [0] = palla [0] - VELOCITÀ; // sposta la palla
if (palla [0] = palla [1] && (playerPos - 12) (playerPos + 2)) // defletti palla
ballDirectionVerti = 'D';
else if (palla [1] aiPos)
++ aiPos;
else if (palla [1]
drawAiPaddle (aiPos);
}
void drawScore () {// Disegna i punteggi AI e giocatore
display.setTextSize (2);
display.setTextColor (WHITE);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void eraseScore () {// Cancella AI e punteggi dei giocatori
display.setTextSize (2);
display.setTextColor (NERO);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void drawNet () {// Disegna il campo linea
per (int i = 0; i drawPixel (((risoluzione [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}
void drawPixel (int posX, int posY, int Dimensions) {// Disegna un gruppo di pixel
per (int x = 0; x
}
void erasePixel (int posX, int posY, int dimensioni) {// Cancella gruppo di pixel
per (int x = 0; x
}
void drawPlayerPaddle (int row) {
drawPixel (0, row - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (0, riga - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, riga, PADDLE_WIDTH);
drawPixel (0, riga + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, riga + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
void erasePlayerPaddle (int row) {
erasePixel (0, riga - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (0, riga - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, riga, PADDLE_WIDTH);
erasePixel (0, riga + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, riga + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
void drawAiPaddle (int row) {
int column = risoluzione [0] - PADDLE_WIDTH;
drawPixel (colonna, riga - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (colonna, riga - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (colonna, riga, PADDLE_WIDTH);
drawPixel (colonna, riga + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (colonna, riga + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}
void eraseAiPaddle (int row) {
int column = risoluzione [0] - PADDLE_WIDTH;
erasePixel (colonna, riga - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (colonna, riga - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (colonna, riga, PADDLE_WIDTH);
erasePixel (colonna, riga + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (colonna, riga + (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);
}