Vaša e-mailová adresa nebude zverejnená. Povinné polia sú označené *
#include
#include
#include
#include
#define SCREEN_WIDTH 128 // OLED šírka displeja v pixloch
#define SCREEN_HEIGHT 64 // Výška displeja OLED v pixeloch
#define OLED_RESET 4 // Reset pin # (alebo -1, ak zdieľate resetovací pin Arduino)
Displej Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET); // Vyhlásenie pre displej SSD1306 pripojený k I2C (kolíky SDA, SCL)
int rozlíšenie [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
guľa [2] = {20, (rozlíšenie [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, RÝCHLOSŤ = 3;
int playerScore = 0
, aiScore = 0
, playerPos = 0
aiPos = 0;
char ballDirectionHori = 'R'
, ballDirectionVerti = 'S';
boolean inProgress = true;
// Prototipo das funcoes
void movePlayer ();
neplatné moveAi ();
void drawScore ();
void eraseScore ();
void drawNet ();
void drawPixel (int posX, int posY, int kóty);
void erasePixel (int posX, int posY, int dimension);
void drawPlayerPaddle (int riadok);
void erasePlayerPaddle (int riadok);
neplatné drawAiPaddle (int riadok);
void eraseAiPaddle (int riadok);
void drawBall (int x, int y);
void eraseBall (int x, int y);
neplatné nastavenie () {
Serial.egegin (9600);
// SSD1306_SWITCHCAPVCC = generuje napätie displeja z 3,3 V interne
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresa 0x3D pre 128x64
Serial.println (F („Pridelenie SSD1306 zlyhalo“));
pre (;;); // Nepokračujte, navždy slučte
}
display.display ();
oneskorenie (2000); // Pauza na 2 sekundy
// Vymažte medzipamäť
display.clearDisplay ();
}
void loop () {
if (aiScore> 3 || playerScore> 3) {// skontrolujte stav hry
inProgress = false;
// niekto vyhral
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
display.setCursor (0, 0); // zistiť, kto
if (aiScore> playerScore)
display.println („YOS LOSE!“);
inak ak (playerScore> aiScore)
display.println („YOU WIN!“);
}
if (inProgress) {
eraseScore ();
eraseBall (lopta [0], lopta [1]);
ak (ballDirectionVerti == 'U') // posunúť loptu diagonálne
guľa [1] = guľa [1] - RÝCHLOSŤ;
ak (ballDirectionVerti == 'D') // posuňte loptu dole diagonálne
lopta [1] = lopta [1] + RÝCHLOSŤ;
ak (lopta [1] = rozlíšenie [1]) // odrazí loptu z dna
ballDirectionVerti = 'U';
if (ballDirectionHori == 'R') {
lopta [0] = lopta [0] + RÝCHLOSŤ; // presuňte loptu
ak (guľa [0]> = (rozlíšenie [0] - 6)) {// guľa je na okraji AI obrazovky
ak ((aiPos + 12)> = lopta [1] && (aiPos - 12) (aiPos + 2)) // vychýliť loptu dole
ballDirectionVerti = 'D';
inak ak (lopta [1] ballDirectionVerti = 'U';
inak // vychyľovať loptu rovno
ballDirectionVerti = 'S';
ballDirectionHori = 'L'; // zmeniť smer lopty
} else {// GOAL!
guľa [0] = 6; // presuňte loptu na druhú stranu obrazovky
ballDirectionVerti = 'S'; // vynulovanie lopty na priamy pohyb
guľa [1] = rozlíšenie [1] / 2; // presuňte loptu do stredu obrazovky
++ playerScore; // zvýšenie skóre hráča
}
}
}
if (ballDirectionHori == 'L') {
lopta [0] = lopta [0] - RÝCHLOSŤ; // presuňte loptu
ak (lopta [0] = lopta [1] && (playerPos - 12) (playerPos + 2)) // vychýliť loptu
ballDirectionVerti = 'D';
inak ak (lopta [1] aiPos)
++ aiPos;
inak ak (lopta [1]
drawAiPaddle (aiPos);
}
void drawScore () {// Nakreslite AI a skóre hráča
display.setTextSize (2);
display.setTextColor (WHITE);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void eraseScore () {// Vymazať AI a skóre hráča
display.setTextSize (2);
display.setTextColor (BLACK);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void drawNet () {// Nakreslite čiaru poľa
pre (int i = 0; i drawPixel (((rozlíšenie [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}
void drawPixel (int posX, int posY, int dimension) {// Nakreslite skupinu pixelov
pre (int x = 0; x
}
void erasePixel (int posX, int posY, int dimension) {// Vymazať skupinu pixlov
pre (int x = 0; x
}
void drawPlayerPaddle (int row) {
drawPixel (0, riadok - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (0, riadok - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, riadok, PADDLE_WIDTH);
drawPixel (0, riadok + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, riadok + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
void erasePlayerPaddle (int row) {
erasePixel (0, riadok - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (0, riadok - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, riadok, PADDLE_WIDTH);
erasePixel (0, riadok + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, riadok + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
void drawAiPaddle (int row) {
int stĺpec = rozlíšenie [0] - PADDLE_WIDTH;
drawPixel (stĺpec, riadok - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (stĺpec, riadok - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (stĺpec, riadok, PADDLE_WIDTH);
drawPixel (stĺpec, riadok + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (stĺpec, riadok + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}
void eraseAiPaddle (int row) {
int stĺpec = rozlíšenie [0] - PADDLE_WIDTH;
erasePixel (stĺpec, riadok - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (stĺpec, riadok - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (stĺpec, riadok, PADDLE_WIDTH);
erasePixel (stĺpec, riadok + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (stĺpec, riadok + (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);
}