Twoj adres e-mail nie bedzie opublikowany. wymagane pola są zaznaczone *
#zawierać
#zawierać
#zawierać
#zawierać
# zdefiniować SCREEN_WIDTH 128 // OLED szerokość wyświetlania, w pikselach
# zdefiniować SCREEN_HEIGHT 64 // wysokość wyświetlania OLED, w pikselach
# zdefiniować OLED_RESET 4 // Reset pin # (lub -1, jeśli współdzielisz pin reset Arduino)
Wyświetlacz Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT i Wire, OLED_RESET); // Deklaracja dla wyświetlacza SSD1306 podłączonego do I2C (piny SDA, SCL)
int rozdzielczość [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, piłka [2] = {20, (rozdzielczość [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, SPEED = 3;
int playerScore = 0
, aiScore = 0
, playerPos = 0
, aiPos = 0;
char ballDirectionHori = „R”
, ballDirectionVerti = „S”;
boolean inProgress = true;
// Funcoes Prototipo das
void movePlayer ();
void moveAi ();
void drawScore ();
void eraseScore ();
void drawNet ();
void drawPixel (int posX, int posY, int Dimensions);
void erasePixel (int posX, int posY, int Dimensions);
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);
void setup () {
Serial.begin (9600);
// SSD1306_SWITCHCAPVCC = wewnętrznie generuj napięcie wyświetlacza z 3,3 V.
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adres 0x3D dla 128x64
Serial.println (F („Niepowodzenie alokacji SSD1306”));
dla (;;); // Nie kontynuuj, zapętlaj na zawsze
}
display.display ();
opóźnienie (2000); // Pauza na 2 sekundy
// Wyczyść bufor
display.clearDisplay ();
}
void loop () {
if (aiScore> 3 || playerScore> 3) {// sprawdź stan gry
inProgress = false;
// ktoś wygrał
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
display.setCursor (0, 0); // dowiedzieć się, kto
if (aiScore> playerScore)
display.println („YOU LOSE!”);
else if (playerScore> aiScore)
display.println („YOU WIN!”);
}
if (inProgress) {
eraseScore ();
eraseBall (piłka [0], piłka [1]);
if (ballDirectionVerti == 'U') // przesuń piłkę w górę po przekątnej
piłka [1] = piłka [1] - PRĘDKOŚĆ;
if (ballDirectionVerti == 'D') // przesuń piłkę w dół po przekątnej
piłka [1] = piłka [1] + PRĘDKOŚĆ;
if (piłka [1] = rozdzielczość [1]) // odbija piłkę od dołu
ballDirectionVerti = „U”;
if (ballDirectionHori == 'R') {
piłka [0] = piłka [0] + PRĘDKOŚĆ; // rusz piłkę
if (piłka [0]> = (rozdzielczość [0] - 6)) {// piłka znajduje się na krawędzi AI ekranu
if ((aiPos + 12)> = piłka [1] i& (aiPos - 12) (aiPos + 2)) // odbija piłkę w dół
ballDirectionVerti = „D”;
w przeciwnym razie jeśli (piłka [1] ballDirectionVerti = „U”;
w przeciwnym razie // odbij piłkę prosto
ballDirectionVerti = „S”;
ballDirectionHori = „L”; // zmień kierunek piłki
} else {// CEL!
piłka [0] = 6; // przenieś piłkę na drugą stronę ekranu
ballDirectionVerti = „S”; // zresetować piłkę do prostej podróży
piłka [1] = rozdzielczość [1] / 2; // przenieś piłkę na środek ekranu
++ playerScore; // zwiększenie wyniku gracza
}
}
}
if (ballDirectionHori == 'L') {
piłka [0] = piłka [0] - PRĘDKOŚĆ; // rusz piłkę
if (piłka [0] = piłka [1] i& (playerPos - 12) (playerPos + 2)) // odbija piłkę w dół
ballDirectionVerti = „D”;
else if (ball [1] aiPos)
++ aiPos;
else if (ball [1]
drawAiPaddle (aiPos);
}
void drawScore () {// Remis AI i wyniki gracza
display.setTextSize (2);
display.setTextColor (WHITE);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void eraseScore () {// Wymaż AI i wyniki gracza
display.setTextSize (2);
display.setTextColor (CZARNY);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void drawNet () {// Rysuj pole linii
dla (int i = 0; i drawPixel (((rozdzielczość [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}
void drawPixel (int posX, int posY, int Dimensions) {// Rysuj grupę pikseli
dla (int x = 0; x
}
void erasePixel (int posX, int posY, int Dimensions) {// Usuń grupę pikseli
dla (int x = 0; x
}
void drawPlayerPaddle (int row) {
drawPixel (0, wiersz - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (0, wiersz - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, wiersz, PADDLE_WIDTH);
drawPixel (0, wiersz + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, wiersz + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
void erasePlayerPaddle (int row) {
erasePixel (0, wiersz - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (0, wiersz - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, wiersz, PADDLE_WIDTH);
erasePixel (0, wiersz + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, wiersz + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
void drawAiPaddle (int row) {
kolumna int = rozdzielczość [0] - PADDLE_WIDTH;
drawPixel (kolumna, wiersz - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (kolumna, wiersz - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (kolumna, wiersz, PADDLE_WIDTH);
drawPixel (kolumna, wiersz + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (kolumna, wiersz + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}
void eraseAiPaddle (int row) {
kolumna int = rozdzielczość [0] - PADDLE_WIDTH;
erasePixel (kolumna, wiersz - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (kolumna, wiersz - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (kolumna, wiersz, PADDLE_WIDTH);
erasePixel (kolumna, wiersz + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (kolumna, wiersz + (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, ROZMIAR PIŁKI, CZARNY);
}