Sähköpostiosoitettasi ei julkaista. pakolliset kentät on merkitty *

#sisältää
#sisältää
#sisältää
#sisältää

#define SCREEN_WIDTH 128 // OLED-näytön leveys kuvapisteinä
#define SCREEN_HEIGHT 64 // OLED-näytön korkeus kuvapisteinä
#define OLED_RESET 4 // Nollaa nasta # (tai -1, jos jaat Arduinon nollaustapin)

Adafruit_SSD1306-näyttö (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET); // Ilmoitus IDC: hen kytketystä SSD1306-näytöstä (SDA, SCL-nastat)

intresoluutio [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, pallo [2] = {20, (resoluutio [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, NOPEUS = 3;
int pelaajaScore = 0
, aiScore = 0
, pelaajaPos = 0
, aiPos = 0;
char ballDirectionHori = 'R'
, ballDirectionVerti = 'S';
boolean inProgress = true;

// Prototipo das funcoes
void movePlayer ();
tyhjä siirtoAi ();
void drawScore ();
tyhjä tyhjennysScore ();
void drawNet ();
void drawPixel (int posX, int posY, int mitat);
void erasePixel (int posX, int posY, int mitat);
void drawPlayerPaddle (int-rivi);


void erasePlayerPaddle (int-rivi);
void drawAiPaddle (int-rivi);
tyhjä tyhjennysAiPaddle (int-rivi);
tyhjä vetopallo (int x, int y);
tyhjä tyhjennyspallo (int x, int y);

tyhjä asennus () {
Serial.begin (9600);

// SSD1306_SWITCHCAPVCC = tuottaa näyttöjännitteen 3,3 V: n sisäisesti
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Osoite 0x3D 128x64: lle
Serial.println (F ("SSD1306-allokointi epäonnistui"));
varten (;;); // Älä jatka, silmukka ikuisesti
}
display.display ();
viive (2000); // Tauko 2 sekunniksi

// Poista puskuri
display.clearDisplay ();
}

tyhjä silmukka () {
if (aiScore> 3 || playerScore> 3) {// tarkista pelitila
inProgress = väärä;

// joku on voittanut
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
display.setCursor (0, 0); // selvittää kuka
if (aiScore> playerScore)
display.println ("menetät!");
muuten jos (playerScore> aiScore)
display.println ("VOIT VOIT!");
}

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

if (ballDirectionVerti == 'U') // siirrä palloa ylöspäin vinottain
pallo [1] = pallo [1] - NOPEUS;

if (ballDirectionVerti == 'D') // siirrä palloa alaspäin vinottain
pallo [1] = pallo [1] + NOPEUS;

if (pallo [1] = resoluutio [1]) // pomppaa pallo pohjasta
ballDirectionVerti = 'U';

if (ballDirectionHori == 'R') {
pallo [0] = pallo [0] + NOPEUS; // siirtää palloa
if (pallo [0]> = (tarkkuus [0] - 6)) {// pallo on näytön AI-reunassa
if ((aiPos + 12)> = pallo [1] && (aiPos - 12) (aiPos + 2)) // ohjaa pallo alas
ballDirectionVerti = 'D';
muuten jos (pallo [1] ballDirectionVerti = 'U';
else // taivuta pallo suoraan
ballDirectionVerti = 'S';

ballDirectionHori = 'L'; // muuttaa pallon suuntaa
} muuta {// TAVOITE!
pallo [0] = 6; // siirrä pallo näytön toiselle puolelle
ballDirectionVerti = 'S'; // palauta pallo suoriin matkoihin
pallo [1] = erotuskyky [1] / 2; // siirrä pallo näytön keskelle
++ playerScore; // lisää pelaajan pisteet
}
}
}

if (ballDirectionHori == 'L') {
pallo [0] = pallo [0] - NOPEUS; // siirtää palloa
if (pallo [0] = pallo [1] && (playerPos - 12) (playerPos + 2)) // ohjaa pallo alas
ballDirectionVerti = 'D';
muuten jos (pallo [1] aiPos)
++ aiPos;
muuten jos (pallo [1] --aiPos;

drawAiPaddle (aiPos);
}

void drawScore () {// Piirrä AI ja pelaajien tulokset
display.setTextSize (2);
display.setTextColor (WHITE);
display.setCursor (45, 0);
display.println (playerScore);

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

void eraseScore () {// Poista AI ja pelaajien tulokset
display.setTextSize (2);
display.setTextColor (MUSTA);
display.setCursor (45, 0);
display.println (playerScore);

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

void drawNet () {// Piirrä viivakenttä
varten (int i = 0; i drawPixel (((resoluutio [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}

void drawPixel (int posX, int posY, int mitat) {// Piirrä pikseliryhmä
for (int x = 0; x varten (int y = 0; y display.drawPixel ((posX + x), (posY + y), VALKOINEN);
}

void erasePixel (int posX, int posY, int mitat) {// Poista pikseliryhmä
for (int x = 0; x varten (int y = 0; y display.drawPixel ((posX + x), (posY + y), MUSTA);
}

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

tyhjä erasePlayerPaddle (int-rivi) {
erasePixel (0, rivi - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (0, rivi - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, rivi, PADDLE_WIDTH);
erasePixel (0, rivi + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, rivi + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}

void drawAiPaddle (int-rivi) {
int-sarake = resoluutio [0] - PADDLE_WIDTH;
drawPixel (sarake, rivi - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (sarake, rivi - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (sarake, rivi, PADDLE_WIDTH);
drawPixel (sarake, rivi + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (sarake, rivi + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

tyhjä eraseAiPaddle (int-rivi) {
int-sarake = resoluutio [0] - PADDLE_WIDTH;
erasePixel (sarake, rivi - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (sarake, rivi - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (sarake, rivi, PADDLE_WIDTH);
erasePixel (sarake, rivi + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (sarake, rivi + (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);
}