Az e-mail címed nem kerül nyilvánosságra. A kötelező mezők meg vannak jelölve *

#include
#include
#include
#include

#define SCREEN_WIDTH 128 // OLED megjelenítési szélesség pixelben
#define SCREEN_HEIGHT 64 // OLED megjelenítési magasság pixelben
#define OLED_RESET 4 // Reset pin # (vagy -1, ha megosztja az Arduino reset pin-t)

Adafruit_SSD1306 kijelző (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET); // Nyilatkozat az I2C-hez csatlakoztatott SSD1306 kijelzőről (SDA, SCL csapok)

int felbontás [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, golyó [2] = {20, (felbontás [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, SPEED = 3;
int playerScore = 0
, aiScore = 0
, playerPos = 0
, aiPos = 0;
char ballDirectionHori = 'R'
, ballDirectionVerti = 'S';
logikai inProgress = true;

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

instagram viewer

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

érvénytelen beállítás () {
Serial.begin (9600);

// SSD1306_SWITCHCAPVCC = a kijelző feszültségét generálja a belső 3,3 V-ból
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// 0x3D cím 128x64 esetén
Serial.println (F ("SSD1306 allokáció sikertelen"));
mert (;;); // Ne folytassa, hurok örökké
}
display.display ();
késés (2000); // Szünet 2 másodpercre

// Törölje a puffert
display.clearDisplay ();
}

void loop () {
if (aiScore> 3 || playerScore> 3) {// ellenőrizze a játék állapotát
inProgress = hamis;

// valaki nyert
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (FEHÉR);
display.setCursor (0, 0); // kitalálni ki
if (aiScore> playerScore)
display.println ("ELFOGAD!");
egyébként ha (playerScore> aiScore)
display.println ("NYERT!");
}

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

if (ballDirectionVerti == 'U') // mozgassa felfelé a labdát átlósan
labda [1] = labda [1] - SPEED;

if (ballDirectionVerti == 'D') // mozgassa le a labdát átlósan
labda [1] = labda [1] + gyorsaság;

if (labda [1] = felbontás [1]) // ugrál a labda aljára
ballDirectionVerti = 'U';

if (ballDirectionHori == 'R') {
labda [0] = labda [0] + SPEED; // labda mozgatása
if (labda [0]> = (felbontás [0] - 6)) {// a labda a képernyő AI szélén van
if ((aiPos + 12)> = labda [1] && (aiPos - 12) (aiPos + 2)) // irányítsa le a labdát
ballDirectionVerti = 'D';
különben ha (labda [1] ballDirectionVerti = 'U';
egyéb // egyenesen irányítsa el a labdát
ballDirectionVerti = 'S';

ballDirectionHori = 'L'; // módosítsa a golyó irányát
} egyéb {// CÉL!
golyó [0] = 6; // mozgassa a labdát a képernyő másik oldalára
ballDirectionVerti = 'S'; // visszaállítja a labdát az egyenes menetre
golyó [1] = felbontás [1] / 2; // mozgassa a labdát a képernyő közepére
++ playerScore; // növeli a játékos pontszámát
}
}
}

if (ballDirectionHori == 'L') {
labda [0] = labda [0] - SPEED; // labda mozgatása
if (labda [0] = labda [1] && (playerPos - 12) (playerPos + 2)) // dobja le a labdát le
ballDirectionVerti = 'D';
egyébként ha (labda [1] aiPos)
++ aiPos;
egyébként ha (labda [1] --aiPos;

drawAiPaddle (aiPos);
}

void drawScore () {// Döntetlen és játékos pontszámok
display.setTextSize (2);
display.setTextColor (FEHÉR);
display.setCursor (45, 0);
display.println (playerScore);

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

void eraseScore () {// AI és játékos törlése
display.setTextSize (2);
display.setTextColor (FEKETE);
display.setCursor (45, 0);
display.println (playerScore);

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

void drawNet () {// Vonalmező rajzolása
for (int i = 0; i drawPixel (((felbontás [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}

void drawPixel (int posX, int posY, int méretek) {// Rajzolj pixeleket
mert (int x = 0; x mert (int y = 0; y display.drawPixel ((posX + x), (posY + y), FEHÉR);
}

void erasePixel (int posX, int posY, int méretek) {// pixelek csoportjának törlése
mert (int x = 0; x mert (int y = 0; y display.drawPixel ((posX + x), (posY + y), FEKETE);
}

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

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

void drawAiPaddle (int sor) {
int oszlop = felbontás [0] - PADDLE_WIDTH;
drawPixel (oszlop, sor - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (oszlop, sor - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (oszlop, sor, PADDLE_WIDTH);
drawPixel (oszlop, sor + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (oszlop, + sor (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

void eraseAiPaddle (int sor) {
int oszlop = felbontás [0] - PADDLE_WIDTH;
erasePixel (oszlop, sor - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (oszlop, sor - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (oszlop, sor, PADDLE_WIDTH);
erasePixel (oszlop, sor + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (oszlop, + sor (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

void drawBall (int x, int y) {
display.drawCircle (x, y, BALL_SIZE, FEHÉR);
}

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