E-postadressen din vil ikke offentliggjøres. Nødvendige felt er merket *

#inkludere
#inkludere
#inkludere
#inkludere

#definere SCREEN_WIDTH 128 // OLED visningsbredde, i piksler
#definere SCREEN_HEIGHT 64 // OLED visningshøyde, i piksler
#definere OLED_RESET 4 // Tilbakestill pin # (eller -1 hvis du deler Arduino reset pin)

Adafruit_SSD1306-skjerm (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET); // Erklæring for en SSD1306-skjerm koblet til I2C (SDA, SCL-pinner)

int-oppløsning [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, ball [2] = {20, (oppløsning [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, HASTIGHET = 3;
int playerScore = 0
, aiScore = 0
, playerPos = 0
, aiPos = 0;
char ballDirectionHori = 'R'
, ballDirectionVerti = 'S';
boolsk inProgress = sann;

// Prototipo das funcoes
void movePlayer ();
void moveAi ();
void drawScore ();
void eraseScore ();
void drawNet ();
void drawPixel (int posX, int posY, int dimensjoner);
void erasePixel (int posX, int posY, int dimensjoner);
void drawPlayerPaddle (int-rad);


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

ugyldig oppsett () {
Serial.begin (9600);

// SSD1306_SWITCHCAPVCC = generer visningsspenning fra 3,3V internt
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresse 0x3D for 128x64
Serial.println (F ("SSD1306 tildeling mislyktes"));
for (;;); // Ikke fortsett, loop for alltid
}
display.display ();
forsinkelse (2000); // Pause i 2 sekunder

// Tøm bufferen
display.clearDisplay ();
}

void loop () {
if (aiScore> 3 || playerScore> 3) {// sjekk spilltilstand
inProgress = falsk;

// noen har vunnet
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (HVIT);
display.set Markør (0, 0); // finne ut hvem
if (aiScore> playerScore)
display.println ("DU MISTER!");
annet hvis (playerScore> aiScore)
display.println ("DU VINNER!");
}

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

if (ballDirectionVerti == 'U') // flytt ballen diagonalt opp
ball [1] = ball [1] - SPEED;

if (ballDirectionVerti == 'D') // flytt ballen diagonalt ned
ball [1] = ball [1] + HASTIGHET;

if (ball [1] = oppløsning [1]) // sprett ballen av bunnen
ballDirectionVerti = 'U';

if (ballDirectionHori == 'R') {
ball [0] = ball [0] + HASTIGHET; // flytte ballen
if (ball [0]> = (oppløsning [0] - 6)) {// ball er i AI-kanten av skjermen
hvis ((aiPos + 12)> = ball [1] && (aiPos - 12) (aiPos + 2)) // avleder ballen ned
ballDirectionVerti = 'D';
ellers hvis (ball [1] ballDirectionVerti = 'U';
annet // avlede ballen rett
ballDirectionVerti = 'S';

ballDirectionHori = 'L'; // endre ballretning
} annet {// MÅL!
ball [0] = 6; // flytt ballen til den andre siden av skjermen
ballDirectionVerti = 'S'; // tilbakestill ballen til rett kjøring
ball [1] = oppløsning [1] / 2; // flytt ballen til midten av skjermen
++ playerScore; // øke spillerens poengsum
}
}
}

if (ballDirectionHori == 'L') {
ball [0] = ball [0] - SPEED; // flytte ballen
if (ball [0] = ball [1] && (playerPos - 12) (playerPos + 2)) // avlede ballen ned
ballDirectionVerti = 'D';
annet hvis (ball [1] aiPos)
++ aiPos;
annet hvis (ball [1] --aiPos;

drawAiPaddle (aiPos);
}

void drawScore () {// Draw AI og spiller score
display.setTextSize (2);
display.setTextColor (HVIT);
display.set Markør (45, 0);
display.println (playerScore);

display.set Markør (75, 0);
display.println (aiScore);
}

void eraseScore () {// Slett AI og spiller score
display.setTextSize (2);
display.setTextColor (SVART);
display.set Markør (45, 0);
display.println (playerScore);

display.set Markør (75, 0);
display.println (aiScore);
}

void drawNet () {// Draw line field
for (int i = 0; i drawPixel (((oppløsning [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}

void drawPixel (int posX, int posY, int dimensjoner) {// Tegn gruppe piksler
for (int x = 0; x for (int y = 0; y display.drawPixel ((posX + x), (posY + y), WHITE);
}

void erasePixel (int posX, int posY, int dimensjoner) {// Slett gruppe av piksler
for (int x = 0; x for (int y = 0; y display.drawPixel ((posX + x), (posY + y), SVART);
}

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

void erasePlayerPaddle (int rad) {
slette Pixel (0, rad - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
slette Pixel (0, rad - PADDLE_WIDTH, PADDLE_WIDTH);
slette Pixel (0, rad, PADDLE_WIDTH);
slette Pixel (0, rad + PADDLE_WIDTH, PADDLE_WIDTH);
slette Pixel (0, rad + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}

void drawAiPaddle (int rad) {
int-kolonne = oppløsning [0] - PADDLE_WIDTH;
drawPixel (kolonne, rad - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (kolonne, rad - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (kolonne, rad, PADDLE_WIDTH);
drawPixel (kolonne, rad + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (kolonne, rad + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

void eraseAiPaddle (int rad) {
int-kolonne = oppløsning [0] - PADDLE_WIDTH;
erasePixel (kolonne, rad - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
slette Pixel (kolonne, rad - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (kolonne, rad, PADDLE_WIDTH);
slette Pixel (kolonne, rad + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (kolonne, rad + (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, SVART);
}