Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai *

#termasuk
#termasuk
#termasuk
#termasuk

#define SCREEN_WIDTH 128 // Lebar tampilan OLED, dalam piksel
#define SCREEN_HEIGHT 64 // Tinggi tampilan OLED, dalam piksel
#define OLED_RESET 4 // Atur ulang pin # (atau -1 jika berbagi pin atur ulang Arduino)

Tampilan Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, & Kawat, OLED_RESET); // Deklarasi untuk tampilan SSD1306 yang terhubung ke I2C (SDA, pin SCL)

resolusi int [2] = {SCREEN_WIDTH, SCREEN_HEIGHT}
, bola [2] = {20, (resolusi [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;

// Prototipo das funcoes
membatalkan movePlayer ();
membatalkan moveAi ();
batal drawScore ();
membatalkan eraseScore ();
membatalkan drawNet ();
membatalkan drawPixel (int posX, int postY, int dimensi);
membatalkan erasePixel (int posX, int posY, int dimensi);


membatalkan drawPlayerPaddle (baris int);
membatalkan erasePlayerPaddle (baris int);
batal drawAiPaddle (baris int);
membatalkan eraseAiPaddle (baris int);
membatalkan drawBall (int x, int y);
void eraseBall (int x, int y);

pengaturan batal () {
Serial.begin (9600);

// SSD1306_SWITCHCAPVCC = hasilkan tegangan tampilan dari 3.3V secara internal
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Alamat 0x3D untuk 128x64
Serial.println (F ("Alokasi SSD1306 gagal"));
untuk (;;); // Jangan lanjutkan, ulangi selamanya
}
display.display ();
delay (2000); // Diam selama 2 detik

// Kosongkan buffer
display.clearDisplay ();
}

void loop () {
if (aiScore> 3 || playerScore> 3) {// periksa kondisi permainan
inProgress = false;

// seseorang telah menang
display.clearDisplay ();
display.setTextSize (4);
display.setTextColor (WHITE);
display.setCursor (0, 0); // cari tahu siapa
if (aiScore> playerScore)
display.println ("YOU LOSE!");
lain jika (playerScore> aiScore)
display.println ("ANDA MENANG!");
}

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

if (ballDirectionVerti == 'U') // pindahkan bola ke atas secara diagonal
ball [1] = ball [1] - SPEED;

if (ballDirectionVerti == 'D') // pindahkan bola ke bawah secara diagonal
ball [1] = ball [1] + SPEED;

if (ball [1] = resolusi [1]) // memantulkan bola dari bawah
ballDirectionVerti = 'U';

if (ballDirectionHori == 'R') {
ball [0] = ball [0] + SPEED; // pindahkan bola
if (bola [0]> = (resolusi [0] - 6)) {// bola ada di tepi AI layar
if ((aiPos + 12)> = ball [1] && (aiPos - 12) (aiPos + 2)) // membelokkan bola ke bawah
ballDirectionVerti = 'D';
lain jika (bola [1] ballDirectionVerti = 'U';
selain itu // membelokkan bola lurus
ballDirectionVerti = 'S';

ballDirectionHori = 'L'; // ubah arah bola
} else {// GOAL!
bola [0] = 6; // pindahkan bola ke sisi lain layar
ballDirectionVerti = 'S'; // atur ulang bola ke straight travel
bola [1] = resolusi [1] / 2; // pindahkan bola ke tengah layar
++ pemainScore; // tingkatkan skor pemain
}
}
}

if (ballDirectionHori == 'L') {
ball [0] = ball [0] - SPEED; // pindahkan bola
if (ball [0] = ball [1] && (playerPos - 12) (playerPos + 2)) // membelokkan bola ke bawah
ballDirectionVerti = 'D';
lain jika (bola [1] aiPos)
++ aiPos;
lain jika (bola [1] --aiPos;

drawAiPaddle (aiPos);
}

membatalkan drawScore () {// Menggambar skor AI dan pemain
display.setTextSize (2);
display.setTextColor (WHITE);
display.setCursor (45, 0);
display.println (playerScore);

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

void eraseScore () {// Hapus skor AI dan pemain
display.setTextSize (2);
display.setTextColor (BLACK);
display.setCursor (45, 0);
display.println (playerScore);

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

membatalkan drawNet () {// Gambar bidang garis
untuk (int i = 0; i drawPixel (((resolusi [0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), WALL_WIDTH);
}

membatalkan drawPixel (int posX, int postY, dimensi int) {// Gambar grup piksel
untuk (int x = 0; x untuk (int y = 0; y display.drawPixel ((posX + x), (posY + y), WHITE);
}

void erasePixel (int posX, int posY, dimensi int) {// Hapus grup piksel
untuk (int x = 0; x untuk (int y = 0; y display.drawPixel ((posX + x), (posY + y), BLACK);
}

membatalkan drawPlayerPaddle (baris int) {
drawPixel (0, baris - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (0, baris - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, baris, PADDLE_WIDTH);
drawPixel (0, baris + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (0, baris + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}

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

batal drawAiPaddle (baris int) {
int kolom = resolusi [0] - PADDLE_WIDTH;
drawPixel (kolom, baris - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel (kolom, baris - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (kolom, baris, PADDLE_WIDTH);
drawPixel (kolom, baris + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel (kolom, baris + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

void eraseAiPaddle (baris int) {
int kolom = resolusi [0] - PADDLE_WIDTH;
erasePixel (kolom, baris - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel (kolom, baris - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (kolom, baris, PADDLE_WIDTH);
erasePixel (kolom, baris + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel (kolom, baris + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

membatalkan 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);
}