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);
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]
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
}
void erasePixel (int posX, int posY, int dimensijas) {// Dzēst pikseļu grupu
priekš (int x = 0; x
}
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);
}