Jūsų el. Pašto adresas nebus paskelbtas. Privalomi laukai yra pažymėti *

# įtraukti
# įtraukti
# įtraukti
# įtraukti

#define SCREEN_WIDTH 128 // OLED ekrano plotis pikseliais
#define SCREEN_HEIGHT 64 // OLED ekrano aukštis pikseliais
#define OLED_RESET 4 // Reset pin # (arba -1, jei dalijamasi „Arduino“ reset pin)

„Adafruit_SSD1306“ ekranas („SCREEN_WIDTH“, „SCREEN_HEIGHT“ ir „Viela“, „OLED_RESET“); // SSD1306 ekrano, prijungto prie I2C, deklaracija (SDA, SCL kaiščiai)

vidinė skiriamoji geba [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, rutulys [2] = {20, (skiriamoji geba [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, Greitis = 3;
„int playerScore = 0“
, „aiScore“ = 0
, „playerPos“ = 0
, aiPos = 0;
char ballDirectionHori = 'R'
, ballDirectionVerti = 'S';
boolean inProgress = true;

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

instagram viewer

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

negaliojanti sąranka () {
„Serial.begin“ (9600);

// SSD1306_SWITCHCAPVCC = sukuria ekrano įtampą iš 3,3 V vidinės
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// 128x64 adresas 0x3D
„Serial.println“ (F („Nepavyko paskirstyti SSD1306“));
dėl (;;); // Negalima tęsti, kilpa amžinai
}
rodyti.display ();
vėlavimas (2000 m.); // Pauzė 2 sekundėms

// Išvalykite buferį
display.clearDisplay ();
}

tuščia kilpa () {
if (aiScore> 3 || playerScore> 3) {// patikrinkite žaidimo būseną
inProgress = klaidinga;

// kažkas laimėjo
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
„display.setCursor“ (0, 0); // išsiaiškink kas
if (aiScore> playerScore)
display.println („JŪS LOSE!“);
else if („playerScore“> „aiScore“)
display.println („JŪS LAIMĖKITE!“);
}

if (inProgress) {
„eraseScore“ ();
„eraseBall“ (kamuolys [0], kamuolys [1]);

if (ballDirectionVerti == 'U') // perkelkite rutulį įstrižai
rutulys [1] = rutulys [1] - SPEED;

if (ballDirectionVerti == 'D') // judinkite rutulį žemyn įstrižai
rutulys [1] = rutulys [1] + greitis;

if (rutulys [1] = skiriamoji geba [1]) // atmeskite rutulį nuo apačios
ballDirectionVerti = „U“;

if (ballDirectionHori == 'R') {
kamuolys [0] = kamuolys [0] + greitis; // perkelti kamuolį
if (rutulys [0]> = (skiriamoji geba [0] - 6)) {// rutulys yra AI ekrano krašte
if ((aiPos + 12)> = kamuolys [1] && (aiPos - 12) (aiPos + 2)) // nukreipkite rutulį žemyn
ballDirectionVerti = 'D';
else if (kamuolys [1] ballDirectionVerti = „U“;
else // nukreipkite rutulį tiesiai
ballDirectionVerti = 'S';

ballDirectionHori = 'L'; // pakeisti rutulio kryptį
} dar {// TIKSLAS!
rutulys [0] = 6; // perkelkite kamuoliuką į kitą ekrano pusę
ballDirectionVerti = 'S'; // atkurti rutulį tiesia kelione
rutulys [1] = skiriamoji geba [1] / 2; // perkelkite rutulį į ekrano vidurį
++ playerScore; // padidinti žaidėjo rezultatą
}
}
}

if (ballDirectionHori == 'L') {
rutulys [0] = rutulys [0] - SPEED; // perkelti kamuolį
if (kamuolys [0] = rutulys [1] && (žaidėjasPos - 12) (žaidėjasPos + 2)) // nukreipkite kamuolį žemyn
ballDirectionVerti = 'D';
else if (kamuolys [1] aiPos)
++ aiPos;
else if (kamuolys [1] --aiPos;

pieštiAiPaddle (aiPos);
}

void drawScore () {// Lygiosios AI ir žaidėjų balai
display.setTextSize (2);
display.setTextColor (WHITE);
„display.setCursor“ (45, 0);
display.println (playerScore);

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

void eraseScore () {// Ištrinti AI ir žaidėjų balus
display.setTextSize (2);
display.setTextColor (BLACK);
„display.setCursor“ (45, 0);
display.println (playerScore);

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

void drawNet () {// Brėžti eilutės lauką
už (int i = 0; i „drawPixel“ (((skiriamoji geba [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}

void drawPixel (int posX, int posY, int matmenys) {// Nubraižykite taškų grupę
už (int x = 0; x už (int y = 0; y display.drawPixel ((posX + x), (pozY + y), BALTAS);
}

void erasePixel (int posX, int posY, int dimensijos) {// Trinti taškų grupę
už (int x = 0; x už (int y = 0; y display.drawPixel ((posX + x), (pozY + y), BLACK);
}

void drawPlayerPaddle (vidinė eilutė) {
„drawPixel“ (0, eilutė - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
„drawPixel“ (0, eilutė - PADDLE_WIDTH, PADDLE_WIDTH);
„drawPixel“ (0, eilutė, PADDLE_WIDTH);
„drawPixel“ (0, eilutė + PADDLE_WIDTH, PADDLE_WIDTH);
„drawPixel“ (0, + eilutė (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}

void erasePlayerPaddle (vidinė eilutė) {
„erasePixel“ (0, eilutė - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
„erasePixel“ (0, eilutė - PADDLE_WIDTH, PADDLE_WIDTH);
„erasePixel“ (0, eilutė, PADDLE_WIDTH);
„erasePixel“ (0, eilutė + PADDLE_WIDTH, PADDLE_WIDTH);
„erasePixel“ (0, + eilutė (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}

void drawAiPaddle (vidinė eilutė) {
int stulpelis = skiriamoji geba [0] - PADDLE_WIDTH;
„drawPixel“ (stulpelis, eilutė - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
„drawPixel“ (stulpelis, eilutė - PADDLE_WIDTH, PADDLE_WIDTH);
„drawPixel“ (stulpelis, eilutė, „PADDLE_WIDTH“);
„drawPixel“ (stulpelis, eilutė + PADDLE_WIDTH, PADDLE_WIDTH);
„drawPixel“ (stulpelis, + eilutė (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

void eraseAiPaddle (vidinė eilutė) {
int stulpelis = skiriamoji geba [0] - PADDLE_WIDTH;
„erasePixel“ (stulpelis, eilutė - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
„erasePixel“ (stulpelis, eilutė - PADDLE_WIDTH, PADDLE_WIDTH);
„erasePixel“ (stulpelis, eilutė, „PADDLE_WIDTH“);
„erasePixel“ (stulpelis, eilutė + PADDLE_WIDTH, PADDLE_WIDTH);
„erasePixel“ (stulpelis, + eilutė (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);
}