Vaše e-mailová adresa nebude zveřejněna. Povinná pole jsou označena *
#zahrnout
#zahrnout
#zahrnout
#zahrnout
#define SCREEN_WIDTH 128 // OLED šířka zobrazení v pixelech
#define SCREEN_HEIGHT 64 // OLED výška zobrazení v pixelech
#define OLED_RESET 4 // Reset pin # (nebo -1, pokud sdílíte resetovací pin Arduino)
Displej Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET); // Prohlášení pro displej SSD1306 připojený k I2C (piny SDA, SCL)
int rozlišení [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, koule [2] = {20, (rozlišení [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, RYCHLOST = 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 kóty);
void erasePixel (int posX, int posY, int rozměry);
void drawPlayerPaddle (int row);
void erasePlayerPaddle (int row);
void drawAiPaddle (int row);
void eraseAiPaddle (int row);
void drawBall (int x, int y);
void eraseBall (int x, int y);
neplatné nastavení () {
Serial.egegin (9600);
// SSD1306_SWITCHCAPVCC = interně generuje napětí displeje z 3,3 V
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresa 0x3D pro 128x64
Serial.println (F ("alokace SSD1306 selhala"));
pro (;;); // Nepokračujte, navždy navlékněte
}
display.display ();
zpoždění (2000); // Pauza na 2 sekundy
// Vymazání vyrovnávací paměti
display.clearDisplay ();
}
void loop () {
if (aiScore> 3 || playerScore> 3) {// zkontrolujte stav hry
inProgress = false;
// někdo vyhrál
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
display.setCursor (0, 0); // zjistit, kdo
if (aiScore> playerScore)
display.println ("YOS LOSE!");
jinak pokud (playerScore> aiScore)
display.println ("YOU WIN!");
}
if (inProgress) {
eraseScore ();
eraseBall (míč [0], míč [1]);
if (ballDirectionVerti == 'U') // posuňte míč diagonálně nahoru
koule [1] = koule [1] - RYCHLOST;
if (ballDirectionVerti == 'D') // posuňte míč dolů diagonálně
koule [1] = koule [1] + RYCHLOST;
jestliže (koule [1] = rozlišení [1]) // odrazí míč ze dna
ballDirectionVerti = 'U';
if (ballDirectionHori == 'R') {
koule [0] = koule [0] + RYCHLOST; // přesunout míč
if (ball [0]> = (rozlišení [0] - 6)) {// ball je na okraji AI obrazovky
if ((aiPos + 12)> = míč [1] && (aiPos - 12) (aiPos + 2)) // odklonit míč dolů
ballDirectionVerti = 'D';
jinak pokud (míč [1] ballDirectionVerti = 'U';
jinak // odklonit míč přímo
ballDirectionVerti = 'S';
ballDirectionHori = 'L'; // změnit směr míče
} else {// CÍLE!
koule [0] = 6; // přesuňte míč na druhou stranu obrazovky
ballDirectionVerti = 'S'; // resetování koule na přímý pohyb
koule [1] = rozlišení [1] / 2; // přesuňte míč do středu obrazovky
++ playerScore; // zvýšení skóre hráče
}
}
}
if (ballDirectionHori == 'L') {
koule [0] = koule [0] - RYCHLOST; // přesunout míč
if (ball [0] = ball [1] && (playerPos - 12) (playerPos + 2)) // odklonit míč dolů
ballDirectionVerti = 'D';
jinak pokud (míč [1] aiPos)
++ aiPos;
jinak pokud (míč [1]
drawAiPaddle (aiPos);
}
void drawScore () {// Nakreslete AI a skóre hráče
display.setTextSize (2);
display.setTextColor (WHITE);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void eraseScore () {// Vymazat AI a skóre hráče
display.setTextSize (2);
display.setTextColor (BLACK);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void drawNet () {// Nakreslete řádkové pole
pro (int i = 0; i drawPixel (((rozlišení [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}
void drawPixel (int posX, int posY, int dimension) {// Nakreslete skupinu pixelů
pro (int x = 0; x
}
void erasePixel (int posX, int posY, int dimension) {// Vymazat skupinu pixelů
pro (int x = 0; x
}
void drawPlayerPaddle (int row) {
drawPixel (0, řádek - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (0, řádek - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, řádek, PADDLE_WIDTH);
drawPixel (0, řádek + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, řádek + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
void erasePlayerPaddle (int row) {
erasePixel (0, řádek - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (0, řádek - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, řádek, PADDLE_WIDTH);
erasePixel (0, řádek + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, řádek + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
void drawAiPaddle (int row) {
int sloupec = rozlišení [0] - PADDLE_WIDTH;
drawPixel (sloupec, řádek - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (sloupec, řádek - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (sloupec, řádek, PADDLE_WIDTH);
drawPixel (sloupec, řádek + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (sloupec, řádek + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}
void eraseAiPaddle (int row) {
int sloupec = rozlišení [0] - PADDLE_WIDTH;
erasePixel (sloupec, řádek - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (sloupec, řádek - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (sloupec, řádek, PADDLE_WIDTH);
erasePixel (sloupec, řádek + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (sloupec, řádek + (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);
}