Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti *

# iekļaut
# iekļaut
# iekļaut
# iekļaut

#define SCREEN_WIDTH 128 // OLED displeja platums pikseļos
#define SCREEN_HEIGHT 64 // OLED displeja augstums pikseļos
#define OLED_RESET 4 // Reset pin # (vai -1, ja koplietojat Arduino reset pin)

Adafruit_SSD1306 displejs (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET); // Deklarācija SSD1306 displejam, kas savienots ar I2C (SDA, SCL tapas)

int izšķirtspēja [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, bumba [2] = {20, (izšķirtspēja [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, ĀTRUMS = 3;
int playerScore = 0
, aiScore = 0
, playerPos = 0
, aiPos = 0;
char ballDirectionHori = 'R'
, ballDirectionVerti = 'S';
Būla inProgress = true;

// Prototipo das funcoes
void movePlayer ();
tukšs gājiensAi ();
void drawScore ();
void eraseScore ();
void drawNet ();
void drawPixel (int posX, int posY, int dimensijas);
void erasePixel (int posX, int posY, int dimensijas);
void drawPlayerPaddle (int rinda);

instagram viewer

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

Nederīga iestatīšana () {
Sērijas.begin (9600);

// SSD1306_SWITCHCAPVCC = ģenerē displeja spriegumu no 3.3V iekšēji
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// 0x3D adrese 128x64
Serial.println (F ("SSD1306 piešķiršana neizdevās"));
priekš (;;); // Turpiniet, cilpa uz visiem laikiem
}
displejs. displejs ();
kavēšanās (2000); // Pauze uz 2 sekundēm

// Notīriet buferi
display.clearDisplay ();
}

tukšs cilpa () {
if (aiScore> 3 || playerScore> 3) {// pārbaudiet spēles stāvokli
inProgress = nepatiess;

// kāds ir uzvarējis
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (BALTS);
display.setCursor (0, 0); // izdomāt kurš
if (aiScore> playerScore)
display.println ("JŪS ZAUDIET!");
cits, ja (playerScore> aiScore)
display.println ("YOU WIN!");
}

ja (inProgress) {
dzēstScore ();
eraseBall (bumba [0], bumba [1]);

if (ballDirectionVerti == 'U') // pārvietojiet bumbiņu uz augšu pa diagonāli
bumba [1] = bumba [1] - ĀTRUMS;

if (ballDirectionVerti == 'D') // pārvietojiet bumbiņu uz leju pa diagonāli
bumba [1] = bumba [1] + ĀTRUMS;

if (bumba [1] = izšķirtspēja [1]) // atlec bumbiņu no apakšas
ballDirectionVerti = 'U';

ja (ballDirectionHori == 'R') {
bumba [0] = bumba [0] + ĀTRUMS; // kustināt bumbu
if (bumba [0]> = (izšķirtspēja [0] - 6)) {// bumba atrodas ekrāna AI malā
if ((aiPos + 12)> = bumba [1] && (aiPos - 12) (aiPos + 2)) // novirzīt bumbu uz leju
ballDirectionVerti = 'D';
cits, ja (bumba [1] ballDirectionVerti = 'U';
cits // taisni novirzīt bumbu
ballDirectionVerti = 'S';

ballDirectionHori = 'L'; // mainīt bumbiņas virzienu
} cits {// MĒRĶIS!
bumba [0] = 6; // pārvietojiet bumbu uz otru ekrāna pusi
ballDirectionVerti = 'S'; // atiestatīt bumbu taisnā ceļojumā
bumba [1] = izšķirtspēja [1] / 2; // pārvietojiet bumbu uz ekrāna vidu
++ playerScore; // palielināt spēlētāju rezultātu
}
}
}

ja (ballDirectionHori == 'L') {
bumba [0] = bumba [0] - ĀTRUMS; // kustināt bumbu
if (bumba [0] = bumba [1] && (playerPos - 12) (playerPos + 2)) // novirzīt bumbu uz leju
ballDirectionVerti = 'D';
cits, ja (bumba [1] aiPos)
++ aiPos;
cits, ja (bumba [1] --aiPos;

drawAiPaddle (aiPos);
}

void drawScore () {// Draw AI un spēlētāju rādītāji
display.setTextSize (2);
display.setTextColor (BALTS);
display.setCursor (45, 0);
display.println (playerScore);

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

void eraseScore () {// Dzēst AI un spēlētāju rādītājus
display.setTextSize (2);
display.setTextColor (BLACK);
display.setCursor (45, 0);
display.println (playerScore);

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

void drawNet () {// Draw line field
par (int i = 0; i drawPixel (((izšķirtspēja [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}

void drawPixel (int posX, int posY, int dimensijas) {// Zīmēt pikseļu grupu
priekš (int x = 0; x par (int y = 0; y display.drawPixel ((posX + x), (posY + y), BALTS);
}

void erasePixel (int posX, int posY, int dimensijas) {// Dzēst pikseļu grupu
priekš (int x = 0; x par (int y = 0; y display.drawPixel ((posX + x), (posY + y), BLACK);
}

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

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

void drawAiPaddle (int rinda) {
int kolonna = izšķirtspēja [0] - PADDLE_WIDTH;
drawPixel (kolonna, rinda - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (kolonna, rinda - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (kolonna, rinda, PADDLE_WIDTH);
drawPixel (kolonna, rinda + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (kolonna, rinda + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

void eraseAiPaddle (int rinda) {
int kolonna = izšķirtspēja [0] - PADDLE_WIDTH;
erasePixel (kolonna, rinda - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (kolonna, rinda - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (kolonna, rinda, PADDLE_WIDTH);
erasePixel (kolonna, rinda + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (sleja, rinda + (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);
}