Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate *
#include
#include
#include
#include
#define SCREEN_WIDTH 128 // Lățimea afișării OLED, în pixeli
#define SCREEN_HEIGHT 64 // Înălțimea afișării OLED, în pixeli
#define OLED_RESET 4 // Resetarea pin # (sau -1 dacă partajează pinul de resetare Arduino)
Afișare Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET); // Declarație pentru un afișaj SSD1306 conectat la I2C (pins SDA, SCL)
rezolutie int [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, minge [2] = {20, (rezoluție [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, VITEZĂ = 3;
int playerScore = 0
, Scor aiSc = 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, dimensiuni int);
void erasePixel (int posX, int posY, dimensiuni int);
void drawPlayerPaddle (rândul int);
void erasePlayerPaddle (int rând);
void drawAiPaddle (int rând);
void eraseAiPaddle (rândul int);
void drawBall (int x, int y);
void eraseBall (int x, int y);
void setup () {
Serial.begin (9600);
// SSD1306_SWITCHCAPVCC = generați tensiunea afișajului de la 3.3V intern
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresa 0x3D pentru 128x64
Serial.println (F („Aluarea SSD1306 a eșuat”));
pentru (;;); // Nu continua, bucle pentru totdeauna
}
display.display ();
întârziere (2000); // Pauză timp de 2 secunde
// Ștergeți tamponul
display.clearDisplay ();
}
void loop () {
if (aiScore> 3 || Scor jucător> 3) {// verificați starea jocului
inProgress = fals;
// cineva a câștigat
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
display.setCursor (0, 0); // dați seama cine
if (aiScore> playerScore)
afișare.println („VOI PIERDE!”);
altfel dacă (playerScore> aiScore)
display.println ("VENITĂ!");
}
if (inProgress) {
eraseScore ();
eraseBall (minge [0], minge [1]);
if (ballDirectionVerti == 'U') // deplasați mingea în diagonală
minge [1] = minge [1] - VITEZĂ;
if (ballDirectionVerti == 'D') // mutați mingea în diagonală
minge [1] = minge [1] + VITEZĂ;
if (minge [1] = rezoluție [1]) // sări mingea de pe fund
ballDirectionVerti = 'U';
if (ballDirectionHori == 'R') {
minge [0] = minge [0] + VITEZĂ; // mișca mingea
if (bilă [0]> = (rezoluție [0] - 6)) {// minge este la marginea AI a ecranului
if ((aiPos + 12)> = minge [1] && (aiPos - 12) (aiPos + 2)) // deviază mingea în jos
ballDirectionVerti = 'D';
else if (minge [1] ballDirectionVerti = 'U';
altceva // deviază mingea drept
ballDirectionVerti = 'S';
ballDirectionHori = 'L'; // schimbă direcția mingii
} else {// GOAL!
minge [0] = 6; // mutați mingea în cealaltă parte a ecranului
ballDirectionVerti = 'S'; // resetează mingea la deplasare dreaptă
minge [1] = rezoluție [1] / 2; // mutați mingea la mijlocul ecranului
++ playerScore; // crește scorul jucătorului
}
}
}
if (ballDirectionHori == 'L') {
minge [0] = minge [0] - VITEZĂ; // mișca mingea
if (minge [0] = minge [1] && (playerPos - 12) (playerPos + 2)) // deviază mingea în jos
ballDirectionVerti = 'D';
altfel dacă (bilă [1] aiPos)
++ aiPos;
altfel dacă (mingea [1]
drawAiPaddle (aiPos);
}
void drawScore () {// Desenează AI și scorurile jucătorului
display.setTextSize (2);
display.setTextColor (WHITE);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void eraseScore () {// Șterge AI și scorurile jucătorului
display.setTextSize (2);
display.setTextColor (NEGRU);
display.setCursor (45, 0);
display.println (playerScore);
display.setCursor (75, 0);
display.println (aiScore);
}
void drawNet () {// câmp linie desenare
pentru (int i = 0; i drawPixel (((rezoluție [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}
void drawPixel (int posX, int posY, dimensiuni int) {// Desenează grupul de pixeli
for (int x = 0; x
}
void erasePixel (int posX, int posY, dimensiuni int) {// Ștergeți grupul de pixeli
for (int x = 0; x
}
void drawPlayerPaddle (rândul int) {
drawPixel (0, rând - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (0, rând - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, rând, PADDLE_WIDTH);
drawPixel (0, rând + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, rând + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
void erasePlayerPaddle (rândul int) {
erasePixel (0, rând - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (0, rând - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, rând, PADDLE_WIDTH);
erasePixel (0, rând + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, rând + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}
void drawAiPaddle (rândul int) {
int column = rezoluție [0] - PADDLE_WIDTH;
drawPixel (coloană, rând - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (coloană, rând - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (coloană, rând, PADDLE_WIDTH);
drawPixel (coloană, rând + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (coloană, rând + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}
void eraseAiPaddle (rândul int) {
int column = rezoluție [0] - PADDLE_WIDTH;
erasePixel (coloană, rând - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (coloană, rând - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (coloană, rând, PADDLE_WIDTH);
erasePixel (coloană, rând + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (coloană, rând + (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);
}