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);
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]
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
}
void erasePixel (int posX, int posY, int dimensions) {// Slet gruppe af pixels
for (int x = 0; x
}
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);
}