Din e-mail-adresse offentliggøres ikke. Nødvendige felter er markeret *

#omfatte
#omfatte
#omfatte
#omfatte

#definér SCREEN_WIDTH 128 // OLED-skærmbredde i pixels
#definér SCREEN_HEIGHT 64 // OLED-skærmhøjde, i pixels
#define OLED_RESET 4 // Nulstil pin # (eller -1 hvis du deler Arduino reset pin)

Adafruit_SSD1306-display (SCREEN_WIDTH, SCREEN_HEIGHT & Wire, OLED_RESET); // Erklæring for en SSD1306-skærm tilsluttet I2C (SDA, SCL-stifter)

int-opløsning [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, bold [2] = {20, (opløsning [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, HASTIGHED = 3;
int playerScore = 0
, aiScore = 0
, playerPos = 0
aiPos = 0;
char ballDirectionHori = 'R'
, ballDirectionVerti = 'S';
boolsk inProgress = sand;

// Prototipo das funcoes
void movePlayer ();
ugyldig flytningAi ();
void drawScore ();
void eraseScore ();
void drawNet ();
void drawPixel (int posX, int posY, int dimensioner);
void erasePixel (int posX, int posY, int dimensioner);
void drawPlayerPaddle (int række);

instagram viewer

void erasePlayerPaddle (int række);
void drawAiPaddle (int række);
void eraseAiPaddle (int række);
void drawBall (int x, int y);
void eraseBall (int x, int y);

ugyldig opsætning () {
Serial.begin (9600);

// SSD1306_SWITCHCAPVCC = generer visningsspænding fra 3,3V internt
hvis (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresse 0x3D for 128x64
Serial.println (F ("SSD1306-allokering mislykkedes"));
til (;;); // Fortsæt ikke, loop for evigt
}
display.display ();
forsinkelse (2000); // Pause i 2 sekunder

// Ryd buffer
display.clearDisplay ();
}

void loop () {
if (aiScore> 3 || playerScore> 3) {// check spiltilstand
inProgress = falsk;

// nogen har vundet
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
display.set markør (0, 0); // regne ud hvem
if (aiScore> playerScore)
display.println ("DU Mister!");
andet hvis (playerScore> aiScore)
display.println ("DU VINDER!");
}

if (inProgress) {
eraseScore ();
eraseBall (bold [0], bold [1]);

if (ballDirectionVerti == 'U') // bevæg kuglen diagonalt op
bold [1] = bold [1] - HASTIGHED;

if (ballDirectionVerti == 'D') // bevæg kuglen diagonalt ned
bold [1] = bold [1] + HASTIGHED;

hvis (bold [1] = opløsning [1]) // afvisning af bolden fra bunden
ballDirectionVerti = 'U';

if (ballDirectionHori == 'R') {
bold [0] = bold [0] + HASTIGHED; // flytte bolden
hvis (bold [0]> = (opløsning [0] - 6)) {// bold er ved AI-kanten af ​​skærmen
hvis ((aiPos + 12)> = bold [1] && (aiPos - 12) (aiPos + 2)) // afbøjer bolden ned
ballDirectionVerti = 'D';
ellers hvis (bold [1] ballDirectionVerti = 'U';
andet // aflede bolden lige
ballDirectionVerti = 'S';

ballDirectionHori = 'L'; // skift kuglens retning
} andet {// MÅL!
bold [0] = 6; // flyt kuglen til anden side af skærmen
ballDirectionVerti = 'S'; // nulstil bolden til lige kørsel
kugle [1] = opløsning [1] / 2; // flyt kuglen til midten af ​​skærmen
++ playerScore; // øge spillerens score
}
}
}

if (ballDirectionHori == 'L') {
bold [0] = bold [0] - HASTIGHED; // flytte bolden
hvis (bold [0] = bold [1] && (spillerPos - 12) (spillerPos + 2)) // afbøj kugle ned
ballDirectionVerti = 'D';
andet hvis (bold [1] aiPos)
++ aiPos;
ellers hvis (bold [1] --aiPos;

drawAiPaddle (aiPos);
}

void drawScore () {// Draw AI og spiller score
display.setTextSize (2);
display.setTextColor (WHITE);
display.set markør (45, 0);
display.println (playerScore);

display.set markør (75, 0);
display.println (aiScore);
}

void eraseScore () {// Slet AI og spiller score
display.setTextSize (2);
display.setTextColor (SORT);
display.set markør (45, 0);
display.println (playerScore);

display.set markør (75, 0);
display.println (aiScore);
}

void drawNet () {// Draw line field
for (int i = 0; i drawPixel (((opløsning [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}

void drawPixel (int posX, int posY, int dimensions) {// Draw gruppe af pixels
for (int x = 0; x for (int y = 0; y display.drawPixel ((posX + x), (posY + y), WHITE);
}

void erasePixel (int posX, int posY, int dimensions) {// Slet gruppe af pixels
for (int x = 0; x for (int y = 0; y display.drawPixel ((posX + x), (posY + y), SVART);
}

void drawPlayerPaddle (int række) {
drawPixel (0, række - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (0, række - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, række, PADDLE_WIDTH);
drawPixel (0, række + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, række + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}

void erasePlayerPaddle (int række) {
slet Pixel (0, række - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
slet Pixel (0, række - PADDLE_WIDTH, PADDLE_WIDTH);
slet Pixel (0, række, PADDLE_WIDTH);
slet Pixel (0, række + PADDLE_WIDTH, PADDLE_WIDTH);
slet Pixel (0, række + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}

void drawAiPaddle (int række) {
int kolonne = opløsning [0] - PADDLE_WIDTH;
drawPixel (kolonne, række - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (kolonne, række - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (kolonne, række, PADDLE_WIDTH);
drawPixel (kolonne, række + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (kolonne, række + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

void eraseAiPaddle (int række) {
int kolonne = opløsning [0] - PADDLE_WIDTH;
slet Pixel (kolonne, række - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
slet Pixel (kolonne, række - PADDLE_WIDTH, PADDLE_WIDTH);
slet Pixel (kolonne, række, PADDLE_WIDTH);
slet Pixel (kolonne, række + PADDLE_WIDTH, PADDLE_WIDTH);
slet Pixel (kolonne, række + (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, SVART);
}