Vaša email adresa neće biti objavljena. obavezna polja su označena *

#include
#include
#include
#include

#define SCREEN_WIDTH 128 // OLED širina zaslona, ​​u pikselima
#define SCREEN_HEIGHT 64 // OLED visina zaslona, ​​u pikselima
#define OLED_RESET 4 // Poništi pin # (ili -1 ako dijelite pin za resetiranje Arduino-a)

Zaslon Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET); // Izjava za SSD1306 zaslon spojen na I2C (SDA, SCL pinovi)

int rezolucija [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, lopta [2] = {20, (rezolucija [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';
boole inProgress = istina;

// Prototipo das funcoes
void movePlayer ();
void moveAi ();
nevažeći rezultat ();
void eraseScore ();
void drawNet ();
void drawPixel (int posX, int posY, int dimenzije);
void erasePixel (int posX, int posY, int dimenzije);
void drawPlayerPaddle (int red);

instagram viewer

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

poništavanje postave () {
Serijski počet (9600);

// SSD1306_SWITCHCAPVCC = generira interni napon od 3.3V
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresa 0x3D za 128x64
Serial.println (F ("izdvajanje SSD1306 nije uspjelo"));
za (;;); // Ne nastavljaj, petljaj zauvijek
}
display.display ();
kašnjenje (2000); // Pauza za 2 sekunde

// Izbrišite međuspremnik
display.clearDisplay ();
}

void petlja () {
ako (aiScore> 3 || playerScore> 3) {// provjeri stanje igre
inProgress = lažno;

// netko je pobijedio
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
prikaz.setCursor (0, 0); // shvatiti tko
ako (aiScore> playerScore)
display.println ("GUBITE!");
drugo ako (playerScore> aiScore)
display.println ("DOBITIŠ!");
}

ako (inProgress) {
eraseScore ();
eraseBall (lopta [0], kugla [1]);

ako (ballDirectionVerti == 'U') // pomicanje kuglice dijagonalno
lopta [1] = lopta [1] - BRZINA;

ako (ballDirectionVerti == 'D') // pomicanje lopte dijagonalno
lopta [1] = lopta [1] + BRZINA;

ako (lopta [1] = rezolucija [1]) // odbije loptu s dna
ballDirectionVerti = 'U';

ako je (ballDirectionHori == 'R') {
lopta [0] = lopta [0] + BRZINA; // pomaknuti loptu
ako je (lopta [0]> = (rezolucija [0] - 6)) {// lopta je na AI rubu zaslona
ako je ((aiPos + 12)> = lopta [1] && (aiPos - 12) (aiPos + 2)) // odbiti loptu prema dolje
ballDirectionVerti = 'D';
else if (lopta [1] ballDirectionVerti = 'U';
else // odbiti loptu ravno
ballDirectionVerti = 'S';

ballDirectionHori = 'L'; // promijeniti smjer lopte
} else {// CILJ!
lopta [0] = 6; // pomicanje lopte na drugu stranu ekrana
ballDirectionVerti = 'S'; // resetirajte loptu na ravno putovanje
lopta [1] = rezolucija [1] / 2; // pomicanje lopte na sredinu ekrana
++ playerScore; // povećati rezultat igrača
}
}
}

ako je (ballDirectionHori == 'L') {
lopta [0] = lopta [0] - BRZINA; // pomaknuti loptu
if (lopta [0] = lopta [1] && (playerPos - 12) (playerPos + 2)) // odbiti loptu prema dolje
ballDirectionVerti = 'D';
drugo ako (lopta [1] aiPos)
++ aiPos;
drugo ako (lopta [1] --aiPos;

drawAiPaddle (aiPos);
}

void drawScore () {// Izvlači AI i rezultate igrača
display.setTextSize (2);
display.setTextColor (WHITE);
prikaz.setCursor (45, 0);
prikaz.println (playerScore);

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

void eraseScore () {// Brisanje AI i rezultati igrača
display.setTextSize (2);
display.setTextColor (CRNI);
prikaz.setCursor (45, 0);
prikaz.println (playerScore);

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

void drawNet () {// Polje crtanja crte
za (int i = 0; i drawPixel ((((rezolucija [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}

void drawPixel (int posX, int posY, int dimenzije) {// Nacrtaj grupu piksela
za (int x = 0; x za (int y = 0; y display.drawPixel ((posX + x), (posY + y), WHITE);
}

void erasePixel (int posX, int posY, int dimenzije) {// Brisanje grupe piksela
za (int x = 0; x za (int y = 0; y prikaz.drawPixel ((posX + x), (posY + y), CRNI);
}

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

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

void drawAiPaddle (int red) {
int stupac = rezolucija [0] - PADDLE_WIDTH;
drawPixel (stupac, red - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (stupac, redak - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (stupac, redak, PADDLE_WIDTH);
drawPixel (stupac, redak + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (stupac, redak + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

void eraseAiPaddle (int red) {
int stupac = rezolucija [0] - PADDLE_WIDTH;
erasePixel (stupac, red - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (stupac, redak - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (stupac, redak, PADDLE_WIDTH);
erasePixel (stupac, redak + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (stupac, redak + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

nevažeći 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);
}