E-posta hesabınız yayımlanmayacak. Gerekli alanlar işaretlendi *

#Dahil etmek
#Dahil etmek
#Dahil etmek
#Dahil etmek

#define SCREEN_WIDTH 128 // OLED ekran genişliği, piksel cinsinden
#define SCREEN_HEIGHT 64 // OLED ekran yüksekliği, piksel cinsinden
#define OLED_RESET 4 // Pin numarasını sıfırla (veya Arduino sıfırlama pinini paylaşıyorsa -1)

Adafruit_SSD1306 ekran (SCREEN_WIDTH, SCREEN_HEIGHT ve Tel, OLED_RESET); // I2C'ye bağlı bir SDD1306 ekran için bildirim (SDA, SCL pinleri)

int çözünürlük [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, top [2] = {20, (çözünürlük [1] / 2)};
const int PIXEL_SIZE = 8
, WALL_WIDTH = 4
, PADDLE_WIDTH = 4
, BALL_SIZE = 4
, HIZ = 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 boyutlar);
void erasePixel (int posX, int posY, int boyutlar);

instagram viewer

void drawPlayerPaddle (int satır);
void erasePlayerPaddle (int satır);
void drawAiPaddle (int satır);
void eraseAiPaddle (int satır);
void drawBall (int x, int y);
void eraseBall (int x, int y);

void setup () {
Serial.begin (9600);

// SSD1306_SWITCHCAPVCC = dahili olarak 3.3V'dan ekran voltajı üret
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// 128x64 için 0x3D adresi
Serial.println (F ("SSD1306 ayırma başarısız"));
için (;;); // Devam etme, sonsuza dek döngü
}
) (Display.display;
gecikme (2000); // 2 saniye durakla

// Arabelleği temizle
display.clearDisplay ();
}

void loop () {
if (aiScore> 3 || playerScore> 3) {// oyun durumunu kontrol et
inProgress = yanlış;

// biri kazandı
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
display.setCursor (0, 0); // kim olduğunu bul
eğer (aiScore> playerScore)
display.println ("KAYBEDİN!");
else if (playerScore> aiScore)
display.println ("SİZ KAZANIR!");
}

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

if (ballDirectionVerti == 'U') // topu çapraz olarak yukarı taşı
top [1] = top [1] - HIZ;

if (ballDirectionVerti == 'D') // topu çapraz olarak aşağı hareket ettirin
top [1] = top [1] + HIZ;

if (top [1] = çözünürlük [1]) // topu alttan zıplayın
ballDirectionVerti = 'U';

if (ballDirectionHori == 'R') {
top [0] = top [0] + HIZ; // topu hareket ettir
if (top [0]> = (çözünürlük [0] - 6)) {// top ekranın AI kenarında
if ((aiPos + 12)> = top [1] && (aiPos - 12) (aiPos + 2)) // topu aşağı doğru saptır
ballDirectionVerti = 'D';
else if (top [1] ballDirectionVerti = 'U';
else // topu düz saptırmak
ballDirectionVerti = 'S';

ballDirectionHori = 'L'; // top yönünü değiştir
} başka {// HEDEF!
top [0] = 6; // topu ekranın diğer tarafına taşı
ballDirectionVerti = 'S'; // topu düz harekete sıfırla
top [1] = çözünürlük [1] / 2; // topu ekranın ortasına taşı
++ playerScore; // oyuncu puanını artır
}
}
}

if (ballDirectionHori == 'L') {
top [0] = top [0] - HIZ; // topu hareket ettir
if (top [0] = top [1] && (playerPos - 12) (playerPos + 2)) // topu aşağı saptır
ballDirectionVerti = 'D';
else if (top [1] aiPos)
++ aiPos;
else if (top [1] --aiPos;

drawAiPaddle (aiPos);
}

void drawScore () {// AI ve oyuncu skorlarını çizin
display.setTextSize (2);
display.setTextColor (WHITE);
display.setCursor (45, 0);
display.println (playerScore);

display.setCursor (75, 0);
display.println (aiScore);
}

void eraseScore () {// AI ve oyuncu puanlarını sil
display.setTextSize (2);
display.setTextColor (BLACK);
display.setCursor (45, 0);
display.println (playerScore);

display.setCursor (75, 0);
display.println (aiScore);
}

void drawNet () {// Çizgi alanı çiz
için (int i = 0; i drawPixel (((çözünürlük [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}

void drawPixel (int posX, int posY, int boyutlar) {// Piksel grubu çiz
için (int x = 0; x için (int y = 0; y display.drawPixel ((posX + x), (posY + y), BEYAZ);
}

void erasePixel (int posX, int posY, int boyutlar) {// Piksel grubunu sil
için (int x = 0; x için (int y = 0; y display.drawPixel ((posX + x), (posY + y), SİYAH);
}

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

void erasePlayerPaddle (int satır) {
erasePixel (0, satır - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (0, satır - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0; satır; PADDLE_WIDTH);
erasePixel (0, satır + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (0, satır + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}

void drawAiPaddle (int satır) {
int sütun = çözünürlük [0] - PADDLE_WIDTH;
drawPixel (sütun, satır - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (sütun, satır - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (sütun, satır, PADDLE_WIDTH);
drawPixel (sütun, satır + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (sütun, satır + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

void eraseAiPaddle (int satır) {
int sütun = çözünürlük [0] - PADDLE_WIDTH;
erasePixel (sütun, satır - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (sütun, satır - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (sütun, satır, PADDLE_WIDTH);
erasePixel (sütun, satır + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (sütun, satır + (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);
}